Solucionado (ver solución)
Solucionado
(ver solución)
2
respuestas

El ejercicio solo funciona si los precios van de mayor a menor

Hola Buna tarde a todos. Saludos desde México. La duda que me surgió en este ejercicio fue a partir de que yo utilicé diferentes precios para cada viaje a las diferentes ciudades, y no están ordenados en el array, ya sea de menor a mayor o viceversa, están asignados aleatoriamente, de esta manera me dí cuenta que la solución propuesta para el ejemplo dado no funciona, ya que el while se detiene siempre en Mérida (que es mi caso), y no parece evaluar el resto de los elementos del array. Si cambio el arreglo y ordeno los precios de mayor a menor funciona como el ejemplo del profesor, Sin embargo siento que debería funcionar independientemente del orden dentro del array. Otra duda, es que yo esperaría que si tengo cierta cantidad de dinero disponible para viajar, que es mayor que al menos 2 de las ciudades, debería arrojar al menos las dos opciones para las que me alcanza, y no solamente la mayor. Finalmente traté desarrollar una propuesta que funcionara indepnedientemente si en mi arreglo tengo ordenado los valores de mayor a menor, pero no conseguí hacerlo funcionar, es aquí donde solicito la ayuda, para saber qué estoy haciendo mal, adjunto el código. Gracias de antemano. y Saludos.

Este es el primer bloque de código según el profe.

const listaCiudades =["Mérida", "brasilia", "La habana", "Santiago", "Lima"];
const precioCiudad = [500, 550, 700, 750, 800];
const presupuesto = 710;

let i = 0
while (precioCiudad[i] > presupuesto && i < listaCiudades.length) {
    i++
}

if (i == listaCiudades.length){
    console.log("No tenemos pasajes disponibles");
}else {
    console.log("puedes comprar pasajes para:" + listaCiudades[i]);
}

En este segundo bloque hago una modificación al código, intentanto que evalue cada elemento del array, en busca de la opción que se ajusta al presupuesto, pero no logro hacerlo funcionar:

const listaCiudades =["Mérida", "brasilia", "La habana", "Santiago", "Lima"];
const precioCiudad = [500, 550, 700, 750, 800];
const presupuesto = 710;

let i = 0
while ( i < listaCiudades.length) {
    i++;
}

if (presupuesto < precioCiudad[i]) {
    console.log("No tenemos pasajes disponibles")

        }else if (presupuesto >= precioCiudad[i]){
            console.log("Puedes comprar boleto par la ciudad de:" + listaCiudades[i])    
    }
2 respuestas
solución!

¡Hola! Espero que estés teniendo un buen día desde México. En cuanto a tu pregunta, tienes razón en que el código propuesto por el profesor solo funciona si los precios están ordenados de mayor a menor. Para solucionar esto, puedes utilizar un bucle for en lugar del while y agregar una variable para almacenar la ciudad que se ajusta al presupuesto. Te muestro un ejemplo de cómo podrías hacerlo:

const listaCiudades =["Mérida", "brasilia", "La habana", "Santiago", "Lima"];
const precioCiudad = [500, 550, 700, 750, 800];
const presupuesto = 710;

let ciudadAjustada = "";
for (let i = 0; i < listaCiudades.length; i++) {
  if (presupuesto >= precioCiudad[i]) {
    ciudadAjustada = listaCiudades[i];
  }
}

if (ciudadAjustada === "") {
  console.log("No tenemos pasajes disponibles");
} else {
  console.log("Puedes comprar boleto para la ciudad de: " + ciudadAjustada);
}

En este ejemplo, el bucle for recorre todas las ciudades y verifica si el presupuesto es mayor o igual al precio de la ciudad. Si es así, se almacena el nombre de la ciudad en la variable ciudadAjustada. Al final del bucle, se verifica si la variable ciudadAjustada está vacía, lo que significa que no hay ciudades disponibles dentro del presupuesto. De lo contrario, se muestra el nombre de la ciudad que se ajusta al presupuesto.

En cuanto a tu segunda pregunta, el código actual solo muestra la ciudad con el precio más alto que se ajusta al presupuesto. Si deseas mostrar todas las opciones disponibles dentro del presupuesto, puedes modificar el código para que almacene todas las ciudades que cumplen con la condición en un array y luego mostrar ese array. Te muestro un ejemplo de cómo podrías hacerlo:

const listaCiudades =["Mérida", "brasilia", "La habana", "Santiago", "Lima"];
const precioCiudad = [500, 550, 700, 750, 800];
const presupuesto = 710;

let ciudadesDisponibles = [];
for (let i = 0; i < listaCiudades.length; i++) {
  if (presupuesto >= precioCiudad[i]) {
    ciudadesDisponibles.push(listaCiudades[i]);
  }
}

if (ciudadesDisponibles.length === 0) {
  console.log("No tenemos pasajes disponibles");
} else {
  console.log("Puedes comprar boleto para las siguientes ciudades:");
  console.log(ciudadesDisponibles);
}

En este ejemplo, se utiliza un array ciudadesDisponibles para almacenar todas las ciudades que cumplen con la condición. Al final del bucle, se verifica si el array está vacío, lo que significa que no hay ciudades disponibles dentro del presupuesto. De lo contrario, se muestra el mensaje "Puedes comprar boleto para las siguientes ciudades:" seguido del array ciudadesDisponibles.

Espero que esto te ayude a resolver tus dudas. ¡Buenos estudios!

Hola Rafaela, Saludos desde México. Gracias por responder. Con tu explicación ahora entiendo como funciona la solución del profesor y con los ejemplos que das puedo identificar otras maneras de abordar el problema.