Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
4
respuestas

[Sugerencia] Una manera útil y didáctica de resolver los ejercicios del 6 al 11

Básicamente, quiero compartir la manera en que hice los ejercicios. En estos ejercicios suelo agregar complejidad al problema solicitado para agudizar más el aprendizaje de cosas nuevas. En este caso hice que las listas que se solicitan se generaran de manera aleatoria (tanto su longitud como cada uno de sus items), brindé soluciones medianamente modulares, busqué tener un código optimizado en general y utilicé un par de métodos que no hemos visto en clase como el .some() y el .toFixed() que investigué para conseguir los resultados que buscaba en ese momento, y que claramente están explicados dentro de mi código, por si les quieres echar un ojo:

PD: Si quieres ver las notas cómodamente, te recomiendo pegar el código en tu VS Code y presionar Alt+Z. Ahí verás las notas en un formato más legible y puedes volver a oprimir la combinación de teclas para volver al formato anterior.

PD2: Es muy largo el código, figuró partirlo en 2 jaja

let listaNumeros = [];  //Aquí simplemente estoy creando 2 arrays, generando un número aleatorio
let listaNumeros2 = []; //y asignando ese número aleatorio a la longitud de ambas listas
let longitudListas = parseInt(Math.random()*20 + 1);
listaNumeros.length = longitudListas;
listaNumeros2.length = longitudListas;

function rellenarListas(lista) {  //En esta función estoy generando un número aleatorio para cada posición de la lista. Con el bucle While indico que si el número generado ya está dentro de la lista, genere uno nuevamente hasta que el número conseguido no se encuentre en la lista. Esto me evita problemas con la función de revisarPosicion()
    for (let i = 0; i < lista.length; i++) {
        numeroGenerado = Math.floor(Math.random()*35 + 1);
    
        while (lista.includes(numeroGenerado)) {
            numeroGenerado = Math.floor(Math.random()*35 + 1);
        }
    
        lista[i] = numeroGenerado;
    }
}

function sumaTotal(lista) {  //En esta función simplemente declaro una variable para ir almacenando la suma del recorrido que voy haciendo por la lista en cada item. Luego con el bucle for estoy sumando lo que hay en dicha variable con el item que hay en el índice correspondiente. Todo hasta llegar al límite de la lista.
    let totalSuma = 0;

    for (let i = 0; i < lista.length; i++) {
        totalSuma += lista[i];
    }

    return totalSuma;
}

function promedioNumerosLista(lista) {  //En esta utilizo el resultado de la función sumaTotal() y divido este valor por el total de items (en este caso números), de la lista. El toFixed(2) es para que me muestre únicamente 2 decimales en el restultado.
    return (sumaTotal(lista) / lista.length).toFixed(2);
}

function numerosExtremo(lista) {  //En esta función simplemente declaro 2 variables, la del numeroMayor se inicia en 0 y el numeroMenor en 35 básicamente para evitar problemas. Luego se irán ajustando a sus valores reales cuando se analice la lista. En el bucle for va a ver cada item y a compararlos con el valor de ambas variables. Si se cumple la condición dada, el valor se va a ver reemplazado. Al final se consiguen los valores mayores y menores de la lista respectivamente
    let numeroMayor = 0;
    let numeroMenor = 35;

    for (let i = 0; i < lista.length; i++) {
        if (numeroMayor < lista[i]) {
            numeroMayor = lista[i];
        }
        if (numeroMenor > lista[i]) {
            numeroMenor = lista[i];
        }
    }

    return `El número mayor de la lista es ${numeroMayor} y el número menor es ${numeroMenor}`;
}
4 respuestas

Parte 2 del código:

Si ven maneras de optimizarlo me gustaría que me lo dijeran, aprecio mucho cualquier conocimiento extra que me hagan adquirir :)

function revisarPosicion(lista, numero1, numero2, numero3) { //En esta función hay varias cositas. Primero se evalúa si cualquiera de los 3 números se encuentra en la lista, en caso negativo va a indicar que ninguno de los 3 números se encuentra en la lista, y en caso afirmativo va a declarar 3 variables que indican que los números no están en ninguna posición por defecto, para luego sobreescribirlas indicando en qué posición están en caso de que su número correspondiente sí esté en la lista. Para conseguir esto, se crea ese bucle for para recorrer toda la lista y verificar cada item, luego evaluarlos con los condicionales para reasignarle el valor correspondiente a cada variable que tenga que ser reasignada una vez se encuentre el número (o los números) digitado que esté en la lista. Sé que hay maneras más óptimas de conseguir este resultado (como el uso del método .find()), pero tampoco me quise alejar mucho de lo que hemos visto hasta ahora en clase ya que, en este caso, no era estrictamente necesario otro método diferente como si lo fue con el .some() por ejemplo.
    if ([numero1, numero2, numero3].some(num => lista.includes(num))) {  //Te woa traducir: A grandes rasgos, aquí esta diciendo que si cualquiera de esos números está incluído en la lista, entonces va a ejecutar todo lo de abajo (menos el else, obvio). Ahora bien, explicandolo de buena manera: El .some sirve para evaluar si alguno de los elementos cumple la condición dada, por lo tanto recorre toda la lista evaluando si alguno cumple la condición, luego se tiene que pasar una función tal y como se ve en este caso. Bueno, en esta linea yo estoy creando una lista de los 3 números, luego le aplico el método .some y luego una función anónima, la cual funciona así: el "num" es el parámetro, que en la función siempre representa a cada item de la lista (los 3 numeros). Lo que va a retornar es si dicho item está incluido en la lista; en caso positivo va a devolver un true y en caso de que no, devuelve un false. Luego, el método .some recibe esos valores y si al menos uno es true, entonces se cumple la condición y devuelve un true también, lo cual permite continuar con el if.
        let primerNumero = `No se encontró el número ${numero1} en ninguna posición`;
        let segundoNumero = `No se encontró el número ${numero2} en ninguna posición`;
        let tercerNumero = `No se encontró el número ${numero3} en ninguna posición`;

        for (let i = 0; i < lista.length; i++) {
            if (numero1 == lista[i]) {
                primerNumero = `El número ${numero1} se encuentra en la posición ${i}`;
            } else if (numero2 == lista[i]) {
                segundoNumero = `El número ${numero2} se encuentra en la posición ${i}`;
            } else if (numero3 == lista[i]) {
                tercerNumero = `El número ${numero3} se encuentra en la posición ${i}`;
            }
        }
        return `${primerNumero}\n\n${segundoNumero}\n\n${tercerNumero}`;

    } else {
        return "Ningún número dado se encuentra dentro de la lista";
    }
}

function sumaListas(lista1, lista2) {  //En esta función estaría recibiendo 2 listas como parámetro, creando una nueva lista que contendrá los valores de cada item sumado entre ambas listas, y posteriormente recorriendo cada item de ambas listas, para sumarlos entre sí y agregarlos al item correspondiente de la nueva lista.j
    let listasSumadas = [];
    for (let i = 0; i < lista1.length; i++) {
        listasSumadas[i] = lista1[i] + lista2[i];
    }
    return listasSumadas;
}

function cuadradoLista(lista) {  //Esta función es parecida a la anterior. Creo una nueva lista vacía para rellenarla con los valores solicitados. En este caso es simplemente elevar cada item al cuadrado y almacenar el resultado en el índice correspondiente de la nueva lista.
    let listaAlCuadrado = [];
    for (let i = 0; i < lista.length; i++) {
        listaAlCuadrado[i] = lista[i]**2;
    }
    return listaAlCuadrado;
}

//Este apartado es donde se invocan las funciones en general. Se aprecia mejor desde la consola, así que mejor mirarlo desde ahí
rellenarListas(listaNumeros);
rellenarListas(listaNumeros2);
console.log(listaNumeros);
console.log("La suma total de todos los números en la lista es " + sumaTotal(listaNumeros));
console.log("El promedio de los números en la lista es " + promedioNumerosLista(listaNumeros));
console.log(numerosExtremo(listaNumeros));
console.log(revisarPosicion(listaNumeros, 5, 10, 11));
console.info("\n\nLa suma de las 2 listas generadas es:");
console.log(sumaListas(listaNumeros, listaNumeros2));
console.info("\n\nEl cuadrado de los elementos de la primera lista es:");
console.log(cuadradoLista(listaNumeros));

¡Estimado estudiante!

Aprecio tu participación en el foro. Quiero recordarte que este espacio está pensado principalmente para aclarar dudas y hacer preguntas. No es necesario compartir cada actividad detalladamente.

¡Gracias por tu comprensión y por contribuir a hacer del foro un lugar enfocado en el intercambio útil y constructivo! Si prefieres discutir o compartir comentarios sobre el contenido te invitamos a unirte a nuestra comunidad en Discord.

Saludos.

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios!

Lo entiendo Luis, mi intención no era estorbar en la dinámica del foro sino todo lo contrario. Lo hice porque, primeramente, está el tópico también para brindar sugerencias en el foro, así como quejas o bugs, y no solo preguntas. Por otro lado, personalmente aprovecho mucho los aportes que hacen otros a la comunidad de la que hago parte para adquirirlo en mi aprendizaje, y es por eso que comparto también sugerencias para que otros aprovechen mi aporte como lo hago yo con los demás. Por esa razón hago comentarios explicando cada bloque de código para que sea utilizado en pro del aprendizaje e invito a que si alguien tiene alguna manera de mejorar el código la comparta, porque todos así nos beneficiamos de nuestro conocimiento individual.

Esto tampoco es una excusa en sí misma, sino que también es con el objetivo de dar a conocer mi contexto para que sea quizá aprovechado en pro de organizar el foro hacia el enfoque que le quieren dar; únicamente preguntas y respuestas (sea retirando las otras opciones de tópicos o con un mensaje antes de hacer una publicación que diga explícitamente que solo se pueden publicar preguntas, o lo que vean más conveniente para evitar confusiones que desvíen la dinámica que quieren conseguir con el foro).

Hola que tal para lo del ejercicio de revisar pocision encontre esta solucion tambien no se que tal te paresca puedes probarla igual

function encontrarPocision(objeto){
let frutas = ['pera','tuna','manzana','piña','fresa','limon'];
             //0,1,2,3,4,5,6
 console.log(frutas.indexOf(objeto));

}
encontrarPocision('limon');

Y si el obj a buscar no se encuentra en pocison manda el " -1 " que dicta el ejercicio