ESTRUCTURA DE REPETICION while Una estructura de repetición while le permite al programador especificar que se repita una acción, mientras cierta condición se mantenga verdadera. Sintaxis: while (condición) sentencia1; while(condición) { sentencia1; sentenciaN; } La condición puede ser verdadera o falsa. Si es verdadera, entonces la sentencia 1 se ejecutara. Esta sentencia se ejecutara en forma repetida, mientras la condición sea verdadera. El enunciado o enunciados contenidos en la estructura de repeticion while constituyen el cuerpo del ciclo. El cuerpo de la estructura while puede ser un enunciado sencillo o un enunciado compuesto. Eventualmente, la condicion se hara falsa. Llegando a este punto, la repeticion se termina y se ejecutara el enunciado que sigue de inmediato despues de la estructura de repeticion. Error comun: No incluir en el cuerpo de una estructura while, una accion que haga que la condicion existente en while en algun momento se convierta en falsa. Error conocido como ciclo infinito. Como ejemplo de un ciclo while, considere un segmento de programa deseñado para encontrar la primera potencia de 2 seperior a 1000. Suponga la variable entera p inicializada en 2. Cuando la estructura de repeticion while termine de ejecutarse, p contendra la respuesta deseada. p=2; while(p<=1000) p= 2 * p; Cuando se escribe la estructura while, el valor de p es 2. La variable p se multiplica repetidamente por 2, asumiendo los valores 4, 8, 16, 32, 64, 128, 256, 512 y 1024 sucesivamente. Cuando p se convierte en 1024, la condicion p<=1000, se hace falsa. Con ello se termina la repetición y el valor final de p es 1024. La ejecucion del programa continua con el enunciado que sigue despues de while. La instruccion while se puede utilizar controlada por contador o por condicion. Un ejemplo de esta instruccion controlada por contador es la siguiente. El siguiente programa calculara el promedio de 10 calificaciones. #include<stdio.h> void main( ) { int contador=1; float calificacion, total=0, promedio; while(contador<=10) { printf(“Calificacion”); scanf(“%f”,&calificacion); total+=calificacion; contador++; } promedio=total/10; printf(“Promedio = %.1f”,promedio); getch( ); } Este mismo programa controlado por centinela nos permite leer un numero arbitrario de calificaciones cada vez que se ejecute el programa. En el primer ejemplo se sabia con anticipacion el numero de calificaciones que se iban a leer. En este ejemplo el programa debe ser capaz de procesar un numero arbitrario de calificaciones. Para esto se utiliza un centinela o condicion de salida del ciclo. El usuario escribira calificaciones hasta que haya capturado todas las calificaciones deseadas. El valor centinela debera ser seleccionado de tal forma que no se confunda con algun valor de entrada aceptable. Dado que normalmente las calificaciones de un examen son numeros positivos, para este problema, -1 puede ser un valor centinela aceptable. El programa a continuacion calculara e imprimira el promedio de un numero arbitrario de calificaciones mientras la calificacion leida sea diferente a -1 que sera el centinea de salida y no se incluira en el calculo. #include<stdio.h> void main( ) { float promedio, calificacion,total=0; int contador=0; printf(“Calificacion [-1 para terminar]: ”); scanf(“%f”,&calificacion); while(calificacion != -1) { total+=calificacion; contador++; printf(“Calificacion[-1 para terminar]:”); scanf(“%f”,&calificacion); } promedio=total/contador; printf(“El promedio es %.1f”,promedio); getch( ); 1 Marcelo Baño } Realice un programa que impima la siguiente sucesion de numeros utilizando ciclos anidados. 123456789 12345678 1234567 123456 12345 1234 123 12 1 Escriba un programa que pida la siguiente informacion de un numero desconocido de empleados, lo que se sabe es que no pueden ser mas de 20 empleados: nombre, edad, sexo y salario semanal. Al final el programa debera mostrar lo siguiente: Total de empleados, promedio de edades, total de la nomina, total de mujeres y total de hombres. La poblacion en Mexico en 1992 es de 55 millones y tiene una tasa de crecimiento de 7 por ciento. Si Mexico conserva su actual tasa de crecimiento, cual sera el primer año en que la poblacion sea mayor de 100 millones. Se usa el siguiente esquema para calcular la comision mensual por ventas (en dlls) ganadas por un empleado de una empresa de bienes raices: Ventas totales: Comision: Hasta $1000 1% $1000- $2000 1% por los primeros $1000 y 2% por el resto. Mas de $2000 1% por los primeros $1000 2% de los siguientes $1000 y 3% por el resto. Hacer un programa que lea las ventas de 10 empleados, que calcule su comision y que imprima el total de vendedores que recibieron cuando menos $50 dlls de comision. Hacer un programa que eleve un numero X a la potencia Y. La tienda “X” tiene un descuento del 15% en los articulos cuyo precio es mayor a $500 pesos. Hacer un programa para calcular la venta total de un cliente. El programa debe leer el precio de cada articulo a comprar; que le calcule el descuento si lo tiene, y al terminar de leer todos los articulos, sumarle el 6% de impuesto a la venta total. Ademas al fianl del dia, el programa debe imprimir la venta total del dia y el total de clientes. Escribir un programa que calcule e imprima el mas grande, el mas pequeño y la media de N numeros. El valor de N se solicitara al principio del programa. Escribir un programa que encuentre el primer valor N para el cual la sig. Suma excede a 10000 1+2+3+4+….+N Imprimir el numero de terminos utilizados. Si se invierten $500 Dlls al 6% anual, hacer un programa para determinar el primer año en que al finalizar el periodo, el balance sea superior a $1000 dlls. Las potencias de 2 son 2,4,8,16, etc. Escriba un programa que imprima la primera potencia de 2 que pase de 1000. Supongamos que se invierten $100 dlls. Escriba 2 programas en los que el usuario introduzca la tasa de interes anual. a) El primer programa debera ofrecer el balance al finalizar cada año durante un periodo de 10 años. b) El segundo programa debera ofrecer el balance al finalizar cada año y se interrumpira cuando el balance sea mayor a $200 dlls. Juan empieza con un balance de $100,000 dlls que invierte a una tasa anual del 5%. Al finalizar el año, justo despues de sumar los intereses de ese ciclo, Juan hara un retiro por $12,000 dlls. Cual sera el primer año en que al llegar el final del periodo, su balance no permita que haga semejante retiro. ¿Pedro invierte $100 dlls a una tasa del 8% anual. Jorge invierte $150 dlls a una tasa del 5% anual. Despues de cuantos años la cuenta de Pedro rebasara a la de Jorge? Escriba un programa que permita al usuario intentar hasta 4 veces el teclear la capital de California. Si el usuario no teclea la capital en cuatro intentos, su programa debera indicar al usuatio la respuesta correcta. 2 Marcelo Baño La estructura de código dowhile Al igual que la estructura while, el ciclo do-while nos permite repetir la ejecución de su código mientras que la condición sea verdadera. La diferencia entre estos dos ciclos radica en el momento en que la condición se evalúa. En el ciclo while la condición se ejecuta al inicio de la estructura del ciclo, antes de evaluar el código. En el ciclo do-while, la condición se evalúa al final de la estructura del ciclo, después de evaluar el código. Esto ocasiona que el código del ciclo sea evaluado UNA o más veces. Observa la gráfica de enfrente. En la estructura while es posible que el código del ciclo nunca se ejecute (si la condición resulta ser falsa en un inicio), en cambio en la estructura do-while el código del ciclo se ejecuta al menos en UNA ocasión. La estructura del do-while tiene la siguiente forma... do { código del while; } while (condición); Cuando se ejecuta la estructura dowhile, primero se evalúan las instrucciones del código del while, al terminarse ese código, evalúa la expresión de comparación (condición), si el resultado es verdadero (true) entonces regresa a ejecutar las instrucciones del código del while y así sucesivamente... ¿Hasta cuándo? Hasta que la condición resulte falsa. Ejemplo: do { x = x + 1; } while (x < 10); En este ejemplo el código x = x+1 va a ser ejecutado mientras que el valor de x sea menor a 10. El ciclo termina en el momento en que la variable x tome el valor de 10. Observa la gráfica de enfrente. Ejercicios: A partir de las siguientes definiciones escribe el valor final de las variables... a) 3 Marcelo Baño int a; a = 1; do { a = a + 1; } while (a > 10000); el valor final de a es La primera operación inicializa la variable x en 1, seguidamente comienza la estructura repetitiva while y disponemos la siguiente condición ( x <= 100), se lee MIENTRAS la variable x sea menor o igual a 100. Al ejecutarse la condición, retorna VERDADERO, porque el contenido de x (1) es menor o igual a 100. Al ser la condición verdadera se ejecuta el bloque de instrucciones que contiene la estructura while. El bloque de instrucciones contiene dos salidas al documento y una operación. Se imprime el contenido de x y seguidamente se incrementa la variable x en uno. . 100 101 Cuando x vale 101 la condición de la estructura repetitiva retorna falso, en este caso finaliza el diagrama. La variable x recibe el nombre de CONTADOR. Un contador es un tipo especial de variable que se incrementa o decrementa con valores constantes durante la ejecución del programa. El contador x nos indica en cada momento la cantidad de valores impresos en la página. Importante: Podemos observar que el bloque repetitivo puede no ejecutarse si la condición retorna falso la primera vez. La variable x debe estar inicializada con algún valor antes que se ejecute la operación x = x + 1. Probemos algunas modificaciones de este programa y veamos qué cambios se deberían hacer para: 1 - Imprimir los números del 1 al 500. 2 - Imprimir los números del 50 al 100. 3 - Imprimir los números del -50 al 0. 4 - Imprimir los números del 2 al 100 pero de 2 en 2 (2,4,6,8 ....100). La operación x = x + 1 se lee como "en la variable x se guarda el contenido de x más 1". Es decir, si x contiene 1 luego de ejecutarse esta operación se almacenará en x un 2. Al finalizar el bloque de instrucciones que contiene la estructura repetitiva, se verifica nuevamente la condición de la estructura repetitiva y se repite el proceso explicado anteriormente. Mientras la condición retorne verdadero, se ejecuta el bloque de instrucciones; al retornar falso la verificación de la condición, se sale de la estructura repetitiva y continúa el algoritmo, en este caso, finaliza el programa. Lo más difícil es la definición de la condición de la estructura while y qué bloque de instrucciones se va a repetir. Observar que si, por ejemplo, disponemos la condición x >=100 ( si x es mayor o igual a 100) no provoca ningún error sintáctico pero estamos en presencia de un error lógico porque al evaluarse por primera vez la condición retorna falso y no se ejecuta el bloque de instrucciones que queríamos repetir 100 veces. No existe una RECETA para definir una condición de una estructura repetitiva, sino que se logra con una práctica continua, solucionando problemas. Una vez planteado el programa debemos verificar si el mismo es una solución válida al problema (en este caso se deben imprimir los números del 1 al 100 en la página), para ello podemos hacer un seguimiento del flujo del diagrama y los valores que toman las variables a lo largo de la ejecución: x 1 2 3 4 . 4 Marcelo Baño