INFORMATICA I
2011/1 - CLASE 12
Estructuras de Repetición en C
AGENDA1 Introducción
2 Sentencia while
3 Sentencia for
1 Introducción
4 Sentencia do-while
5 Instrucciones Especiales
6 Ciclos anidados
Introducción
Introducción
En C existen tres estructuras de control repetitivas:
MientrasParaHaga-mientras
Pseudocódigo
whilefordo-while
Lenguaje C
Ciclos en C
Un ciclo (bucle) es una estructura que permite la repetición de una o mas instrucciones un determinado numero de veces.
http://www.youtube.com/watch?v=aeg0mLp9IB0
Ciclos en C
Expresión lógica que controla la secuencia de repetición. Normalmente, se evalúa antes de la ejecución del cuerpo del bucle.
Conjunto de instrucciones (asociadas al problema) que se ejecutan dentro del bucle:• Estructuras condicionales.• Instrucciones I/O.• Otros bucles.• Instrucciones de asignación.• Funciones.
(Condición)
Cuerpo
Fin
Principios a considerar cuando se usan bucles c
Es importante analizar los requisitos del bucle,
pues se debe determinar su
inicialización, condición y actualización.
¿Qué principios considerar cuando se
diseñan bucles?
Algunas preguntas de utilidad:
• ¿Qué es lo que debe contener el cuerpo del
bucle?• Cuantas veces se itera
el bucle.
Introducción
Introducción
1
•El cuerpo del ciclo.
2
•Las sentencias de inicialización.
3
•Las condiciones para la terminación del bucle.
Introducción
Introducción
Las estructuras ciclicas se terminan cuando:1. La condición de evalución se vuelve falsa2. Cuando se ejecuta la instrucción break o
return
AGENDA1 Introducción
2 Sentencia while
3 Sentencia for
2 Sentencia while
4 Sentencia do-while
5 Instrucciones Especiales
6 Ciclos anidados
SENTENCIA WHILE
Sentencia while
Realiza un conjunto de operaciones mientras una condición se esté cumpliendo, o mientras una expresión sea verdadera
1
•Se evalúa la condición-bucle
2
•Si condición-bucle es verdadera :•Se
ejecuta el cuerpo del bucle
•Vuelve el control al paso 1.
3
•Si condición-bucle es falsa :•Se
termina el ciclo.
*
•Condiciones:•C
uantitativas y Caulitativas
SENTENCIA WHILE
Sintaxis
Mientras (condición) hagaInstrucciones
fin_mientras
while (condición){Instrucciones;
}
Pseudocódigo
Lenguaje C
(Condición)
SENTENCIA WHILE
Sentencia while
Variable de control: Variable que representa la condición del bucle ya que su valor determina si el bucle se repite o no. Esta debe ser:• Inicializada.• Comprobada.• Actualizada.
Cuerpo
Fin
(Condición)
SENTENCIA WHILE
Sentencia while
Cuerpo
Fin
while (contador < n) {
<Instrucciones>; ... contador = contador+1;
}
Inicializacióncontador = 0;
Comprobación
Actualización
Falso
Verdadero
Cuerpo del bucle
SENTENCIA WHILE
Sentencia while
CONDICIÓNEVALUAR
Verdadero
EJECUTAR
Falso
Fin del ciclo
SENTENCIA WHILE
Ejemplo1
Realizar un programa que cuente hasta N
i = 0;while (i <= N) { printf("El valor del conteo es: %d\n", i); i++;}
SENTENCIA WHILE
Ejemplo2
Realizar un programa que pida que se ingresen las notas de los estudiantes, y que cuando halla una nota menor que 3, muestre un mensaje que diga “El estudiante perdió”. El programa únicamente debe finalizar cuando el usuario lo desee.
salir = 0;while (salir!=1) { printf("Ingrese la nota del estudiante:"); scanf("%f",¬a); if (nota < MIN_NOTA){ printf("El estudiante perdio\n"); } printf("Ingrese 0 para continuar, 1 para salir: "); scanf("%d",&salir);}
AGENDA1 Introducción
2 Sentencia while
3 Sentencia for3 Sentencia for
4 Sentencia do-while
5 Instrucciones Especiales
6 Ciclos anidados
SENTENCIA FOR
Sentencia for
Realiza un conjunto de operaciones un determinado número de veces
1
•Se inicializa la variable de control y se evalúa la condición-bucle
2
•Si condición es verdadera :•Se
ejecuta el cuerpo del bucle
•Se incrementa la variable y se evalúa la condición
3
•Si condición-bucle es falsa :•Se
termina el ciclo.
*
•Condiciones:•C
uantitativas
SENTENCIA FOR
Sentencia for
Recomendado para:
1
•Ciclos que son controlados por contador
2
•Ejecutar un conjunto de instrucciones un determinado número de veces
SENTENCIA WHILE
Sintaxis
para VC desde LI hasta LF con INC<Instrucciones>
fin_para
for( VC; condicionBucle; INC o DEC){
instrucciones;}
Pseudocódigo
Lenguaje C
SENTENCIA FOR
Sintaxis
for(VC; condicionBucle; INC o DEC){ instrucciones;}
Expre3: Modificación vble, como cambia la variable de control
Expre1: Se le da el valor inicial a la variable de control del bucle. Se pueden inicializar una o varias variables.
Expre2: Condición, que contiene una expresión lógica, mientras sea verdadera se realiza el bucle
(Condición)
SENTENCIA FOR
Sentencia for
Cuerpo
Fin
for(i = 1 ; i < n; i++) {
<Instrucciones>; ...
}
InicializaciónComprobación
Actualización
SENTENCIA FOR
Sintaxis
La(s) variable de control se puede incrementar o decrementar no solo en valores tipo int, también es posible
realizar tales operaciones usando valores tipo float o double permitiendo el incremento o decremento en
cantidades decimales.
double p; for(p=0.75; p<=5; p+= 0.25) { printf(“p = %lf\n”, p);}
float n; for(n=1; n>= 0; n-=0.1) { printf(“n = %f\n”, n);}
SENTENCIA FOR
Ejemplo1
Realice programa que muestre los N primeros factoriales
fact=1;for (i = 1; i <= N; i++) { fact=fact*i; printf("factorial de %d: %d\n",i,fact); }
for (i = 1,fact=1; i <= N; i++) { fact=fact*i; printf("factorial de %d: %d\n",i,fact); }
SENTENCIA FOR
Ejemplo2
Realice programa que sume los N primeros naturales pares.
suma=0; for (i = 1; i <= N; i++) { if(i%2==0){ suma+=i; } } printf("La suma es: %d\n",suma);
SENTENCIA FOR
Ejemplo3
Realice programa que muestre los 10 primeros impares naturales, en orden descendente.
for (i = MAX_NUM; i >= 0; i--) { if(i%2 != 0){ printf("numero par: %d\n",i); }}
SENTENCIA DO-WHILE
Comparación while, for
for( VC; condición; INC){
instrucciones;}
InicializaciónVC;while (condición){ InstruccionesX; INC;}
whilefor
SENTENCIA WHILE Y FOR
Recomendaciones
While: El uso más frecuente es cuando la repetición no está controlada por contador; la condición precede a cada repetición del bucle.
For: Bucle de conteo, cuando el número de repeticiones se conoce por anticipado y puede ser controlado por un contador; la evaluación de la condición precede a la ejecución del cuerpo del bucle.
SENTENCIA WHILE Y FOR
Recomendaciones
En el ciclo for no es recomendable modificar el valor de cualquiera de las variables de la condición del bucle dentro del cuerpo del bucle, ya que se pueden producir resultados imprevistos.
int i,limite = 11;for (i = 0; i <= limite; i++){
printf ( "%d\n" , i ) ;Iimite++ ;
}
for (i = 0; i <= limite; i++){
print f ("%d\n",i);i--;
}
SENTENCIA WHILE Y FOR
Bucles infinitos
Aplicaciones en los que el número de repeticiones no se pueden determinar por anticipado. Interesa que comiencen pero eventualmente que no terminen.
for ( ; ; ){ Instrucciones; if(condiciónTerminación)
break;}
while(1){ Instrucciones; if (condiciónTerminación)
break;}
AGENDA1 Introducción
2 Sentencia while
3 Sentencia for
4 Sentencia do-while
5 Instrucciones Especiales
6 Ciclos anidados
4 Sentencia do-while
SENTENCIA DO-WHILE
Sentencia do-while
1
•Se ejecuta el cuerpo del bucle.
2
•Se evalúa la condicion. •Si
se cumple la condición, entonces se repite la ejecución de sentencia.
3
•Se evalúa la condicion.•Si
no se cumple la condición la estructura termina y da paso a la continuación del programa
Bucle condicional que se ejecuta al menos una vez.
*
•Condiciones:•Cu
antitativas y Caulitativas
SENTENCIA DO-WHILE
Sentencia do-while
CONDICIÓN
Cuerpo del bucle
Falso
verdadero
EJECUTAR
EVALUAR
verdadero
Falso
Fin del ciclo
SENTENCIA DO-WHILE
Sintaxis
do { Instrucciones;} while (expresión);
SENTENCIA DO-WHILE
Comparación while, do-while
CONDICIÓN
Cuerpo del bucle
Falso
verdadero
CONDICIÓN
Cuerpo del bucle
Falso
verdadero
while do-while
SENTENCIA DO-WHILE
Comparación while, do-while
do { InstruccionesX;} while (expresión);
while (expresión) { InstruccionesX;}
while do-while
SENTENCIA DO-WHILE
Ejemplo
Programa que imprime un mensaje “continua programa” hasta que se le ingrese un carácter de terminación 0. (Realicelo con while, luego con do-while y compare!!)
do{ printf("continuar programa\n"); printf("Ingrese 0 para salir: "); scanf("%d",&salir);}while (salir!=CAR_FIN);
SENTENCIA WHILE Y FOR
Recomendaciones
do -while: El uso más frecuente es cuando la repetición no está controlada por contador; el cuerpo del ciclo precede a la condición.
AGENDA1 Introducción
2 Sentencia while
3 Sentencia for
4 Sentencia do-while
5 Instrucciones Especiales
6 Ciclos anidados
5 Instrucciones Especiales
INTRUCCIONES ESPECIALES
Instrucción break
La sentencia break es utilizada como método de terminación TEMPRANA del bucle a la que pertenece.
Si mientras se ejecuta el cuerpo del bucle, se encuentra con la instrucción break, se terminará inmediatamente el ciclo.
Falso
Verdadero
Cuerpo del bucle
SENTENCIA WHILE
Instrucción break
CONDICIÓNEVALUAR
Verdadero
EJECUTAR
Fin del ciclo
break;
INTRUCCIONES ESPECIALES
Ejemplo
Realizar un programa que pida que se ingresen notas de N estudiantes, y que cuando halla una nota mayo que 3, muestre un mensaje que diga “Hay alguien que ganó”, y termine el programa inmediatamente.
INTRUCCIONES ESPECIALES
Instrucción continue
La sentencia continue hace que la ejecución de un bucle vuelva inmediatamente a la cabecera del bucle.
Programa que muestra conteo hasta 10, se muestra el siguiente valor del conteo solo si se le ha ingresado el número 0
INTRUCCIONES ESPECIALES
Instrucción continue
#include <stdio.h>#define MAX_CONT 10#define CAR_ESPECIAL 0int main(void){ int i, equiv=0; int mostrar; for (i = 1; i <= MAX_CONT; i++) { printf("Ingrese 0 si quiere ver el conteo:"); scanf("%d", &mostrar); if (mostrar!= CAR_ESPECIAL){ continue; } printf("El valor del conteo es: %d\n", i); } return 0;}
VC CONDICIÓN
EJECUTA
msjread
No se ingresó 0Volver al ciclo
INC
Se ingresó 0
msj conteo=2
1<=10 ?
i=i+1i=1+1i=22<=10 ? …11<=10 ?
Fin del ciclo
AGENDA1 Introducción
2 Sentencia while
3 Sentencia for
4 Sentencia do-while
5 Instrucciones Especiales
6 Ciclos anidados6 Ciclos anidados
Ciclos Anidados
Ciclos anidados
Se pueden anidar ciclos repetitivos. Útil para aplicaciones de matrices de mas de una dimensión.
for( i=0; i<LIM1; i++){ for( j=0; j<LIM2; j++)
{Instruciones1;
}}
SI (condicion) ENTONCES secuencia 1 | camino 1SINO Secuencia 2 | camino 2FIN_SI
if (condicion) { código_secuencia1;}else { código_secuencia2;}
SEGUN(vble_control)HAGA valor 1
secuencias 1 valor 2
secuencias 2 . . . otrosValores
otras secuenciasFIN_SEGUN
switch(vble_control) { case 1: cod_secuencia1; break; case 2: cod_secuencia2; break; . . . default: cod_secuencias;}
RESUMEN
VBLE_CONTROL
Valor 1
secuencias 1
secuencias 1
Otras secuencias
Valor 2 OtrosValores
. . .
CONDICION
NO (falsa)
secuencias 1
secuencias 2
SI (verdadera)
Vble1 <- vbleVble2 <- valorVble3 <- constante
. . . VbleN <- expresión
Vble1 <- vble Vble2 <- valor Vble3 <- constante . . .vbleN <- expresión
Vble1 = vble;Vble2 = valor;Vble3 = constante; . . .vbleN = expresión;
Diagrama de Flujo Pseudocódigo Lenguaje C
MIENTRAS(condición)HAGA secuenciaFIN_MIENTRAS
while(condición){ secuencia}
PARA VC DESDE LI HASTA LF DE INC HAGA secuencia FIN_PARA
for(expre1;expre2;expre3){ secuencia;}
RESUMEN
MQ(CONDICIÓN
Cuerpo del bucle
Falso
verdadero
PARA VC=LI, LF,INC
Cuerpo del bucle
Falso
verdadero
MQ(CONDICIÓ)
Cuerpo del bucle
Falso
verdadero
HAGA secuenciaMIENTRAS QUE(condición)
do{ secuencia}while(condición);
Diagrama de Flujo Pseudocódigo Lenguaje C
Bibliografía
• Joyanes Aguilar, Luis. PROGRAMACIÓN EN C. Metodología, algoritmos y estructura de datos Capitulo3.
• H.M. Deitel, P.J. Deitel. Como programar en C y C++
GRACIAS POR SU ATENCIÓN