ESTRUCTURA DE REPETICION while

Anuncio
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
Descargar