Estructuras de           Repetición:           Repita Mientras.           Andrés Arcia           Departamento de Computaci...
Programación Estructurada    La programación estructurada es un paradigma que    consiste en la organización de un código ...
Estructuras de Repetición      Estructura de repetición o lazo      Permite que un conjunto de sentencias (bloque) de     ...
Contador    Variable cuyo valor se incrementa o    decrementa en una cantidad constante    cada vez que se produce un dete...
Operaciones sobre un Contador       Inicialización:           contador = valor inicial       Incremento/decremento:       ...
Acumulador    Variable cuyo valor se incrementa o    decrementa en una cantidad variable cada    vez que se produce un det...
Operaciones sobre un Acumulador           Inicialización:           acumulador = valor inicial           Acumulación:     ...
Ejemplo   float iterador = 0, nota = 15.5;   unsigned multiplicador = 1; // valor distinto de cero   signed divisor = 2021...
Centinela           Es el valor asignado a una variable que hace que se           ejecute un bloque de instrucciones. Por ...
Repita Mientras       Diagrama de flujo                Pseudocódigo en español                                         Rep...
Repita Mientras     Las sentencias (una o más) del cuerpo del lazo se     ejecutan mientras la condición (expresión lógica...
Repita Mientras    Hay que estar pendientes de INICIALIZAR las variables    que intervienen en la condición antes de ejecu...
Ejemplo  Pseudocódigo en Español           Código en C  i=0;                              #define MAX 1000  REPITA MIENTRA...
Ejemplo  Pseudocódigo en Español           Código en C  pot = 1                     #define MAXPOT 500  REPITA MIENTRAS (p...
Ejemplo    Pseudocódigo en Español            Código en C    bandera = cierto;                  #define true 1    contador...
EjemploPseudocódigo en Español                             Código en Cseguir = verdadero                                  ...
Ejemplo#include <stdio.h>                              Corrida en Frío                                                Iter...
Ejemplo#include <stdio.h>void main ()                                                  Corrida en Frío{                   ...
Salidas abruptas del while   Algunas veces es conveniente salir de   forma abrupta de una estructura de   repetición. Para...
Ejemplo de breakInt i, j;                                      Observe que:i=0;                                           ...
Regreso abrupto a la condición   Dentro de un lazo de repetición, se pueden   hacer regresos abrutos a la condición que   ...
Ejemplo del continueSupongamos que queremos procesar solamente los números  enteros positivos de un conjunto introducido p...
Ejemplo    Calcular la suma de n números introducidos por teclado.Análisis E-P-SEntradas: total de números (n ∈ Z), número...
EjemploAlgortimo    0. Inicio    1. Escribir (“Introduzca el número de elementos a sumar”)    2. Leer (n)    3. suma = 0  ...
Estructura de Repetición“Repita mientras”: Ejemplo 3Codificación    #include <stdio.h>    void main ()    {         int n,...
Ejemplo. EPS.    Leer una serie de números reales y calcular su media.    La marca de fin de lectura será el –999Análisis ...
Ejemplo. Algoritmo.      0. Inicio      1. contador = 0      2. suma = 0      3. Escribir (“Introduzca el primer número”) ...
Ejemplo. Código.#include <stdio.h>                             if (contador != 0)void main()                              ...
Ejercicios Propuestos     Para cada uno de los siguientes problemas realizar el análisis E-     P-S, algoritmo y codificac...
Ejercicios Propuestos    Escribir todos los enteros positivos menores que 100    omitiendo aquellos divisibles por 7.    E...
Ejercicios Propuestos    n1 personas escogieron el autobús    n2 personas escogieron el metro    n3 personas escogieron el...
Ejercicios Propuestos    Leer valores que representan años e indique si son o no    años bisiestos. El programa seguirá le...
Ejercicios Propuestos    Imprimir la tabla de multiplicar de un número dado. El    funcionamiento del programa se muestra ...
Próxima SlideShare
Cargando en…5
×

Clase9

812 visualizaciones

Publicado el

0 comentarios
0 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Sin descargas
Visualizaciones
Visualizaciones totales
812
En SlideShare
0
De insertados
0
Número de insertados
4
Acciones
Compartido
0
Descargas
13
Comentarios
0
Recomendaciones
0
Insertados 0
No insertados

No hay notas en la diapositiva.

Clase9

  1. 1. Estructuras de Repetición: Repita Mientras. Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes15/05/05 Programación Digital I 1
  2. 2. Programación Estructurada La programación estructurada es un paradigma que consiste en la organización de un código en bloques conformados por estructuras del tipo: Secuencial (asignación, lectura, escritura) Decisión o selección (simple, doble, múltiple) Repetición (Repita mientras, Hacer-Mientras, Repita para)15/05/05 Programación Digital I 2
  3. 3. Estructuras de Repetición Estructura de repetición o lazo Permite que un conjunto de sentencias (bloque) de un programa puedan ser ejecutadas repetidamente según el resultado de una expresión lógica. Tipos de estructuras de repetición Repetición condicional o controlada por un centinela: REPITA-MIENTRAS y HACER- MIENTRAS. Repetición controlada por un contador: REPITA -PARA. Conceptos Básicos Contador15/05/05 Acumulador Programación Digital I 3
  4. 4. Contador Variable cuyo valor se incrementa o decrementa en una cantidad constante cada vez que se produce un determinado suceso o acción. Se debe realizar primeramente una operación de inicialización y posteriormente los correspondientes incrementos o decrementos.15/05/05 Programación Digital I 4
  5. 5. Operaciones sobre un Contador Inicialización: contador = valor inicial Incremento/decremento: contador = contador + valor_constante contador = contador – valor_constante Ejemplo // inicialización int i=0, j=1000; i++; // incremento j--; //decremento i+=15; // incremento j-=10; //decremento ¿Cuántas iteraciones hacen falta para que j llegue a 0 (cero)?15/05/05 Programación Digital I 5
  6. 6. Acumulador Variable cuyo valor se incrementa o decrementa en una cantidad variable cada vez que se produce un determinado suceso o acción. Se debe realizar primeramente una operación de inicialización y posteriormente los correspondientes incrementos o decrementos.15/05/05 Programación Digital I 6
  7. 7. Operaciones sobre un Acumulador Inicialización: acumulador = valor inicial Acumulación: acumulador = acumulador + valor acumulador = acumulador * valor acumulador = acumulador - valor acumulador = acumulador / valor15/05/05 Programación Digital I 7
  8. 8. Ejemplo float iterador = 0, nota = 15.5; unsigned multiplicador = 1; // valor distinto de cero signed divisor = 2021; - Acumular (Incrementos) iterador = iterador + nota; multiplicador = multiplicador * nota; multiplicador *= nota; - Acumular (Decrementos) iterador = iterador – nota; multiplicador /= nota;15/05/05 Programación Digital I 8
  9. 9. Centinela Es el valor asignado a una variable que hace que se ejecute un bloque de instrucciones. Por lo general existen dos puntos críticos dentro del algoritmo, cuando se pregunta por el valor centinela y cuando se cambia de valor. Ejemplo char bandera = 1; inicio: … // cuerpo del programa; … // punto de cambio; bandera = 0; if (bandera) goto inicio;15/05/05 Programación Digital I 9
  10. 10. Repita Mientras Diagrama de flujo Pseudocódigo en español Repita mientras (condición) S1 … Sn Fin_RM Código en C while (condición) { S1 … Sn }15/05/05 Programación Digital I 10
  11. 11. Repita Mientras Las sentencias (una o más) del cuerpo del lazo se ejecutan mientras la condición (expresión lógica) es cierta. Cuando la condición es falsa, termina la ejecución del lazo. Se pregunta al principio por la condición, por tanto el lazo se ejecuta cero (si la primera vez la condición es falsa) o mas veces. Si la condición nunca se hace falsa, el programa entra en un “lazo infinito”, es decir, las sentencias del cuerpo del lazo se ejecutarán indefinidamente.15/05/05 Programación Digital I 11
  12. 12. Repita Mientras Hay que estar pendientes de INICIALIZAR las variables que intervienen en la condición antes de ejecutar el lazo por primera vez, ya que lo primero que hace la estructura es evaluar la condición. Hay que estar pendientes de MODIFICAR dentro del cuerpo del lazo los valores de las variables que intervienen en la condición, para garantizar que en algún momento ésta se haga falsa y el lazo pueda terminar su ejecución y así tratar que el lazo no sea infinito.15/05/05 Programación Digital I 12
  13. 13. Ejemplo Pseudocódigo en Español Código en C i=0; #define MAX 1000 REPITA MIENTRAS (i<MAX) int i=0; i=i+1; while (i < MAX) Escribir (i) { Fin_RM. i++; printf(“%i”,i); } NOTA: recuerde usar las llaves {} cuando haya más de una instrucción.15/05/05 Programación Digital I 13
  14. 14. Ejemplo Pseudocódigo en Español Código en C pot = 1 #define MAXPOT 500 REPITA MIENTRAS (pot < 500) pot = pot * 2; int pot=1; Fin_RM while (pot < MAXPOT) pot *=2; Escribir(“potencia =“,pot) printf(“potencia: %i“,pot); NOTA: recuerde que puede omitir las llaves {} cuando hay solo una instrucción.15/05/05 Programación Digital I 14
  15. 15. Ejemplo Pseudocódigo en Español Código en C bandera = cierto; #define true 1 contador = 1; char bandera=true; REPITA MIENTRAS (bandera = int contador=1; cierto) Escribir(contador) while (bandera) contador = contador + 1 { Si (contador = 10) printf(“%i”,contador); bandera = falso; contador++; Fin_si if (contador == 10) Fin_RM bandera = !bandera; }15/05/05 Programación Digital I 15
  16. 16. EjemploPseudocódigo en Español Código en Cseguir = verdadero char seguir = TRUE;respuesta = ‘s’ char respuesta = ‘s’;REPITA MIENTRAS (seguir=verdadero) while (seguir) Escribir (“¿Seguir repitiendo?”) { Leer (respuesta) printf(“¿Seguir Si respuesta = ‘n’ repitiendo?”); seguir = falso scanf(“%c”,&respuesta); Fin_Si if (respuesta == ‘n’)Fin_RM seguir = false; }seguir = verdadero char seguir = 1;REPITA MIENTRAS (seguir = verdadero) int contador = 0; contador = contador + 1 while(seguir)Fin_RM contador+=1;15/05/05 Programación Digital I 16
  17. 17. Ejemplo#include <stdio.h> Corrida en Frío Iteración i sumavoid main(){ (0) 0 0 int i = 0,suma = 0; (1) 1 0 while(i<5) { (2) 2 1 suma += i; i++; (3) 3 3 printf(“%i”,suma); } (4) 4 6} (5) 5 1015/05/05 Programación Digital I 17
  18. 18. Ejemplo#include <stdio.h>void main () Corrida en Frío{ Iteración i int i = 1; (0) 1 while ( i < 3 ) { (1) 2 printf(”i es menor que 3n”); i++; (2) 3 } printf(”Se termino el lazon”);}15/05/05 Programación Digital I 18
  19. 19. Salidas abruptas del while Algunas veces es conveniente salir de forma abrupta de una estructura de repetición. Para esto se utiliza la sentencia break. Según break, el lazo de repetición más interno se cancelará.15/05/05 Programación Digital I 19
  20. 20. Ejemplo de breakInt i, j; Observe que:i=0; ➢ Hay un par de while anidadosj=0; ➢ El break esta dado por unawhile (i>-1) condición y se encuentra en el{ while más interno. ➢ La condición que imperará en el j++; while (j<20) lazo interno será la del if. { printf(“Valor de j %i”,j); if (j>=15) break; // pueden haber mas instr. }}15/05/05 Programación Digital I 20
  21. 21. Regreso abrupto a la condición Dentro de un lazo de repetición, se pueden hacer regresos abrutos a la condición que gobierna al lazo. El constructo en C para tal proposito es el “continue”.15/05/05 Programación Digital I 21
  22. 22. Ejemplo del continueSupongamos que queremos procesar solamente los números enteros positivos de un conjunto introducido por teclado:i=0;while (i<10){ prinf(“Introduzca un número: “); scanf(“%i”,&n); if (n < 0) continue; else { i++; printf(“Procesable”); }}15/05/05 Programación Digital I 22
  23. 23. Ejemplo Calcular la suma de n números introducidos por teclado.Análisis E-P-SEntradas: total de números (n ∈ Z), números (a1, a2, a3, …, an ∈ Z) Proceso: Calcular suma = a1 + a2 + a3 + … + anSalidas: suma ∈ Z15/05/05 Programación Digital I 23
  24. 24. EjemploAlgortimo 0. Inicio 1. Escribir (“Introduzca el número de elementos a sumar”) 2. Leer (n) 3. suma = 0 4. contador = 0 5. Repita mientras (contador < n) contador = contador + 1 Escribir (“Introduzca un numero”) Leer (num) suma = suma + num fin_RM 6. Escribir (suma) 7. Fin15/05/05 Programación Digital I 24
  25. 25. Estructura de Repetición“Repita mientras”: Ejemplo 3Codificación #include <stdio.h> void main () { int n, num, suma = 0, contador = 0; printf(“Introduzca el número de elementos a sumar”); scanf(“%i”,n); while (contador < n) { contador++; printf(“Introduzca un numero”); scanf(“%i”,&num); suma += num; } printf(“Suma = %in“, suma); }15/05/05 Programación Digital I 25
  26. 26. Ejemplo. EPS. Leer una serie de números reales y calcular su media. La marca de fin de lectura será el –999Análisis E-P-S Entradas: num1, num2, num3, …, numn -999 Proceso: - Acumular la suma e incrementar contador de números mientras número leído sea diferente de -999 suma = num1 + num2 + num3 + … + numn contador = contador + 1 - Calcular media = suma / contador Salidas: media15/05/05 Programación Digital I 26
  27. 27. Ejemplo. Algoritmo. 0. Inicio 1. contador = 0 2. suma = 0 3. Escribir (“Introduzca el primer número”) 4. Leer (num) 5. Repita mientras (num != -999) contador = contador + 1 suma = suma + num Escribir (“Introduzca un número”) Leer (num) Fin_RM 6. Si (contador != 0) entonces media = suma/contador Escribir (“La media es =”, media) sino Escribir (“El usuario no introdujo numeros”) Fin_Si 7. Fin15/05/05 Programación Digital I 27
  28. 28. Ejemplo. Código.#include <stdio.h> if (contador != 0)void main() {{ media = suma/contador; float contador = 0.0, printf(“La media es = %i”, suma = 0.0, media; media); printf(“Introduzca el primer } numero”; else scanf(“%i”,&num); printf(“El usuario no while (num != -999.0) introdujo numeros”); { } contador = contador + 1.0; suma = suma + num; printf(“Introduzca un número”; scanf(“%i”,&num); }15/05/05 Programación Digital I 28
  29. 29. Ejercicios Propuestos Para cada uno de los siguientes problemas realizar el análisis E- P-S, algoritmo y codificación. Hallar el resultado de la siguiente sucesión: S = 1 + 1/2 + 1/3 + 1/4 … + 1/n hasta que 1/N converja hacia e/100 (o sea igual o menor que un número e cualquiera dividido entre 100). Calcular la sumatoria de los 100 primeros números naturales. Calcular independientemente la suma de los números pares e impares comprendidos entre 1 y n.15/05/05 Programación Digital I 29
  30. 30. Ejercicios Propuestos Escribir todos los enteros positivos menores que 100 omitiendo aquellos divisibles por 7. Encuentre el número de puntos con coordenadas enteras que están dentro de la elipse 2x2 + 3y2 = 100 En Caracas se hizo una encuesta de los medios de transporte urbano mas comunes. A cada persona se le preguntó si el autobús, el metro o el carro era el medio mas usado para ir al trabajo. Se permitió mas de una respuesta. El resultado de la encuesta fue el siguiente:15/05/05 Programación Digital I 30
  31. 31. Ejercicios Propuestos n1 personas escogieron el autobús n2 personas escogieron el metro n3 personas escogieron el carro n4 personas escogieron el autobús y el metro n5 personas escogieron el autobús y el carro n6 personas escogieron el metro y el carro n7 personas escogieron los tres medios de transporte¿ Cuántas personas respondieron la encuesta ?¿ Cuántas personas escogieron sólo un medio de transporte ?¿ Cuántas personas escogieron dos medios de transporte ?¿ Cuántas personas escogieron los tres medios de transporte ?15/05/05 Programación Digital I 31
  32. 32. Ejercicios Propuestos Leer valores que representan años e indique si son o no años bisiestos. El programa seguirá leyendo años hasta un máximo de 10 o hasta que haya leido 3 años bisiestos. Recuerde, una vez más, la regla: "Un año es bisiesto si es divisible por 400, o bien si es divisible por 4 pero no por 100" Por ejemplo, el año 2000 es bisiesto (es divisible por 400), el año 1992 es bisiesto (es divisible por 4 y no por 100), y el año 2100 no es bisiesto (es divisible por 4 y también por 100).15/05/05 Programación Digital I 32
  33. 33. Ejercicios Propuestos Imprimir la tabla de multiplicar de un número dado. El funcionamiento del programa se muestra en el siguiente ejemplo de ejecución. Introduzca un número: 5 La tabla de multiplicar del 5 es: 5x1=5 5 x 2 =10 ... 5 x 10 =5015/05/05 Programación Digital I 33

×