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

[Duda] Loop infinito

No tengo claro de que porque se me cuelga el navegador ( prove con todos y es la misma repuesta), alguien me puede sacar de esta duda o es el que el codigo esta diseñado para que sea infinito y no me de repuesta al instante?

2 respuestas

Hola Jonas.

La idea para que no se convierta en infinito, es que tienes que establecer un límite. Ejemplo

var rotar = parseInt(prompt("Cuantas veces deseas imprimir tu nombre")); var contador = 1;

while (contador <= rotar) { document.write("Marco") contador++; }

En este caso tu acumulador o contador, tiene que sumar 1, por cada vuelta. Así sabrá cuando detenerse, si tu acumulador no va sumando las vueltas, quiere decir que tu contador, siempre va a ser inferior a las vueltas (siendo siempre 1 el valor del contador), y se vuelve infinito. Recuerda dentro de la iteración poner "contador++" o "contador = contador + 1". Para que si quieres que se imprima 3 veces tu nombre, el contador en cada vuelta sume 1, así cuando contador de 3 vueltas, al ser igual que las veces que quieres que se imprima en pantalla (rotar), este se detenga. Espero haber resuelto tu duda.

Hola Jonas, la respuesta correcta es la opción B, y el porqué, te lo voy a explicar.

Primero que nada hay que entender mejor el bucle while, que podríamos traducir como mientras, o mientras que, y este bucle ejecutará las instrucciones dentro de este, hasta conseguir la condición que nosotros le hemos dado. (IMPORTANTE, si nosotros no creamos una condición alcanzable, se creará un bucle infinito y el programa se romperá, y nunca terminará de ejecutar las instrucciones que le hemos dado, puede hacer más lento nuestro equipo o cerrar el software.) Entonces nosotros necesitamos una condición para que siga haciendo el bucle de instrucciones.

En el problema, nos indican que debemos encontrar una opción más eficiente, ya que se repiten las mismas instrucciones una y otra vez. El bucle while nos sirve en este caso, ya que solamente debemos llegar hasta 10. cuando el usuario falla el intento de acertar, *se muestran diez advertencias de que ha cometido un error en la pantalla.*** por lo que podemos hacer un ciclo while.

Este código soluciona nuestro problema:

<meta charset="UTF-8">
<script>

    // funciones omitidas saltarLinea, imprimir, sortearNumero

    var numeroPensado = sortearNumero(); 

    var numeroLanzado = parseInt(prompt("Ingrese un número entre 0-10: "));

    if(numeroLanzado  == numeroPensado) { //La condición del if statement, si es que ha acertado el numero

        imprimir("Uau! Vos acertaste, pues yo pensé en el número " + numeroPensado);
    } else { //sino acerto el numero, debemos poner el ciclo while para imprimir 10 veces su error
        var contador = 1; //se crea una variable contadora para apoyarnos en la condicion del while

        while(contador <= 10) { //aqui tenemos la condicion, contador empieza en 1, y debe de llegar a 10 para pararse (evitamos un ciclo infinito)

               imprimir("¡Se acabó, vos erraste!"); //Esta es la instrucción que se mostrará en pantalla
               contador = contador +1; //incrementamos contador + 1, para que vaya subiendo, sino siempre quedaría en 1, y sería un ciclo infinito
               //entonces, contador iniciara en 1, luego llegará a contador = contador+1, y será 2, luego 3,4,5... hasta llegar a 10

               Cuando contador sea igual a 10, la condición se romperá, y dejará de ejecutarse el bucle while, porque ha sido satisfecha la condición 
               //contador <= 10
        }
    }
</script>

Si sigues teniendo más dudas sobre el bucle while, aquí dejaré su sintaxis, referencias y videos sobre este bucle:

*Sintaxis: *

while (condicion) { //Siempre lleva llave de inicio y de cierre
    instrucciones
    instrucciones

}

Referencia de MDN (recomiendo entrar a esta página, tienen mucha información de muchos temas de programación y puedes aclarar tus dudas): En español: https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Statements/while

En inglés (tienen un ejemplo, donde puedes correr el programa, también puedes traducir la página): https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/while

videos:

https://www.youtube.com/watch?v=DTmMjJ-cd00 (es de programacion ATS, es uno de los mejores canales para aprender, el video es con el lenguaje C++, pero explica de una forma clara y sencilla, y es practicamente lo mismo en cualquier lenguaje de programación)

https://www.youtube.com/watch?v=F2Bi_EYGjHo (es en JavaScript, el lenguaje del curso)