Sunteți pe pagina 1din 9

Estructuras Repetitivas

Las estructuras repetitivas (llamadas tambin bucles) se utilizan para realizar varias veces el mismo conjunto
de operaciones. Dentro de ellas encontramos aquellas donde la cantidad repeticiones se manejan por un n-
mero, las que se realizan hasta que se cumple cierta condicin.

Son tres: la sentencia for y la sentencia while y la sentencia repeat

Bucle For

Es un bucle controlado por un contador, denominado variable de control o ndice.

Pseudocdigo en espaol Cdigo se programa


desde variable (v) = vi hasta vf hacer for variable (v) = vi to vf do begin
< accin S1> < accin S1>
<accin S2 > < accin S2>
....................... ......................
fin desde end
Su estructura tiene la siguiente forma
desde v = vi hasta vf
< accin S1>
<accin S2 >
......................

Ejemplos:
a) Hacer un programa que imprima los nmeros de 5 hasta 28.
Pseudocdigo del programa

nombre repeticin1(program);
declaraciones (uses)
Crt, Dos;
constantes(const)
A = 5;
B = 28;
variables (var)
R (resultado de la oper.): entero
funciones(function)(NO hay);
procedimientos (procedure);
inicio (begin);
limpieza(limpia la pantalla);
ciclo (hace ciclo e imprime);
salida
fin(end.)

Pgina 1 de 9
Pseudocdigo del ciclo
procedimiento ciclo
inicio (begin);
desde R= A hasta B hacer
imprimo R
fin(end;)
El cdigo del procedimiento es:

procedure ciclo; {* comienzo el ciclo *}


begin
for R := A to B do {* se define el ciclo A *}
writeln ('Numero ',R ); {* imprime salida *}

end; {* fin del ciclo *}

Quedndonos el programa de la siguiente manera.

Program Repeticion_1;
{* Este es el primer programa con estructuras de repeticion *}
uses
crt, dos; {declaraciones}

const {* constantes *}
A = 5;
B = 28;

var
R: integer; {* controla el ciclo *}

procedure limpieza; {* comienzo de limpieza de la pantalla *}


begin
ClrScr;
end; {* fin de limpieza de la pantalla *}

procedure ciclo; {* comienzo el ciclo *}


begin
for R := A to B do {* se define el ciclo A *}
writeln ('Numero ',R ); {* imprime salida *}
end; {* fin del ciclo *}

procedure salida; {* comienzo del procedimiento salida *}


{*solo sirve para ver los resultados *}
Var H :char;
begin
writeln ( 'Preione cualquier tecla ');
readln (H); {* esta instruccin y la anterior son para dar tiempo para *}
{* ver resultados *}
end; {* fin del procedimiento salida *}
begin
limpieza;
ciclo;
salida;
end.
b) Hacer un programa que calcule e imprima el factorial de los nmeros 1 a 7

Pgina 2 de 9
Pseudocdigo del programa
nombre repeticin2(program);
declaraciones (uses)
Crt, Dos;
constantes(const)
A = 1;
B = 7;
variables (var)
R, Fac (resultado de la oper.): entero
procedimientos (procedure);
inicio (begin);
limpieza(limpia la pantalla);
ciclo2 (hace ciclo e imprime);
salida
fin(end.)
algoritmo ciclo
Pseudocdigo del ciclo
procedimiento ciclo
inicio (begin);
desde R= A hasta B hacer
Fac Fac * R
imprimo Fac
fin_desde
fin(end;)

Como se puede ver dentro del ciclo se hace dos procesos, el clculo del factorial y la impresin del resultados
quedndonos este algoritmo estructurado.
El cdigo del procedimiento es:
procedure ciclo; {* comienzo el ciclo *}
begin
Fac := 1;
for R := A to B do {* se define el ciclo A *}
begin
Fac := Fac * R; {* Calcula factorial *}
writeln ('Numero : ',R, ' Factorial : ',Fac );
{* imprime salida numero y factorial *}
end
end; {* fin del ciclo *}

Se necesit colocar un begin y un end para definir comienzo y fin del ciclo, ya que el mismo tiene ms de
una instruccin. Fac se define igual a uno, porque sino el producto nos daria siempre 0 (cero).

Quedndonos el programa de la siguiente manera.

Program Repeticion_2;
{* Este es el segundo ejemplo de For *}
uses
crt, dos; {declaraciones}
const {* constantesr *}
A = 1;
B = 7;
var
R, Fac : integer; {* controla el ciclo *}

procedure limpieza; {* comienzo de limpieza de la pantalla *}


begin
Pgina 3 de 9
ClrScr;
end; {* fin de limpieza de la pantalla *}

Procedure ciclo; {* comienzo el ciclo *}


begin
Fac := 1;
for R := A to B do {* se define el ciclo A *}
begin
Fac := Fac * R; {* Calcula factorial *}
writeln ('Numero : ',R, ' Factorial : ',Fac );
{* imprime salida numero y factorial *}
end
end; {* fin del ciclo *}

procedure salida; {* comienzo del procedimiento salida *}


{* solo sirve para ver resultados *}
Var H :char;
begin
writeln ( 'Preione cualquir tecla ');
readln (H); {* esta instruccin y la anterior son para dar tiempo para *}
{* ver resultados *}
end; {* fin del procedimiento salida *}

begin
limpieza;
ciclo;
salida;
end.

Los ciclos cumplen con las mismas reglas que las opciones tiene ms de una instruccin el ciclo deber
llevar un begin con su correspondiente end cuando se tenga ms de una instruccin..
Si fuera B > A el for seria
for K = A donwto B do

Bucles controlados por una bandera (While - Repeat)


Estos bucles no se repiten una cantidad definida de veces, sino se realizan hasta que
se cumple una cierta condicin. La diferencia entre ambos bucles (While y Repeat) es cuando se realiza la
pregunta de la condicin.
While : en este ciclo la pregunta de condicin se hace cada vez antes de comenzar el ciclo.

Ejemplo :
Se pide un programa donde ingresan una serie de nmeros, el ltimo es un valor negativo. Se
pide calcular el promedio de los valores positivos (no incluir el ltimo valor), e imprimir los valores y su pro-
medio.

En este caso tenemos que pautar si el ltimo valor lo imprimimos o no. (si optamos por imprimirlo), esto
implicar el siguiente pseudocdigo.
Pseudocdigo del ciclo
procedimiento ciclo
inicio (begin);
N0
S0
leo A
imprimo A
mientras A >= 0 hacer

Pgina 4 de 9
comenzar
SS+A
NN+1
leo A
imprimo A
terminar
fin(end;)
Como se puede ver dentro del ciclo se hace dos procesos, el clculo del factorial y la impresin del resultados
quedndonos este algoritmo estructurado.

El cdigo del procedimiento es:

procedure ciclo; {* comienzo de ciclo *}


begin
S := 0;
N := 0;
write ( 'Ingrese un valor ');
read (A); {* esta instruccin y la anterior son el ingreso de datos *}
writeln ( 'El valor es : ',A ); {* esta instruccin imprime el valor *}
WHILE A >= 0 DO {* se define el ciclo *}
begin {* comienzo de While *}
S := S + A; {* Calcula la suma de valores *}
N := N + 1; {* Calcula la cantidad de valores *}
writeln ; {* Salta una linea *}
write ( 'Ingrese un valor ');
read (A); {* esta instruccion y la anterior son el ingreso de datos *}
writeln ( 'El valor es : ',A ); {* esta instruccin imprime el valor *}
end {* fin de While *}
end; {* fin de ciclo *}

Quedndonos el programa de la siguiente manera.

Program Repeticion_3; {* Este es el ejemplo de While *}

uses
crt, dos; {declaraciones}

{const} {* constantes no hay*}


var
A, N, S : integer; {* controla el ciclo *}
Prom :real;
procedure limpieza; {* comienzo de limpieza de la pantalla *}
begin
ClrScr;
end; {* fin de limpieza de la pantalla *}
procedure ciclo; {* comienzo de ciclo *}
begin
S := 0;
N := 0;
write ( 'Ingrese un valor ');
read (A); {* esta instruccin y la anterior son el ingreso de datos *}
writeln ( 'El valor es : ',A ); {* esta instruccin imprime el valor *}
WHILE A >= 0 DO {* se define el ciclo *}
begin {* comienzo de While *}
S := S + A; {* Calcula la suma de valores *}
N := N + 1; {* Calcula la cantidad de valores *}
writeln ; {* Salta una linea *}
Pgina 5 de 9
write ( 'Ingrese un valor, negativo para parar ');
read (A); {* esta instruccin y la anterior son el ingreso de datos *}
writeln ( 'El valor es : ',A ); {* esta instruccin imprime el valor *}
end {* fin de While *}
end; {* fin de ciclo *}

procedure promedia; {* comienzo de promedia *}


begin
Prom := S / N; {* Calcula el promedio *}
writeln ; {* Salta una linea *}
writeln ; {* Salta una linea *}
writeln ( 'Promedio es = ', Prom:5:2 ); {* Imprime el promedio *}
end; {* fin de promedia *}
procedure salida; {* comienzo del procedimiento salida *}
{* solo sirve para ver resultados *}
Var H :char;
begin
writeln ( 'Preione cualquir tecla ');
readln (H); {* esta instruccin y la anterior son para dar tiempo para *}
{* ver resultados *}
end; {* fin del procedimiento salida *}

begin
limpieza;
ciclo;
promedia;
salida;
end.

En el procedimiento promedia en la escritura del promedio, aparece


writeln ( 'Promedio es = ', Prom:5:2 ); {* Imprime el promedio *}
donde Prom:5:2 significa que la variable Prom ser escrita en un formato de 5 caracteres, de los cuales 2
corresponden a los decimales, se necesita un carcter para el punto decimal.

Repeat : Cuando el ciclo debe incluir el ltimo valor ingresado ya que la pregunta se hace al final del ciclo.
Ejemplo :
Se ingresan una serie de nmeros distintos, el ltimo es el valor 12. Se pide un programa que
calcule el promedio de los valores (incluir el ltimo valor), e imprimir los valores y su promedio.

Pseudocdigo del ciclo


procedimiento ciclo
inicio (begin);
N0
S0
repetir
leo A
imprimo A
SS+A
NN+1
hasta_que A = 12
fin(end;)

El cdigo del procedimiento es:


procedure ciclo; {* comienzo el ciclo *}
begin
S := 0;
Pgina 6 de 9
N := 0;
repeat {* comienza ciclo *}
write ( 'Ingrese un valor ');
read (A); {* esta instruccin y la anterior son el ingreso de datos *}
writeln ( 'El valor es : ',A ); {* esta instruccin imprime el valor *}
writeln ; {* Salta una linea *}
S := S + A; {* Calcula la suma de valores *}
N := N + 1; {* Calcula la cantidad de valores *}
until A = 12; {* definicion al final del ciclo *}
end; {* fin del ciclo *}

Quedndonos el programa de la siguiente manera.


Program Repeticion_4;
{* Este es el ejemplo de Repeat - Until *}

uses
crt, dos; {declaraciones}
var
A, N, S : integer; {* controla el ciclo *}
Prom :real;

procedure limpieza; {* comienzo de limpieza de la pantalla *}


begin
ClrScr;
end; {* fin de limpieza de la pantalla *}

procedure ciclo; {* comienzo el ciclo *}


begin
S := 0;
N := 0;
repeat {* comienza ciclo *}
write ( 'Ingrese un valor, 12 para parar ');
read (A); {* esta instruccin y la anterior son el ingreso de datos *}
writeln ( 'El valor es : ',A ); {* esta instruccin imprime el valor *}
writeln ; {* Salta una linea *}
S := S + A; {* Calcula la suma de valores *}
N := N + 1; {* Calcula la cantidad de valores *}
until A = 12; {* definicion al final del ciclo *}
end; {* fin del ciclo *}

procedure promedia; {* comienzo de promedia *}


begin
Prom := S / N; {* Calcula el promedio *}
writeln ; {* Salta una linea *}
writeln ; {* Salta una linea *}
writeln ( 'Promedio es = ', Prom:5:2 ); {* Imprime el promedio *}
end; {* fin de promedia *}

procedure salida; {* comienzo del procedimiento salida *}


Var H :char;
begin
writeln ( 'Preione cualquir tecla ');
readln (H); {* esta instruccin y la anterior son para dar tiempo para *
end; {* fin del procedimiento salida *}

begin
limpieza;
ciclo;
Pgina 7 de 9
promedia;
salida;
end.
La estructura repeat carece de begin y end, ya que los dos extremos estn definidos por el propio ciclo.

Pgina 8 de 9
Problemas sobre Estructuras Repetitivas
1. Leer una lista de 10 valores enteros. Calcular e informar:
a) La suma de los valores positivos.
b) El producto de los valores negativos.
(Ignorar los valores nulos)
2. a) Ingresar 5 juegos de cuatro valores cada uno. Calcular y emitir. El promedio de cada juego.
b) Ingresar N juegos de cuatro valores cada uno. Calcular y emitir. El promedio de cada juego. El proceso
finaliza al encontrarse un juego cuyo primer valor es 0.
3. Ingresar dos nmeros enteros positivos y calcular el producto de los mismos por sumas sucesivas.
4. Leer una lista de nmeros positivos que finaliza en 0 y emitir el valor mnimo de la lista.
5. Leer una lista de nmeros enteros que finaliza en 0 y emitir el valor mximo de la lista.
6. dem 5, emitiendo adems la ubicacin del mximo dentro de la lista. (Suponer un nico mximo).
7. Leer 4 juegos de N valores enteros cada uno, donde N se informa al comienzo de cada juego, y emitir el
valor mximo de cada grupo. (Suponer un nico mximo ).
8. Dada una lista de valores numricos positivos, finalizada en 0, indicar si esta ordenada en forma ascen-
dente.
9. Una empresa nos informa para cada uno de sus 20 vendedores:
cdigo de vendedor : 3 dgitos
importe de ventas del mes : real
Se desea emitir el importe mximo de ventas del mes y cuntos vendedores alcanzaron dicho importe.
10.En una Central Telefnica se procesan los llamados realizados en la siguiente forma:
Por cada llamada se ingresa:
cdigo de llamada : 3 dgitos (0 al finalizar el proceso)
tipo de da : 1 hbil, 2 feriado
duracin de la llamada : entero > 0.
Siendo los importes Primeros 3 Minuto Adicional
Das hbiles a 10 a 2
Feriados a 15 a 3
Se deber emitir:
a) El importe a abonar por cada llamada (cdigo - importe).
b) La cantidad de llamadas que superen los 3
c) El % de llamados que superan los 3 (sobre el total de llamadas informadas).
11.Se leen 30 valores enteros (comprendidos entre 5 y 40), que representan la temperatura mxima de cada
uno de los das de un mes.
Se pide hallar e informar:
- La temperatura mxima del mes y el da que se produjo. (Se supone nica)
- Cuntos das la temperatura supero los 25 C.
- El promedio de las temperaturas mximas del mes.
12.Se ingresan los resultados de la evaluacin de un curso de Programacin; por cada alumno se informa:
nmero de matricula : 4 dgitos (1-9999)
asistencia : 1, presente; o, ausente
calificacin : 2 dgitos (0-10).
A partir de esta informacin se debe calcular e informar:
a) Cantidad y % de alumnos presentes.
b) Promedio de calificaciones de alumnos presentes.
c) % de alumnos aprobados (sobre el total de alumnos presentes).
d) Numero de matricula del alumno de mayor calificacin. (Si hay varios alumnos con esa calificacin: nu-
mero de matricula y cantidad de alumnos en esa situacin).

Pgina 9 de 9

S-ar putea să vă placă și