You are on page 1of 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
S1
Acciones .
S1 Sn Sn
mientras (<condicin>)
cierto
condicin Cdigo en C++
do
{
falso S1
.
Sn
} while (<condicin>);

Departamento de Computacin. Ctedra de Programacin.


Marzo 2004 Programacin 1.
Hacer mientras

z La estructura Hacer-Mientras es una sentencia Repita mientras


con la diferencia que evala la condicin al final del lazo y no al
principio.

z Las sentencias (una o ms) del cuerpo del lazo se ejecutan


mientras que la condicin (expresin lgica) es cierta.

z Como se pregunta al final por la condicin, el lazo se ejecuta una


o ms veces.

z 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.
Departamento de Computacin. Ctedra de Programacin.
Marzo 2004 Programacin 1.
Ejemplo 1
promedioDeNotas
{pre: numEst } {pos: numEst }
1 contEst = 1 zcontEst: Natural.
2 Escribir Introduzca el numero total de estudiantes Contador del nmero actual
3 Leer numEst de estudiantes.
4 repita mientras (contEst numEst) znumEst: Natural. Nmero
hacer total de estudiantes
Escribir Dame las dos notas del estudiante introducido por el usuario
Leer nota1, nota2 znota1, nota2: Real. Notas
mientras(0 nota1 20 0 nota2 20) del estudiante para calcular el
prom = (nota1 + nota2) / 2 promedio del mismo.
Escribir Promedio del estudiante= , prom zprom: Real. Promedio de
contEst = contEst + 1 las dos notas suministradas
frm por el usuario para el
estudiante.
1 numEst = 1, nota1 = 10.0, nota2 = 11.0 -> Caso exitoso
contEst = 1, prom = 10.5
2 numEst = 0 -> contEst = 1 Caso exitoso

Departamento de Computacin. Ctedra de Programacin.


Marzo 2004 Programacin 1.
Hacer mientras

z 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.
z 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.

Departamento de Computacin. Ctedra de Programacin.


Marzo 2004 Programacin 1.
Ejemplo 2
Pseudocdigo en Espaol Cdigo en C/C++
hacer do
Escribir a es mayor { cout << a es mayor\n;
mientras( a b) }
while(a >= b)
conta=0 conta=0;
hacer do
conta=conta+1 { conta++;
leer nota cin >> nota;
Escribir conta, nota cout << conta << nota << endl;
mientras(conta 15) }
while(nota <= 15)

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


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

Pseudocdigo en Espaol Cdigo en C/C++


suma=0.0 suma = 0.0;
Leer x cin >> x;
hacer do
suma = suma + x { suma += x;
leer x cin >> x;
mientras( x > 0.0) }
while(x > 0.0)

Departamento de Computacin. Ctedra de Programacin.


Marzo 2004 Programacin 1.
Ejemplo 4

#include <iostream.h>

void main () Corrida en fro


{ iteracin i
int i = 1; (0) 1
do
{ (1) 2
cout << i << \n;
i++; (2) 3
} while ( i <= 3 );
cout << Escribe los nmeros (3) 4
1, 2 y 3 << endl;
}

Departamento de Computacin. Ctedra de Programacin.


Marzo 2004 Programacin 1.
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.


Marzo 2004 Programacin 1.
Ejercicio 1
z 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.


Marzo 2004 Programacin 1.
Diseo del ejercicio 1
promedioDeNotas
{pre: n } {pos: cp, n , ap , mi }
1 cp = ci = ap = ai = cn = 0 zcp, ci, cn: Natural.
2 Escribir Introduzca el numero total de valores Contadores del
3 Leer n nmero de valores
4 Si ( n > 0) entonces pares, impares y del
hacer nmero de valores
Escribir Dame un valor entero dados, respectivamente.
Leer num zap, 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 zn: Natural. Nmero
ai = ai + num total de valores dados
fsi por el usuario.
cn = cn + 1 znum: Entero. Valor
mientras(cn n) introducido por el
Si ( ci > 0 ) entonces usuario.
mi = ai / ci zmi: 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.
Marzo 2004 Programacin 1.
Diseo del ejercicio 1
promedioDeNotas
sino
Escribir No hay valores
fsi
1 n = 0 -> No hay valores Caso exitoso
2 n = 4, num = 3,2,5,7 -> cp = 1, ap = 2, mi = 5.0 Caso exitoso
3 n = 5, num = 4,2,8,10,-40 -> cp = 5, ap = -16, No hubo impares Caso exitoso

Departamento de Computacin. Ctedra de Programacin.


Marzo 2004 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;
}

Departamento de Computacin. Ctedra de Programacin.


Marzo 2004 Programacin 1.
Implementacin del ejercicio 1
else
{ ci++;
ai += num;
}
Conversin de tipo
cn++;
(casting)
}
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;
else cout << No hay valores\n;
}

Departamento de Computacin. Ctedra de Programacin.


Marzo 2004 Programacin 1.
Ejercicio 2

z 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 ).

Departamento de Computacin. Ctedra de Programacin.


Marzo 2004 Programacin 1.
Diseo del ejercicio 2
sumaParesImpares
{pre: n } {pos: n, sp, si }
1 hacer zn: Natural. Nmero
Escribir Introduzca el valor de n 1 mximo para calcular la
Leer n suma de pares e impares.
mientras ( n < 1) zsp, si: Natural. Suma de
2 num = 0, sp = 0, si = 0 los nmeros pares e
3 hacer impares, respectivamente.
num = num + 1
si (num mod 2 = 0 ) entonces
sp = sp + num
sino
si = si + num
fsi
mientras( num n )
4 Escribir Suma de pares entre 1 y , n, es , sp
5 Escribir Suma de impares es , si
1 n = 1 -> n = 1, sp = 0, si = 1 Caso exitoso
2 n = 6 -> n = 6, sp = 12, si = 9 Caso exitoso

Departamento de Computacin. Ctedra de Programacin.


Marzo 2004 Programacin 1.
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;
}
Departamento de Computacin. Ctedra de Programacin.
Marzo 2004 Programacin 1.
Repita hasta

z Diagrama de flujo Pseudocdigo en espaol


Repita
S1
Acciones .
Sn
S1 Sn Hasta (<condicin>)

Cdigo en C++
falso no existe
condicin

cierto

Departamento de Computacin. Ctedra de Programacin.


Marzo 2004 Programacin 1.
Repita hasta

z La estructura Repita Hasta es una sentencia de repeticion que


evala la condicin al final del lazo.
z Las sentencias (una o ms) del cuerpo del lazo se ejecutan hasta
que la condicin (expresin lgica) es cierta.
z Las sentencias se ejecutan repetidas veces mientras que la condicin
es falsa... la repeticin se termina cuando la condicin se hace
verdadera.
z Como se pregunta al final por la condicin, el lazo se ejecuta una
o ms veces.
z 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.

Departamento de Computacin. Ctedra de Programacin.


Marzo 2004 Programacin 1.
Repita hasta

zLas variables que z Hay que estar pendientes


intervienen en la de MODIFICAR dentro
condicin pueden del cuerpo del lazo los
valores de las variables
INICIARSE antes que intervienen en la
de la primera condicin, para
ejecucin del lazo o garantizar que en algn
durante sta, ya que momento sta se haga
la evaluacin de la falsa y el lazo pueda
condicin se hace al terminar su ejecucin y
final de la as garantizar que el lazo
no es infinito.
estructura.
Departamento de Computacin. Ctedra de Programacin.
Marzo 2004 Programacin 1.
Repita hasta

Pseudocdigo en Espaol Cdigo en C/C++

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

Departamento de Computacin. Ctedra de Programacin. C/C++


Marzo 2004 Programacin 1.
Diseo 2 del ejercicio 1
promedioDeNotas
{pre: n } {pos: cp, n , ap , mi }
1 cp = ci = ap = ai = cn = 0 zcp, ci, cn: Natural.
2 Escribir Introduzca el numero total de valores Contadores del
3 Leer n nmero de valores
4 Si ( n > 0) entonces pares, impares y del
repita nmero de valores
Escribir Dame un valor entero dados, respectivamente.
Leer num zap, 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 zn: Natural. Nmero
ai = ai + num total de valores dados
fsi por el usuario.
cn = cn + 1 znum: Entero. Valor
hasta(cn n) introducido por el
Si ( ci > 0 ) entonces usuario.
mi = ai / ci zmi: 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.
Marzo 2004 Programacin 1.
Diseo 2 del ejercicio 1
promedioDeNotas
sino
Escribir No hay valores
fsi
1 n = 0 -> No hay valores Caso exitoso
2 n = 4, num = 3,2,5,7 -> cp = 1, ap = 2, mi = 5.0 Caso exitoso
3 n = 5, num = 4,2,8,10,-40 -> cp = 5, ap = -16, No hubo impares Caso exitoso

La codificacin en C/C++ debe hacerse


con la sentencia hacer-mientras

Departamento de Computacin. Ctedra de Programacin.


Marzo 2004 Programacin 1.
Ejercicios propuestos

z Para cada uno de los siguientes problemas realizar el anlisis E-


P-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.

Departamento de Computacin. Ctedra de Programacin.


Marzo 2004 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.
Departamento de Computacin. Ctedra de Programacin.
Marzo 2004 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 ?

Departamento de Computacin. Ctedra de Programacin.


Marzo 2004 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);

Departamento de Computacin. Ctedra de Programacin.


Marzo 2004 Programacin 1.

You might also like