Você está na página 1de 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 nmero, 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 desde variable (v) = vi hasta vf hacer < accin S1> <accin S2 > ....................... fin desde Su estructura tiene la siguiente forma desde v = vi hasta vf < accin S1> <accin S2 > ...................... end Cdigo se programa for variable (v) = vi to vf do begin < 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 promedio. 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 ascendente. 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: numero de matricula y cantidad de alumnos en esa situacin).

Pgina 9 de 9

Você também pode gostar