ESTRUCTURAS DE CONTROL REPETITIVAS Lenguajes de Programación III Estructuras de repetición.- Las estructuras de control repetitivas son aquellas en las que una sentencia o grupos de sentencias se repiten muchas veces. Este conjunto de sentencias se denomina bucle (loop) Qué es un Bucle?: Un bucle no es más que la repetición de una o varias sentencias mientras se cumpla una condición. Existen diferentes tipos de bucles. Veremos los tres más usados: Bucle WHILE Bucle DO WHILE Bucle FOR LA SENTENCIA WHILE La estructura repetitiva while (mientras) es aquella en la que el número de interacciones no se conoce por anticipado y el cuerpo del bucle se repite mientras se cumple una determinada condición. Por esta razón, a estos bucles se les denomina bucles condicionales. Funcionamiento del while: En primer lugar se verifica la condición, si la misma resulta verdadera se ejecutan las operaciones que indicamos entre las llaves que le siguen al while. En caso que la condición sea Falsa continúa con la instrucción siguiente al bloque de llaves. El bloque se repite MIENTRAS la condición sea Verdadera. Sintaxis: while (condicion) //bloque de código; Donde, condición es cualquier expresión JavaScript válida que se evalúe a un valor booleano. El bloque de código se ejecuta mientras que la condición sea verdadera Ejemplo 1: Realizar un programa que imprima en pantalla los números del 1 al 100. var x; x=1; while (x<=100) document.write(x); document.write('<br>'); x=x+1; 1 Docente: Richard J. Campos Ochoa
Lenguajes de Programación III Ejemplo 2: var contador = 1; while( contador <= 5 ) alert( "Ahora contador tiene valor [" + contador + "]" ); contador = contador + 1; Ejemplo 3: Realiza un programa que permita dividir dos números ingresados pero el segundo número debe ser diferente de cero. var n1 = prompt("dime un número"); var n2 = prompt("dime otro número"); while (n2 == 0) n2 = prompt("no debe ser cero. Dime otro"); document.write(n1 + " dividido entre "+ n2 + " es: "); var resultado = parseint(n1) / parseint(n2); document.write(resultado); Ejemplo 4: Escribir un programa que lea 10 notas de alumnos y nos informe cuántos aprobaron y cuantos desaprobaron. var nota; var x=1; var notasaprob=0; var notasdesap=0; while (x<=10) nota=prompt("escriba las notas de los alumnos: "); nota=parseint(nota); x=x+1; if (nota>=11) notasaprob++; else notasdesap++; document.write("aprobaron: "+notasaprob); document.write("<br>"); document.write("desaprobaron "+notasdesap); document.write("<br>"); 2 Docente: Richard J. Campos Ochoa
LA SENTENCIA DO...WHILE Lenguajes de Programación III El bucle do...while, es una variación del bucle while. Se utiliza generalmente cuando no sabemos cuántas veces se habrá de ejecutar el bucle, igual que el bucle WHILE, con la diferencia de que sabemos seguro que el bucle por lo menos se ejecutará una vez. Sintaxis: do //sentencias del bucle while (condición) El bucle se ejecuta siempre una vez y al final se evalúa la condición para decir si se ejecuta otra vez el bucle o se termina su ejecución. Ejemplo 1: <script> var n1 = prompt("dime un primer número"); var n2; do n2 = prompt("dime el segundo número (no debe ser cero)"); while (n2 == 0); document.write(n1 + " dividido entre "+ n2 + " es: "); var resultado = parseint(n1) / parseint(n2); document.write(resultado); Ejemplo 2: Programa que lee la cantidad de dígitos de un número y se detenga cuando el numero ingresado sea 0 o mayor que 999 var valor; do valor=prompt("ingrese un valor entre 0 y 999:"); valor=parseint(valor); document.write("el valor "+valor+" tiene "); if (valor<10) document.write("tiene 1 digitos"); 3 Docente: Richard J. Campos Ochoa
Lenguajes de Programación III else if (valor<100) document.write("tiene 2 digitos"); else document.write("tiene 3 digitos"); document.write("<br>"); while(valor!=0 && valor<1000); SENTENCIA FOR Sintaxis: for ([expresioninicial]; [condicion]; [expresionincremento/decremento]) <Instrucciones> Esta estructura repetitiva tiene tres argumentos: variable de inicialización, condición y variable de incremento o decremento. Funcionamiento: 1. La expresión de inicialización [expresioninicial], se ejecuta si esta existe. Esta expresión habitualmente inicializa uno o más contadores del bucle, pero la sintaxis permite una expresión con cualquier grado de complejidad. Esta expresión puede también declarar variables. 2. Se evalúa la expresión [condicion. Si el valor de [condición] es true, se ejecuta la sentencia del bucle. Si el valor de [condición] es false, el bucle for finaliza. Si la expresión [condición] es omitida, la condición es asumida como verdadera. 3. Se ejecuta la sentencia. Para ejecutar múltiples sentencias, use un bloque de sentencias (... ) para agruparlas. 4. Se ejecuta la expresión [expresionincremento/decremento], si hay una, y el control vuelve al paso 2. Este tipo de estructura repetitiva se utiliza generalmente cuando sabemos la cantidad de veces que deseamos que se repita el bloque. 4 Docente: Richard J. Campos Ochoa
Lenguajes de Programación III Ejemplo 1: <script> var contador = 1; while (contador <= 10) document.write(contador + " "); contador++; Convertir esto a un "for": <script> var contador; for (contador = 1; contador <= 10; contador++) document.write(contador + " "); Ejemplo 2: Bucle para poner títulos <!DOCTYPE html> <html> <head> <title></title> <meta charset="utf-8"> </head> <body> for (i = 1; i <= 6; i++) document.write("<h" + i + ">Cabecera de nivel " + i) document.write("</h" + i + ">") </body> </html> Cuándo usar cada tipo de condición repetitiva? Casi cualquiera estructura repetitiva se podría usar para casi cualquier caso, pero, por su construcción, cada una resulta ligeramente más cómoda que las demás para un tipo de problema concreto: "FOR" - Cuando sepamos cuantas veces queremos repetir algo, y usaremos un contador para hacerlo (por ejemplo, escribir 5 veces un texto) "DO-WHILE" - Cuando algo se deba repetir al menos una vez (por ejemplo, pedir una contraseña) "WHILE" - Cuano se trate de algo repetitivo, pero que quizá no llegue a ocurrir nunca, como el mostrar datos de una base de datos... que podría estar vacía. 5 Docente: Richard J. Campos Ochoa
EJERCICIOS PROPUESTOS Lenguajes de Programación III 1. Crea una página web que pida un número al usuario y muestre cuáles son sus divisores. 2. Genera al azar un número del 1 al 100 y da al usuario 6 oportunidades para adivinarlo. 3. Pide al usuario dos números y calcula cuanto es el primero elevado al segundo, usando multiplicaciones sucesivas. Por ejemplo. 2 elevado a 3 es lo mismo que 2*2*2, y su resultado es 8 4. Pide al usuario un ancho y un alto y dibuja un rectángulo formado por asteriscos, que tenga ese ancho y ese alto. Por ejemplo, para anchura 4 y altura 3 podría ser: **** **** **** 5. Crear un programa que muestre los números del 15 al 5, descendiendo (pista: en cada pasada habrá que descontar 1, por ejemplo haciendo i--). 6. Crear un programa que muestre los primeros ocho números pares (pista: en cada pasada habrá que aumentar de 2 en 2, o bien mostrar el doble del valor que hace de contador). 6 Docente: Richard J. Campos Ochoa