Desde para For Desde Desde para
Desde para For Desde Desde para
Desde para For Desde Desde para
inicialización
I←1 I←1
del contador
no proceso o acciones
I <= 50 del bucle
sí
I←I+1
Proceso
no
I←I+1 I > 50
sí
172 Fundamentos de programación
a) Modelo 1
b) Modelo 3
calcular
valor inicial
y valor final
fijar la
variable índice
al valor inicial
variable verdadero
índice > valor
final
falso
incrementar
variable índice
c) Modelo 4
Figura 5.5. Estructura desde (for): a) pseudocódigo, b) diagrama N-S, c) diagrama de flujo.
Flujo de control II: Estructuras repetitivas 173
i ← vi i ← vi
sí sí
i > vf i > vf
i ← vi + X i ← vi + X
no no
acciones acciones
repetir
variable =
m1, m2, m3
m1 = contador inicial
proceso m2 = contador final
m3 = incremento de paso
i ← vi
i > vf
sí
i ← vi + X
no escribir
'Suma =', S
S←S+1
fin
equivale a
algoritmo suma
var
entero : I, N, S
inicio
S ← 0,
leer (N)
desde I ← 1 hasta N hacer
S ← S + I
fin_desde
escribir('Suma =', S)
fin
174 Fundamentos de programación
La estructura desde comienza con un valor inicial de la variable índice y las acciones especificadas se ejecutan,
a menos que el valor inicial sea mayor que el valor final. La variable índice se incrementa en uno y si este nuevo valor
no excede al final, se ejecutan de nuevo las acciones. Por consiguiente, las acciones específicas en el bucle se ejecutan
para cada valor de la variable índice desde el valor inicial hasta el valor final con el incremento de uno en uno.
El incremento de la variable índice siempre es 1 si no se indica expresamente lo contrario. Dependiendo del tipo
de lenguaje, es posible que el incremento sea distinto de uno, positivo o negativo. Así, por ejemplo, FORTRAN ad-
mite diferentes valores positivos o negativos del incremento, y Pascal sólo admite incrementos cuyo tamaño es la
unidad: bien positivos, bien negativos. La variable índice o de control normalmente será de tipo entero y es normal
emplear como nombres las letras I, J, K.
El formato de la estructura desde varía si se desea un incremento distinto a 1, bien positivo, bien negativo (de-
cremento).
Si el valor inicial de la variable índice es menor que el valor final, los incrementos deben ser positivos, ya que
en caso contrario la secuencia de acciones no se ejecutaría. De igual modo, si el valor inicial es mayor que el valor
final, el incremento debe ser en este caso negativo, es decir, decremento. Al incremento se le suele denominar también
paso (“step”, en inglés). Es decir,
no se ejecutaría, ya que el valor inicial es 20 y el valor final 10, y como se supone un incremento positivo, de valor 1,
se produciría un error. El pseudocódigo correcto debería ser
La estructura desde puede realizarse con algoritmos basados en estructura mientras y repetir, por lo que
pueden ser intercambiables cuando así lo desee. Las estructuras equivalentes a desde son las siguientes:
a) inicio b) inicio
i ← n i ← 1
mientras i > 0 hacer mientras i <= n hacer
<acciones> <acciones>
i ← i – 1 i ← i + 1
fin_mientras fin_mientras
fin fin
c) inicio d) inicio
i ← 0 i ← 1
repetir repetir
<acciones> <acciones>
i ← i+1 i ← i+1
hasta_que i = n hasta_que i > n
fin fin
e) inicio f) inicio
i ← n + 1 i ← n
repetir repetir
<acciones> <acciones>
i ← i - 1 i ← i - 1
hasta_que i = 1 hasta_que i < 1
fin fin
Aunque no se incluye dentro de las estructuras básicas de la programación estructurada, en ocasiones es necesario
disponer de una estructura repetitiva que permita la salida en un punto intermedio del bucle cuando se cumpla una
condición. Esta nueva estructura sólo está disponible en algunos lenguajes de programación específicos; la denomi-
naremos iterar para diferenciarlo de repetir_hasta ya conocida. Las salidas de bucles suelen ser válidas en
estructuras mientras, repetir y desde.
El formato de la estructura es
iterar
<acciones>
si <condicion> entonces
salir_bucle
fin_si
<acciones>
fin_iterar
En general, la instrucción iterar no produce un programa legible y comprensible como lo hacen mientras y
repetir. La razón para esta ausencia de claridad es que la salida de un bucle ocurre en el medio del bucle, mientras
que normalmente la salida del bucle es al principio o al final del mismo. Le recomendamos no recurra a esta opción
—aunque la tenga su lenguaje— más que cuando no exista otra alternativa o disponga de la estructura iterar
(loop).
EJEMPLO 5.12
Una aplicación de un posible uso de la instrucción salir se puede dar cuando se incluyen mensajes de petición en
el algoritmo para la introducción sucesiva de informaciones.
176 Fundamentos de programación
Algoritmo 1 Algoritmo 2
leer(informacion) leer(informacion)
repetir mientras_no fin_de_lectura
procesar (informacion) procesar (informacion)
leer(informacion) leer(informacion)
hasta_que fin_de_lectura fin_mientras
En los algoritmos anteriores cada entrada (lectura) de información va acompañada de su correspondiente proceso,
pero la primera lectura está fuera del bucle. Se pueden incluir en el interior del bucle todas las lecturas de información
si se posee una estructura salir (exit). Un ejemplo de ello es la estructura siguiente:
iterar
leer(informacion)
si fin_de_lectura entonces
salir_bucle
fin_si
procesar (informacion)
fin_iterar
Sintaxis
interrumpir
sentencia_interrumpir::= interrumpir
EJEMPLO 5.13
hacer
escribir ('Introduzca un número de identificiación')
leer (numId)
si (numId < 1000 o numId > 1999)entonces
escribir ('Número no válido ')
escribir ('Por favor, introduzca otro número')
si-no
interrumpir
fin_si
mientras (expresión cuyo valor sea siempre verdadero)
Flujo de control II: Estructuras repetitivas 177
EJEMPLO 5.14
var entero: t
desde t ← 0 hasta t < 100 incremento 1 hacer
escribir (t)
si (t = 1d) entonces
interrumpir
fin_si
fin_desde
Regla
La sentencia interrumpir (break) se utiliza frecuentemente junto con una sentencia si (if) actuando como
una condición interna del bucle.
Sintaxis
continuar
Sentencia_continuar::= continuar
La sentencia continuar sólo se puede utilizar dentro de una iteración de un bucle. La sentencia continuar no
interfiere con el número de veces que se repite el cuerpo del bucle como sucede con interrumpir, sino que simple-
mente influye en el flujo de control en cualquier iteración específica.