Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Estructuras Repetitivas
Estructuras Repetitivas
http://programandoenc.webcindario.com
ESTRUCTURAS ITERATIVAS
Fundamentos de Programacin
http://programandoenc.webcindario.com
ESTRUCTURAS ITERATIVAS
OBJETIVOS
Aprender a resolver problemas mediante la ejecucin repetida de una secuencia de
proposiciones llamados bucle o estructuras repetitivas o iterativas.
Distinguir las diferentes estructuras de repeticin utilizadas en problemas con bucles:
mientras, repetir mientras, para.
Analizar las diferencias entre cada una de las estructuras de repeticin.
Analizar la correspondencia entre cada una de las estructuras de repeticin.
INTRODUCCION
Las estructuras ITERATIVAS o de repeticin, permiten la ejecucin de una instruccin o
una
secuencia de instrucciones (<bloque de instrucciones>) tantas veces como sea
necesario. El nmero de veces que el bloque de instrucciones se ejecutar se puede especificar
de manera explcita, o a travs de una condicin lgica que indica cundo se ejecuta de nuevo y
cundo no. A cada ejecucin del bloque de instrucciones se le conoce como una iteracin.
1. TIPOS DE ITERACIN
Existen tres tipos principales de sentencias de repeticin:
Bucle MIENTRAS
Bucle REPETIR MIENTRAS
Bucle PARA
1.1
BUCLE MIENTRAS
Fundamentos de Programacin
http://programandoenc.webcindario.com
DIAGRAMA DE FLUJO
PSEUDOCODIGO
Ejemplos.
Ejemplo 1. Dado un nmero natural n se desea calcular la suma de los nmeros naturales desde
1 hasta n.
Variables Conocidas
Un nmero natural.
Variables Desconocidas
Un nmero natural.
Condiciones
ESPECIFICACIN:
Entradas
Salidas
Fundamentos de Programacin
http://programandoenc.webcindario.com
DISEO:
Primera Aproximacin:
Inicio
Paso 1. Leer el nmero.
Paso 2. Recorrer los nmeros desde cero hasta el nmero dado e irlos sumando.
Paso 3. Imprimir la suma
Fin
Refinamiento:
1 n: entero /* se define la variable para el nmero */
2 suma: entero /* se define la variable para la suma */
3 i: entero /* se define la variable para recorrer los nmeros entre 0 y n */
4 escribir ( Escriba el numero: )
5 leer (n) /* lee el primer nmero */
6 suma = 0 /* inicia la suma en cero */
7 i :=1 /* empieza la variable que recorre los nmeros en 1 */
8 mientras (i <= n) hacer
suma = suma + i /* en cada iteracin suma el nmero i */
9
i = i + 1 /* para tomar el siguiente nmero en la prxima iteracin */
10
11 fin_mientras
12 escribir (La suma es: , suma)
Diagrama de Flujo:
Fundamentos de Programacin
http://programandoenc.webcindario.com
Fundamentos de Programacin
http://programandoenc.webcindario.com
LINEA
4
5
6
7
8
9
10
11
8
9
10
11
8
9
10
11
8
9
10
11
8
9
10
11
8
12
suma
ENTRADA
SALIDA
Escriba el numero
5
0
1
La condicin es evaluada a verdadero, por lo tanto se ejecuta el bloque de acciones del bucle, es
decir, pasa a la lnea 9.
1
2
Se salta hasta la lnea que contiene la condicin del bucle mientras en ejecucin, es decir, hasta la
lnea 8
La condicin es evaluada a verdadero, por lo tanto se ejecuta el bloque de acciones del bucle, es
decir, pasa a la lnea 9.
3
3
Se salta hasta la lnea que contiene la condicin del bucle mientras en ejecucin, es decir, hasta la
lnea 8
La condicin es evaluada a verdadero, por lo tanto se ejecuta el bloque de acciones del bucle, es
decir, pasa a la lnea 9.
6
4
Se salta hasta la lnea que contiene la condicin del bucle mientras en ejecucin, es decir, hasta la
lnea 8
La condicin es evaluada a verdadero, por lo tanto se ejecuta el bloque de acciones del bucle, es
decir, pasa a la lnea 9.
10
5
Se salta hasta la lnea que contiene la condicin del bucle mientras en ejecucin, es decir, hasta la
lnea 8
La condicin es evaluada a verdadero, por lo tanto se ejecuta el bloque de acciones del bucle, es
decir, pasa a la lnea 9.
15
6
Se salta hasta la lnea que contiene la condicin del bucle mientras en ejecucin, es decir, hasta la
lnea 8
La condicin evala a falso, por lo tanto no se ejecuta el bloque de acciones del bucle y este
termina, es decir, pasa a la lnea 12, la lnea siguiente a la lnea del fin_mientras del bucle.
La suma es: 15
Fundamentos de Programacin
1.2
http://programandoenc.webcindario.com
repetir
<bloque instrucciones>
mientras <condicin>
Ejemplos
Ejemplo 1.
El problema de calcular la suma de los nmeros naturales desde 1 hasta n (enunciado
anteriormente), se puede solucionar usando el bucle REPETIR MIENTRAS.
A continuacin se describe el algoritmo solucin:
Fundamentos de Programacin
http://programandoenc.webcindario.com
Diagrama de Flujo:
INICIO
Leer n
i =1
suma = 0
suma = suma +i
VERDADERO
i = i+1
mientras
i<=n
FALSO
escribir suma
FIN
Fundamentos
http://programandoenc.webcindario.com
de
Programacin
Este algoritmo cuenta con doce (12) lneas, las tres primeras, son para definir las
variables usadas y las ltimas nueve son las instrucciones que son aplicadas sobre dichos datos.
De esta manera la prueba de escritorio se debe realizar solamente sobre las lneas 4-12,
teniendo en cuenta los valores para las variables.
LINEA
4
5
6
7
8
9
10
11
8
9
10
11
8
9
10
11
8
9
10
11
8
9
10
11
12
1.3
suma
ENTRADA
SALIDA
Ingrese el nmero:
5
0
1
Se ejecuta la instruccin haga, es decir pasa a la lnea 9
1
2
La condicin es evaluada a verdadero, por lo tanto se salta hasta la lnea que contiene la condicin
del bucle haga_mientras en ejecucin, es decir, hasta la lnea 8
Se ejecuta la instruccin haga, es decir pasa a la lnea 9
3
3
La condicin es evaluada a verdadero, por lo tanto se salta hasta la lnea que contiene la condicin
del bucle haga_mientras en ejecucin, es decir, hasta la lnea 8
Se ejecuta la instruccin haga, es decir pasa a la lnea 9
6
4
La condicin es evaluada a verdadero, por lo tanto se salta hasta la lnea que contiene la condicin
del bucle haga_mientras en ejecucin, es decir, hasta la lnea 8
Se ejecuta la instruccin haga, es decir pasa a la lnea 9
10
5
La condicin es evaluada a verdadero, por lo tanto se salta hasta la lnea que contiene la condicin
del bucle haga_mientras en ejecucin, es decir, hasta la lnea 8
Se ejecuta la instruccin haga, es decir pasa a la lnea 9
15
6
La condicin es evaluada a falso, por lo tanto este bucle termina y se salta a la lnea 12
La suma es: 15
BUCLE PARA
Fundamentos
http://programandoenc.webcindario.com
de
Programacin
ENTRADA
para variable = Vo,
hasta Vf con inc = 1
?????
SALIDA
Donde:
<variable> es la variable controladora del bucle,
<Vo> es el valor inicial que toma la variable controladora.
<Vf> es el ltimo valor que toma la variable controladora; cuando el valor de la
variable contadora supere este valor, el bucle termina.
<bloque instrucciones> es el conjunto de instrucciones que se ejecuta en cada
iteracin, mientras la variable controldora no sobrepase el <lim_sup>.
Casos:
Cuando <Vo> es menor que <Vf> ocurre lo siguiente (si <inc> = 1):
1.
2.
3.
4.
Es importante observar que el valor final de la variable contadora supera a <Vf> para
que pueda finalizar el bucle
Cuando <Vo> es mayor que <Vf> el bucle termina sin ejecutarse nunca el <bloque de
instrucciones>., excepto si el incremento <inc> es negativo. Tenga en cuenta que no
se genera error al correr el programa
Ejemplo:
para (x=5 hasta 4 con inc = 1)
hacer
Esta lnea de cdigo nunca se ejecuta.
Pero:
para (x=5 hasta 4 con inc = -1)
hacer
10
Fundamentos
http://programandoenc.webcindario.com
de
Programacin
Tanto <Vo> como <Vf> pueden ser expresiones como en el siguiente ejemplo:
para(j=x+1 hasta 2*y)
hacer
En este caso se calculan primero los valores de las expresiones (x+1) y (2*y)
empleando para esto los valores actuales de x y y para utilizarlos como <Vo> y <Vf>
respectivamente.
Ejemplos.
Ntese que se requieren menos instrucciones que en las anteriores estructuras dado que
el incremento de i se hace automticamente en la instruccin 7 al repetir el bucle.
11
Fundamentos
http://programandoenc.webcindario.com
de
Programacin
Diagrama de flujo:
INICIO
Leer n
I =1
suma = 0
suma = suma +i
escribir suma
FIN
SUMA
ENTRADA
SALIDA
Ingrese el
nmero a
calcularle la tabla
de multiplicar:
5
3
3
6
0
Como es la primera vez que llega a esta lnea, se asigna en la variable contadora el lmite inferior. Ahora
se comprueba si la variable contadora es menor o igual al lmite superior. Como se ve en la lnea 7, en
este caso es cierto entonces se ejecuta el bloque de acciones del bucle para, es decir, se pasa a la lnea
8.
7
1
8
1
9
Se vuelve a la lnea de inicio del bucle para, es decir, lnea 7.
7
2
Se comprueba si la variable contadora es menor o igual al lmite superior. En este caso es cierto
entonces se ejecuta el bloque de acciones del bucle para, es decir, se pasa a la lnea 8.
8
3
9
Se vuelve a la lnea de inicio del bucle para, es decir, lnea 7.
7
3
Se incrementa la variable contadora y se vuelve a la lnea de inicio del bucle para, es decir, lnea 7.
Como la variable contadora es menor que el lmite superior se pasa a la lnea 8
12
Fundamentos
http://programandoenc.webcindario.com
de
Programacin
LINEA
N
I
SUMA
ENTRADA
SALIDA
8
6
9
Se vuelve a la lnea de inicio del bucle para, es decir, lnea 7.
7
4
Se incrementa la variable contadora y se vuelve a la lnea de inicio del bucle para, es decir, lnea 6.
La variable contadora no es menor que el
6
lmite superior se pasa a la lnea siguiente al
fin_para, es decir, a la lnea 10.
10
La suma es : 3
Ejemplo 2. Calcular las primeras tres filas de la tabla de multiplicar de un nmero dado.
Variables Conocidas
Un nmero.
Variables Desconocidas
Tres nmeros.
Condiciones
ESPECIFICACIN:
Entradas
Salidas
n
a1, a2, a3
Condiciones
DISEO:
Primera Aproximacin:
Inicio
Paso 1. Leer el nmero a calcularle la tabla de multiplicar
Paso 2. Para los nmeros entre uno y tres calcular el mltiplo del nmero
Fin
Refinamiento:
1
2
3
4
5
n: entero
a: entero
i: entero
escribir ( Introduzca el nmero para calcular su tabla de multiplicar: )
leer (n)
13
Fundamentos
http://programandoenc.webcindario.com
de
Programacin
Diagrama de flujo:
ENTRADA
SALIDA
Ingrese el nmero
a calcularle la tabla
de multiplicar:
5
3
3
6
1
Como es la primera vez que llega a esta lnea, se asigna en la variable contadora el lmite inferior. Ahora
se comprueba si la variable contadora es menor o igual al lmite superior. En este caso es cierto entonces
se ejecuta el bloque de acciones del bucle para, es decir, se pasa a la lnea
7
3
8
3*1=3
Se incrementa la variable contadora y se vuelve a la lnea de inicio del bucle para, es decir, lnea 6.
Se comprueba si la variable contadora es
menor o igual al lmite superior. En este caso
6
es cierto entonces se ejecuta el bloque de
2
acciones del bucle para, es decir, se pasa a la
lnea 7.
7
8
6
3*2=6
14
Fundamentos
http://programandoenc.webcindario.com
de
Programacin
LINEA
N
I
A
ENTRADA
SALIDA
Se incrementa la variable contadora y se vuelve a la lnea de inicio del bucle para, es decir, lnea 6.
La variable contadora es menor que el lmite
6
3
superior se pasa a la lnea 7
7
9
8
3*3=9
Se incrementa la variable contadora y se vuelve a la lnea de inicio del bucle para, es decir, lnea 6.
La variable contadora no es menor que el
6
lmite superior se pasa a la lnea siguiente al
4
fin_para, es decir, a la lnea 10.
10
Termino...
2.
3. TIPO DE VARIABLES TILES PARA LA ITERACIN
Cuando se disean algoritmos que incluyen estructuras de control repetitivas, existen ciertas
variables que cumplen una funcin especfica en cada iteracin del bucle, las ms comunes son:
VARIABLES CONTADORAS
Como su nombre lo indica estas variables se usan fundamentalmente para contar, por lo
tanto deben ser de tipo entero. Un ejemplo de este tipo de variables es la variable de control en
un bucle para.
Una variable contadora se incrementa (o decrementa) en un valor constante en cada
iteracin del bucle. Es as como en los algoritmos presentados anteriormente para resolver el
problema de calcular la suma de los nmeros naturales desde 1 hasta n, la variable i es una
variable contadora.
Ejemplo:
Desarrollar un algoritmo que imprima los nmeros impares en orden descendente que
hay entre 1 y 100.
Algoritmo Solucin
i: entero
i =99
mientras (i >= 1 hacer
escribir ( i, , )
i=i2
fin_mientras
En este caso i es una variable contadora, ya que en cada repeticin del bucle la variable
es decrementada en una cantidad fija, 2 en este caso.
15
Fundamentos
http://programandoenc.webcindario.com
de
Programacin
VARIABLES ACUMULADORAS
La funcin de una variable acumuladora es almacenar valores numricos que
generalmente se suman (o multiplican) en cada iteracin, por lo tanto la variable debe ser de
tipo entero o real. Por ejemplo, en los diferentes algoritmos presentados para solucionar el
problema de calcular la suma de los nmeros naturales desde 1 hasta n, la variable suma es
una variable acumuladora.
Ejemplo.
Calcular las suma de los cuadrados de los nmeros entre 1 y 100.
Algoritmo Solucin
i: entero
suma: entero
i =1
suma = 0
mientras (i <= 100)hacer
suma:= suma + i * i
i=i+1
fin_mientras
escribir (La suma de los cuadrados hasta 100 es:, suma)
En este caso suma es una variable acumuladora mientras que la variable i es una
variable contadora.
Ejemplo.
Realizar un programa que lea una serie de nmeros reales y los sume. El programa debe
preguntar al usuario cuando desea ingresar un siguiente dato y si el usuario responde que no
desea ingresar ms datos el programa debe confirmar la respuesta. Si el usuario desea
continuar ingresando datos se debe seguir solicitando datos y si el usuario confirma su deseo de
salir, el programa debe mostrar la suma de los datos ledos y terminar.
ESPECIFICACIN:
n
suma = datosi
i =1
Donde, datos es la coleccin de n nmeros reales que el usuario ingresa hasta que
decide no continuar ingresando datos y suma es la sumatoria de dichos nmeros y pertenece a
los reales.
16
Fundamentos
http://programandoenc.webcindario.com
de
Programacin
Algoritmo Solucin
bandera: entero
dato: real
c: caracter
bandera = 1
suma = 0.0
mientras (bandera = 1) hacer
escribir (Introduzca un dato:)
leer (dato)
suma = suma + dato
escribir (Desea continuar ingresando datos (S/N):)
leer (c)
si (c = N OR c = n) entonces
bandera = 0
fin_si
fin_mientras
escribir( La suma es:, suma)
4.
5. CORRESPONDENCIA ENTRE BUCLES
En la teora matemtica de programacin slo es necesario un tipo de bucle, en esta seccin
se explican las correspondencias que hacen posible esta afirmacin, tomando como bucle
referencia el bucle mientras.
17
Fundamentos
http://programandoenc.webcindario.com
de
Programacin
<variable> = <Vo>
mientras <variable> <= <Vf> hacer
<bloque>
<variable> = <variable> + 1
fin _mientras
Resumen
Las estructuras de control cclico permiten controlar la ejecucin repetida de una
secuencia de instrucciones.
El bucle mientras permite ejecutar un bloque de instrucciones mientras que la
evaluacin de una expresin lgica de cmo resultado verdadero.
El bucle repetir-mientras permite ejecutar un bloque de instrucciones por lo menos
una vez, despus evala la condicin para ejecutar de nuevo el bucle si la condicin es
verdadera.
El bucle para ejecuta un bloque de instrucciones un nmero determinado de veces.
EJERCICIOS
1. Imprimir un listado con los nmeros del 1 al 100 cada uno con su respectivo cuadrado
2. Imprimir un listado con los nmeros impares desde 1 hasta 999 y seguidamente otro
listado con los nmeros pares desde 2 hasta 1000
3. Imprimir los nmeros pares desde N (siendo N un nmero par que se lee) en forma
descendente hasta 2.
4. Imprimir los 100 primeros nmeros de Fibonacci. Recuerde que un nmero de Fibonacci
se calcula como la suma de los dos anteriores as:
0, 1, 1, 2, 3, 5, 8,13
5. Imprimir los nmeros de 1 a N (siendo N un nmero que se lee) cada uno con su
respectivo factorial.
6. Calcular el factorial de un nmero N (siendo N un nmero que se lee).
7. Calcular el factorial de 10 nmeros diferentes cuyos valores se leen.
8. Leer 20 nmeros y encontrar el mayor y el menor valor ledos.
9. Leer un dato y almacenarlo en la variable n. Calcular el valor de 2 elevado a la potencia
n
10. Leer un dato y almacenarlo en la variable n, leer otro dato y almacenarlo en la variable
x. Calcular el valor de x elevado a la potencia n.
11. Una papelera debe imprimir una lista de los valores para diferentes cantidades de
fotocopias a sacar. El precio unitario de cada fotocopia debe leerse. Imprimir un listado
teniendo en cuenta que se tiene una poltica de descuento para cantidades que se
18
Fundamentos
http://programandoenc.webcindario.com
de
Programacin
obtengan del mismo original as: el 12% para fotocopias entre 100 y 200, del 15% para
fotocopias entre 201 y 400, y del 18% para fotocopias por cantidades mayores a 400.
12. En 1994 el pas A tiene una poblacin de 25 millones de habitantes y el pas B de 19.9
millones. Las tasas de crecimiento de la poblacin son de 2% y 3% respectivamente.
Desarrollar un algoritmo para informar en que ao la poblacin del pas B supera a la de
A.
BIBLIOGRAFA
1. Becerra Csar. Algoritmos, Editorial Csar A. Becerra, 1993.
2. Goldstein Larry Joel. Turbo Pascal. Editorial Prentice-Hall Hispanoamericana, 1993.
3. Konvalina John y Stantley Willeman. Programacin con Pascal. Editorial McGraw-Hill,
1989.
19
Fundamentos de Programacin
http://programandoenc.webcindario.com
Bucle
mientras
C++
while(<condicin>)
{
<bloque instrucciones>
<bloque instrucciones>
fin_mientras
Bucle
hagamientras
haga
<bloque instrucciones>
<bloque instrucciones>
mientras <condicin>
Bucle
para
}
do
{
}
while(<condicin>);
for (i = <lim_inf>; i <= <lim_sup>; i ++)
{
<bloque instrucciones>
<bloque instrucciones>
fin_para
20