510 likes | 812 Views
INFORMATICA I. Estructuras de Repetición en C. 2011/1 - CLASE 12. 1. 2. 3. 1. 4. 5. 6. AGENDA. Sentencia while. Sentencia for. Sentencia do- while. Instrucciones Especiales. Ciclos anidados. Introducción. Introducción. Introducción. Introducción.
E N D
INFORMATICA I Estructuras de Repetición en C 2011/1 - CLASE 12
1 2 3 1 4 5 6 AGENDA Sentencia while Sentencia for Sentencia do-while Instrucciones Especiales Ciclos anidados Introducción Introducción
Introducción Introducción En C existentresestructuras de control repetitivas: Pseudocódigo Lenguaje C Mientras Para Haga-mientras while for do-while
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. (Condición) • Conjunto de instrucciones (asociadas al problema) que se ejecutan dentro del bucle: • Estructuras condicionales. • Instrucciones I/O. • Otros bucles. • Instrucciones de asignación. • Funciones. 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
Introducción Introducción Las estructurasciclicas se terminancuando: La condición de evalución se vuelvefalsa Cuando se ejecuta la instrucciónbreak o return
1 2 3 2 4 5 6 AGENDA Sentencia while Sentencia for Sentencia do-while Instrucciones Especiales Ciclos anidados Introducción Sentencia while
SENTENCIA WHILE Sentencia while Realiza un conjunto de operaciones mientras una condición se esté cumpliendo, o mientras una expresión sea verdadera
SENTENCIA WHILE Sintaxis Pseudocódigo Mientras (condición) haga Instrucciones fin_mientras Lenguaje C while (condición){ Instrucciones; }
SENTENCIA WHILE Sentencia while (Condición) • 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
SENTENCIA WHILE Sentencia while Inicialización contador = 0; Comprobación while (contador < n) { (Condición) <Instrucciones>; ... contador = contador+1; Cuerpo Actualización Fin }
SENTENCIA WHILE Sentencia while EVALUAR Falso Falso CONDICIÓN Verdadero Verdadero EJECUTAR Fin del ciclo Cuerpo del bucle
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); }
1 2 3 3 4 5 6 AGENDA Sentencia while Sentencia for Sentencia do-while Instrucciones Especiales Ciclos anidados Introducción Sentencia for
SENTENCIA FOR Sentencia for Realiza un conjunto de operaciones un determinado número de veces
SENTENCIA FOR Sentencia for Recomendado para:
SENTENCIA WHILE Sintaxis Pseudocódigo para VC desde LI hasta LF con INC <Instrucciones> fin_para Lenguaje C for( VC;condicionBucle; INC o DEC) { instrucciones; }
SENTENCIA FOR Sintaxis 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 Expre3: Modificación vble, como cambia la variable de control for(VC;condicionBucle; INC o DEC) { instrucciones; }
SENTENCIA FOR Sentencia for Comprobación Inicialización Actualización for(i = 1 ; i < n; i++) { (Condición) <Instrucciones>; ... Cuerpo Fin }
SENTENCIA FOR Sintaxis 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 while InicializaciónVC; while(condición) { InstruccionesX; INC; } for for( VC; condición; INC) { instrucciones; }
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 cicloforno 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. inti,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. while(1) { Instrucciones; if (condiciónTerminación) break; } for ( ; ; ) { Instrucciones; if(condiciónTerminación) break; }
1 2 3 4 5 6 4 AGENDA Sentencia while Sentencia for Sentencia do-while Instrucciones Especiales Ciclos anidados Introducción Sentencia do-while
SENTENCIA DO-WHILE Sentencia do-while Bucle condicional que se ejecuta al menos una vez.
SENTENCIA DO-WHILE Sentencia do-while EJECUTAR Cuerpo del bucle EVALUAR CONDICIÓN verdadero verdadero Falso Falso Fin del ciclo
SENTENCIA DO-WHILE Sintaxis do { Instrucciones; } while(expresión);
SENTENCIA DO-WHILE Comparación while, do-while while do-while Cuerpo del bucle verdadero CONDICIÓN Falso CONDICIÓN Falso verdadero Cuerpo del bucle
SENTENCIA DO-WHILE Comparación while, do-while while do-while while(expresión) { InstruccionesX; } do { InstruccionesX; } while(expresión);
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.
1 2 3 4 5 6 5 AGENDA Sentencia while Sentencia for Sentencia do-while Instrucciones Especiales Ciclos anidados Introducción 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.
SENTENCIA WHILE Instrucción break EVALUAR Falso CONDICIÓN Verdadero Verdadero EJECUTAR Fin del ciclo Cuerpo del bucle 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 #include <stdio.h> #define MAX_CONT 10 #define CAR_ESPECIAL 0 intmain(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; } Instrucción continue i=i+1 i=1+1 i=2 … 11<=10 ? 2<=10 ? 1<=10 ? INC VC CONDICIÓN No se ingresó 0 msj conteo=2 Volver al ciclo Se ingresó 0 Fin del ciclo read msj EJECUTA
1 2 3 4 5 6 6 AGENDA Sentencia while Sentencia for Sentencia do-while Instrucciones Especiales Ciclos anidados Introducción Ciclos anidados
CiclosAnidados 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; } }
RESUMEN Diagrama de Flujo Pseudocódigo Lenguaje C Vble1 <- vble Vble2 <- valor Vble3 <- constante . . . vbleN<- expresión Vble1 = vble; Vble2 = valor; Vble3 = constante; . . . vbleN= expresión; Vble1 <- vble Vble2 <- valor Vble3 <- constante . . . VbleN <- expresión NO (falsa) SI (verdadera) CONDICION VBLE_CONTROL if(condicion) { código_secuencia1; } else{ código_secuencia2; } SI (condicion) ENTONCES secuencia 1 | camino 1 SINO Secuencia 2 | camino 2 FIN_SI secuencias 1 secuencias 2 Valor 1 OtrosValores Valor 2 secuencias 1 secuencias 1 . . . Otras secuencias SEGUN(vble_control)HAGA valor 1 secuencias 1 valor 2 secuencias 2 . . . otrosValores otras secuencias FIN_SEGUN switch(vble_control) { case 1: cod_secuencia1; break; case 2: cod_secuencia2; break; . . . default:cod_secuencias; }
RESUMEN Falso Diagrama de Flujo Pseudocódigo Lenguaje C MQ(CONDICIÓ) verdadero Cuerpo del bucle MIENTRAS(condición)HAGA secuencia FIN_MIENTRAS while(condición){ secuencia } PARA VC DESDE LI HASTA LF DE INCHAGA secuencia FIN_PARA for(expre1;expre2;expre3){ secuencia; } Cuerpo del bucle Falso PARA VC=LI, LF,INC verdadero verdadero MQ(CONDICIÓN Cuerpo del bucle Falso HAGA secuencia MIENTRAS QUE(condición) do{ secuencia }while(condición);
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++ • Google