Está en la página 1de 27

Estructuras de repeticin hacer-mientras y repita hasta

Programacin 1 Ctedra de Programacin Departamento de Computacin Escuela de Ingeniera de Sistemas

Hacer mientras
Diagrama de flujo Pseudocdigo en espaol
Hacer
Acciones S1 Sn

S1 . Sn mientras (<condicin>)

cierto

condicin falso

Cdigo en C++
do { S1 . Sn } while (<condicin>);
Departamento de Computacin. Ctedra de Programacin. Programacin 1.

Marzo 2004

Hacer mientras
La estructura Hacer-Mientras es una sentencia Repita mientras con la diferencia que evala la condicin al final del lazo y no al principio. Las sentencias (una o ms) del cuerpo del lazo se ejecutan mientras que la condicin (expresin lgica) es cierta. Como se pregunta al final por la condicin, el lazo se ejecuta una o ms veces. Si la condicin nunca se hace falsa, el programa entra en un lazo infinito, es decir, las sentencias del cuerpo del lazo se ejecutarn indefinidamente.
Marzo 2004 Departamento de Computacin. Ctedra de Programacin. Programacin 1.

Ejemplo 1
1 2 3 4 {pre: numEst } contEst = 1 Escribir Introduzca el numero total de estudiantes Leer numEst repita mientras (contEst numEst) hacer Escribir Dame las dos notas del estudiante Leer nota1, nota2 mientras(0 nota1 20 0 nota2 20) prom = (nota1 + nota2) / 2 Escribir Promedio del estudiante= , prom contEst = contEst + 1 frm numEst = 1, nota1 = 10.0, nota2 = 11.0 -> contEst = 1, prom = 10.5 numEst = 0 -> contEst = 1 promedioDeNotas {pos: numEst } contEst: Natural. Contador del nmero actual de estudiantes. numEst: Natural. Nmero total de estudiantes introducido por el usuario nota1, nota2: Real. Notas del estudiante para calcular el promedio del mismo. prom: Real. Promedio de las dos notas suministradas por el usuario para el estudiante. Caso exitoso Caso exitoso

1 2

Marzo 2004

Departamento de Computacin. Ctedra de Programacin. Programacin 1.

Hacer mientras
Las variables que intervienen en la condicin pueden INICIARSE antes de la primera ejecucin del lazo o durante sta, ya que la evaluacin de la condicin se hace al final de la estructura. Hay que estar pendiente de MODIFICAR dentro del cuerpo del lazo los valores de las variables que intervienen en la condicin, para garantizar que en algn momento sta se haga falsa y el lazo pueda terminar su ejecucin y as garantizar que el lazo no es infinito.

Marzo 2004

Departamento de Computacin. Ctedra de Programacin. Programacin 1.

Ejemplo 2
Pseudocdigo en Espaol hacer Escribir a es mayor mientras( a b)
conta=0 hacer conta=conta+1 leer nota Escribir conta, nota mientras(conta 15)

Cdigo en C/C++ do { cout << a es mayor\n; } while(a >= b)


conta=0; do { conta++; cin >> nota; cout << conta << nota << endl; } while(nota <= 15)

Nota: Siempre se escribe { } en C/C++.


Marzo 2004 Departamento de Computacin. Ctedra de Programacin. Programacin 1.

Ejemplo 3
Pseudocdigo en Espaol suma=0.0 Leer x hacer suma = suma + x leer x mientras( x > 0.0) Cdigo en C/C++ suma = 0.0; cin >> x; do { suma += x; cin >> x; } while(x > 0.0)

Marzo 2004

Departamento de Computacin. Ctedra de Programacin. Programacin 1.

Ejemplo 4
#include <iostream.h> void main () { int i = 1; do { cout << i << \n; i++; } while ( i <= 3 ); cout << Escribe los nmeros 1, 2 y 3 << endl; }
Marzo 2004 Departamento de Computacin. Ctedra de Programacin. Programacin 1.

Corrida en fro

iteracin (0) (1) (2) (3)

i 1 2 3 4

Ejemplo 5
Imprimir los nmeros del 1 al 10 #include <iostream.h> void main () { int num = 0; do { num ++; cout << num << endl; } while (num < 10); }
Departamento de Computacin. Ctedra de Programacin. Programacin 1.

Marzo 2004

Ejercicio 1
Dados n nmeros enteros que se introducirn por teclado, calcular la suma de los nmeros pares, cuntos nmeros pares fueron introducidos y la media aritmtica de los nmeros impares dados. Anlisis E-P-S
Entrada: n nmeros enteros, n . Proceso: Para

cada nmero se debe

- determinar si es par (nmero mod 2 = 0) - Si es par, se incrementa un contador de pares (CP) y se acumula su valor en el acumulador de pares (AP). - Si es impar, se incrementa un contador de impares (CI) y se acumula su valor en el acumulador de impares (AI).

Calcular la media de impares (MI = AI/CI)


Salida: suma de los nmeros pares (AP Z), total de nmeros pares (CP ) y media aritmtica de los nmeros impares (MI )
Departamento de Computacin. Ctedra de Programacin. Programacin 1.

Marzo 2004

Diseo del ejercicio 1


{pre: n } 1 2 3 4 promedioDeNotas {pos: cp, n , ap , mi } cp, ci, cn: Natural. Contadores del nmero de valores pares, impares y del nmero de valores dados, respectivamente. ap, ai: Entero. Acumulador para la suma de los valores enteros introducidos por el usuario n: Natural. Nmero total de valores dados por el usuario. num: Entero. Valor introducido por el usuario. mi: Real. Promedio de los valores impares. cp = ci = ap = ai = cn = 0 Escribir Introduzca el numero total de valores Leer n Si ( n > 0) entonces hacer Escribir Dame un valor entero Leer num Si (num mod 2 = 0 ) entonces cp = cp + 1 ap = ap + num sino ci = ci + 1 ai = ai + num fsi cn = cn + 1 mientras(cn n) Si ( ci > 0 ) entonces mi = ai / ci Escribir Pares= , cp, Suma =, ap, media de impares=, mi sino Escribir Pares= , cp, Suma =, ap, No hubo impares fsi
Departamento de Computacin. Ctedra de Programacin. Programacin 1.

Marzo 2004

Diseo del ejercicio 1


promedioDeNotas sino Escribir No hay valores fsi 1 2 3 n = 0 -> No hay valores n = 4, num = 3,2,5,7 -> cp = 1, ap = 2, mi = 5.0 n = 5, num = 4,2,8,10,-40 -> cp = 5, ap = -16, No hubo impares Caso exitoso Caso exitoso Caso exitoso

Marzo 2004

Departamento de Computacin. Ctedra de Programacin. Programacin 1.

Implementacin del ejercicio 1


#include <iostream.h> void main () { unsigned int n, cp=0, ci=0, cn=0; int num, ap=0, ai=0; float mi; cout << Introduzca el numero total de valores\n; cin >> n; if(n > 0 ) { do { cout << Dame un valor entero\n; cin >> num; if(num%2 == 0) { cp++; ap +=num; }

Marzo 2004

Departamento de Computacin. Ctedra de Programacin. Programacin 1.

Implementacin del ejercicio 1


else { } cn++; ci++; ai += num; Conversin de tipo (casting)

else }

} while ( cn <= n); if(ci > 0 ) { mi = float(ci) / float(ai); cout << Total de pares= << cp << suma de pares= << ap << media de impares= << mi << endl; else cout << Total de pares= << cp << suma de pares= << ap << No hubo impares\n; cout << No hay valores\n;

Marzo 2004

Departamento de Computacin. Ctedra de Programacin. Programacin 1.

Ejercicio 2
Calcular independientemente la suma de los nmeros pares e impares comprendidos entre 1 y n Anlisis E-P-S
Entrada: Valor de n . Proceso: Para todos los nmeros comprendidos entre 1 y n: Si nmero es par sp = sp + nmero Si nmero es impar si = si + nmero Salida: Suma de los nmeros pares (sp ) y suma de los nmeros impares (si ).
Marzo 2004 Departamento de Computacin. Ctedra de Programacin. Programacin 1.

Diseo del ejercicio 2


{pre: n } 1 sumaParesImpares {pos: n, sp, si } n: Natural. Nmero mximo para calcular la suma de pares e impares. sp, si: Natural. Suma de los nmeros pares e impares, respectivamente.

2 3

4 5 1 2

hacer Escribir Introduzca el valor de n 1 Leer n mientras ( n < 1) num = 0, sp = 0, si = 0 hacer num = num + 1 si (num mod 2 = 0 ) entonces sp = sp + num sino si = si + num fsi mientras( num n ) Escribir Suma de pares entre 1 y , n, es , sp Escribir Suma de impares es , si n = 1 -> n = 1, sp = 0, si = 1 n = 6 -> n = 6, sp = 12, si = 9
Departamento de Computacin. Ctedra de Programacin. Programacin 1.

Caso exitoso Caso exitoso

Marzo 2004

Implementacin del ejercicio 2


#include <iostream.h> void main ( ) { unsigned int n, num = 0, nPar = 0, nImpar = 0; do // validacin del valor de n { cout << Introduzca un valor entero mayor que cero\; cin >> n; } while (n < 1); do { num ++; if (num % 2 ==0) sp += num; else si += num; } while (num < n); cout << Suma de pares entre 1 y << n << es << sp << endl; cout << Suma de impares es << si << endl; }
Marzo 2004 Departamento de Computacin. Ctedra de Programacin. Programacin 1.

Repita hasta
Diagrama de flujo
Acciones S1 Sn

Pseudocdigo en espaol
Repita S1 . Sn Hasta (<condicin>)

Cdigo en C++
falso condicin cierto
Departamento de Computacin. Ctedra de Programacin. Programacin 1.

no existe

Marzo 2004

Repita hasta
La estructura Repita Hasta es una sentencia de repeticion que evala la condicin al final del lazo. Las sentencias (una o ms) del cuerpo del lazo se ejecutan hasta que la condicin (expresin lgica) es cierta. Las sentencias se ejecutan repetidas veces mientras que la condicin es falsa... la repeticin se termina cuando la condicin se hace verdadera. Como se pregunta al final por la condicin, el lazo se ejecuta una o ms veces. Si la condicin nunca se hace cierta, el programa entra en un lazo infinito, es decir, las sentencias del cuerpo del lazo se ejecutarn indefinidamente.
Marzo 2004 Departamento de Computacin. Ctedra de Programacin. Programacin 1.

Repita hasta
Las variables que intervienen en la condicin pueden INICIARSE antes de la primera ejecucin del lazo o durante sta, ya que la evaluacin de la condicin se hace al final de la estructura.
Marzo 2004

Hay que estar pendientes de MODIFICAR dentro del cuerpo del lazo los valores de las variables que intervienen en la condicin, para garantizar que en algn momento sta se haga falsa y el lazo pueda terminar su ejecucin y as garantizar que el lazo no es infinito.

Departamento de Computacin. Ctedra de Programacin. Programacin 1.

Repita hasta
Pseudocdigo en Espaol suma=0.0 Leer x repita suma = suma + x leer x hasta( x 0.0) Cdigo en C/C++
Resaltar la equivalencia con el hacer mientras de C/C++

Marzo 2004

Departamento de Computacin. Ctedra de Programacin. Programacin 1.

C/C++

Diseo 2 del ejercicio 1


1 2 3 4 {pre: n } {pos: cp, n , ap , mi } cp = ci = ap = ai = cn = 0 cp, ci, cn: Natural. Escribir Introduzca el numero total de valores Contadores del Leer n nmero de valores Si ( n > 0) entonces pares, impares y del repita nmero de valores Escribir Dame un valor entero dados, respectivamente. Leer num ap, ai: Entero. Si (num mod 2 = 0 ) entonces Acumulador para la cp = cp + 1 suma de los valores ap = ap + num enteros introducidos sino por el usuario ci = ci + 1 n: Natural. Nmero ai = ai + num total de valores dados fsi por el usuario. cn = cn + 1 num: Entero. Valor hasta(cn n) introducido por el Si ( ci > 0 ) entonces usuario. mi = ai / ci mi: Real. Promedio Escribir Pares= , cp, Suma =, ap, media de impares=, mi de los valores impares. sino Escribir Pares= , cp, Suma =, ap, No hubo impares fsi
Departamento de Computacin. Ctedra de Programacin. Programacin 1.

promedioDeNotas

Marzo 2004

Diseo 2 del ejercicio 1


promedioDeNotas sino Escribir No hay valores fsi 1 2 3 n = 0 -> No hay valores n = 4, num = 3,2,5,7 -> cp = 1, ap = 2, mi = 5.0 n = 5, num = 4,2,8,10,-40 -> cp = 5, ap = -16, No hubo impares Caso exitoso Caso exitoso Caso exitoso

La codificacin en C/C++ debe hacerse con la sentencia hacer-mientras

Marzo 2004

Departamento de Computacin. Ctedra de Programacin. Programacin 1.

Ejercicios propuestos
Para cada uno de los siguientes problemas realizar el anlisis EP-S, algoritmo y codificacin. 1. Calcular la suma 1+2+3+ ... + n, donde n es un valor dado. Validar que n > 1. 2. Para el siguiente par de funciones, encontrar el valor de N tal que f(N) < g(N) y N 0.
f(N) = 20 N2 + 100, g(N) = N3 + 2N + 17

3. Dado el balance de su cuenta bancaria del mes anterior y todas las transacciones (retiro/depsito, monto) realizadas durante el presente mes, calcular el balance actual.
Marzo 2004 Departamento de Computacin. Ctedra de Programacin. Programacin 1.

Ejercicios propuestos
4. El 1 de Enero de 1999, el tanque de agua Tulio Febres Cordero contena 10.000 litros de agua. La zona a la cual suministra agua este tanque us 183 litros de agua semanalmente y el tanque no recibi agua en ningn momento. Calcular la cantidad de agua que qued en el tanque al final de cada semana hasta que no haba en el tanque suficiente agua para suplir la zona. 5. Calcular la suma de los cuadrados de los cien primeros nmeros naturales.
Marzo 2004 Departamento de Computacin. Ctedra de Programacin. Programacin 1.

Ejercicios propuestos
6. Determinar en un conjunto de n nmeros naturales: Cuntos son menores que 15 ? Cuntos son mayores que 50 ? Cuntos estn en el rango entre 25 y 45 ?

Marzo 2004

Departamento de Computacin. Ctedra de Programacin. Programacin 1.

Ejercicios propuestos
7. Determinar qu funcin realiza el siguiente programa:
bool accept; float x; float bajo, alto; do { cout << Introduzca un valor entre ( << bajo << y << alto << ) << endl; cin >> x; if (bajo <= x && x <= alto) accept = cierto; else accept = falso; } while (!accept);

Marzo 2004

Departamento de Computacin. Ctedra de Programacin. Programacin 1.

También podría gustarte