Desde para For Desde Desde para

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 7

Flujo de control II: Estructuras repetitivas 171

5.6. ESTRUCTURA desde/para ("for")


En muchas ocasiones se conoce de antemano el número de veces que se desean ejecutar las acciones de un bucle.
En estos casos, en el que el número de iteraciones es fijo, se debe usar la estructura desde o para (for, en inglés).
La estructura desde ejecuta las acciones del cuerpo del bucle un número especificado de veces y de modo automá-
tico controla el número de iteraciones o pasos a través del cuerpo del bucle. Las herramientas de programación de la
estructura desde o para se muestran en la página siguiente junto a la Figura 5.5.

5.6.1. Otras representaciones de estructuras repetitivas desde/para (for)


Un bucle desde (for) se representa con los símbolos de proceso y de decisión mediante un contador. Así, por ejem-
plo, en el caso de un bucle de lectura de cincuenta números para tratar de calcular su suma:

inicialización
I←1 I←1
del contador

no proceso o acciones
I <= 50 del bucle

I←I+1
Proceso

no
I←I+1 I > 50


172 Fundamentos de programación

Pseudocódigo estructura desde

desde v ← vi hasta vf [incremento incr] hacer


<acciones>
.
.
.
fin_desde
v: variable indice
vi, vf: valores inicial y final de la variable

a) Modelo 1

para v ← vi hasta vf [incremento incr] hacer


<acciones>
.
.
.
fin_para
b) Modelo 2

Diagrama N-S, estructura desde

desde v = vi hasta vf [incremento incr] hacer


<acciones>
fin_desde

b) Modelo 3

Diagrama de flujo, estructura, desde

calcular
valor inicial
y valor final

fijar la
variable índice
al valor inicial

variable verdadero
índice > valor
final
falso

acciones cuerpo del bucle

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

Es posible representar el bucle con símbolos propios

i ← vi i ← vi
sí sí
i > vf i > vf
i ← vi + X i ← vi + X
no no

acciones acciones

o bien mediante este otro símbolo

repetir
variable =
m1, m2, m3

m1 = contador inicial
proceso m2 = contador final
m3 = incremento de paso

Como aplicación, calcular la suma de los N primeros enteros.

i ← vi
i > vf

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

desde v ← vi hasta vf inc paso hacer {inc, incremento}


dec {dec, decremento}
<acciones>
.
.
.
fin_desde

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,

desde i ← 20 hasta 10 hacer


<acciones>
fin_desde

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

desde i ← 20 hasta 10 decremento 1 hacer


<acciones>
fin_desde

5.6.2. Realización de una estructura desde con estructura mientras


Es posible, como ya se ha mencionado en apartados anteriores, sustituir una estructura desde por una mientras;
en las líneas siguientes se indican dos formas para ello:

1. Estructura desde con incrementos de la variable índice positivos.


v ← vi
mientras v <= vf hacer
<acciones>
v ← v + incremento
fin_mientras

2. Estructura desde con incrementos de la variable índice negativos.


v ← vi
mientras v >= vf hacer
<acciones>
v ← v - decremento
fin_mientras
Flujo de control II: Estructuras repetitivas 175

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

5.7. SALIDAS INTERNAS DE LOS BUCLES

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

5.8. SENTENCIAS DE SALTO interrumpir (break) y continuar (continue)


Las secciones siguientes examinan las sentencias de salto (jump) que se utilizan para influir en el flujo de ejecución
durante la ejecución de una sentencia de bucle.

5.8.1. Sentencia interrumpir (break)


En ocasiones, los programadores desean terminar un bucle en un lugar determinado del cuerpo del bucle en vez de
esperar que el bucle termine de modo natural por su entrada o por su salida. Un método de conseguir esta acción
—siempre utilizada con precaución y con un control completo del bucle— es mediante la sentencia interrumpir
(break) que se suele utilizar en la sentencia según_sea (switch).
La sentencia interrumpir se puede utilizar para terminar una sentencia de iteración y cuando se ejecuta produ-
ce que el flujo de control salte fuera a la siguiente sentencia inmediatamente a continuación de la sentencia de itera-
ción. La sentencia interrumpir se puede colocar en el interior del cuerpo del bucle para implementar este efecto.

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.

5.8.2. Sentencia continuar (continue)


La sentencia continuar (continue) hace que el flujo de ejecución salte el resto de un cuerpo del bucle para con-
tinuar con el siguiente bucle o iteración. Esta característica suele ser útil en algunas circunstancias.

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.

También podría gustarte