Teorema del programa estructurado
Estructuras
de Control
Las
estructuras de control tienen una finalidad bastante definida:
señalar
orden en que tienen que sucederse los pasos de un algoritmo. Si un
programa muestra un mensaje en la pantalla que
pregunta al
usuario”¿Desea seguir adelante?”, obviamente, de la respuesta
del usuario dependerá la siguiente acción del programa.
El
programador debe escribir el código para las dos posibilidades (sí
y no), aunque cuando el programa este funcionando, solo se elegirá
una.
Selectivas
Las
estructuras selectivas se utilizan para tomar
decisiones (por eso también se llaman estructuras de decisión o
alternativas). El mecanismo de acción evalúa una condición, y, a
continuación, en función del resultado, se lleva a cabo una opción
u otra. Es importante asentar esta idea: el programa esta diseñado
para evaluar una condición, y actuar en consecuencia, según que la
condición sea verdadera o falsa.
Selección
Simple ”Si ... entonces ...”
Se
evalúa una condición y si esta resulta verdadera entonces se
ejecuta una o varias instrucciones.
La
sintaxis básica
es:
SI (condición)
entonces
instrucciones
FINSI
Es
importante cerrar el SI (FINSI), ya que,
si no se cumple la condición, el programa continua en la instrucción
que sigue a FINSI.
Condicional
Si-Entonces
La
secuencia de instrucciones ejecutadas por la instrucción
Si-Entonces-Sino depende del valor de una condición lógica.
Si
<condición> Entonces
<instrucciones>
Sino
<instrucciones>
FinSi
Al
ejecutarse esta instrucción, se evalúa la condición y se ejecutan
las instrucciones que correspondan: las instrucciones que le siguen
al Entonces si la condición es verdadera, o las instrucciones que le
siguen al Sino si la condición es falsa. La condición debe ser una
expresión lógica, que al ser evaluada retorna Verdadero o Falso.
La
cláusula Entonces debe aparecer siempre, pero la cláusula Sino
puede no estar. En ese caso, si la condición es falsa no se ejecuta
ninguna instrucción y la ejecución del programa continúa con la
instrucción siguiente.
Ejemplo
Se desea
calcular la raíz cuadrada de un número, de forma que tras leer el
numero introducido por el usuario, es necesario validarlo, -esto es,
verificar que cumple las hipótesis-. En nuestro caso, hay que
verificar que el número sea no negativo.
INICIO
LEER
( numero )
SI
(numero >=
0)
entonces
raız
= √(
numero)
FINSI
ESCRIBIR
(raiz)
FIN
Selección
Doble. ”Si... entonces... sino...”.
Lo
más frecuente es encontrar situaciones donde si una condición se
cumple se ejecuta un grupo de instrucciones, pero si no se cumple,
deben ejecutarse otras.
La
instrucción “Si... entonces... Sino...” facilita este tipo de
programación. La estructura o sintaxis que le corresponde es:
SI
(condición)
entonces
Instrucciones
1
SINO
Instrucciones
2
FINSI
Con
esta estructura puede mejorarse el algoritmo del ejemplo anterior,
señalando
”error” si el usuario ingresa valores negativos.
Ejemplo
Se
desea calcular la raíz cuadrada de un numero...
INICIO
LEER
( numero )
SI
(numero >=
0) entonces
raíz
= √(numero)
SINO
ESCRIBIR
(”Error. ¡Debe ingresar valores positivos!”)
FINSI
ESCRIBIR
(raız)
FIN
Selección
Múltiple
También
hay programas que nos llevan a considerar alternativas con varias
opciones posibles.
Hay
dos formas
de escribir esto en pseudocódigo. La primera de ellas modifica la
estructura de selección doble:
SI
(condicion1)
entonces
Instrucciones
1
SI
(condicion2)
entonces
Instrucciones
2
...
SI
(condición
k) entonces
Instrucciones
k
FINSI
La
segunda:
OPCION es particularmente útil cuando se elabora un menú. La OPCIÓN
toma distintos valores y según la respuesta del usuario ejecuta las
acciones bajo dicha opción.
LEER
(opción)
OPCION
(Valor
1):
Instrucciones
1
(Valor
2):
Instrucciones
2
:
(Valor
k):
Instrucciones
k {las
acciones que toque}
En
otro caso
Instrucciones
k +
1
FINOPCION
La
opción”en
otro caso” no es más que una alternativa en caso que el usuario
seleccione alguna opción no contemplada entre las que se ofrece.
Esta
instrucción permite ejecutar opcionalmente varias acciones posibles,
dependiendo del valor almacenado en una variable de tipo numérico.
Al ejecutarse, se evalúa el contenido de la variable y se ejecuta la
secuencia de instrucciones asociada con dicho valor.
Cada
opción está formada por uno o más números separados por comas,
dos puntos y una secuencia de instrucciones. Si una opción incluye
varios números, la secuencia de instrucciones asociada se debe
ejecutar cuando el valor de la variable es uno de esos números.
Opcionalmente,
se puede agregar una opción final, denominada De Otro Modo, cuya
secuencia de instrucciones asociada se ejecutará sólo si el valor
almacenado en la variable no coincide con ninguna de las opciones
anteriores.
Ejemplo
El usuario
ingresa dos valores y se desea elaborar un menú cuyas opciones sean
calcular multiplicación, división de ambos números y salir del
programa. Asuma que el segundo número siempre es distinto de cero.
Inicio
ESCRIBIR
(Ingrese dos numeros: )
LEER
(x; y)
ESCRIBIR
(Menu de opciones.)
ESCRIBIR
(1. Multiplicacion.)
ESCRIBIR
(2. Division.)
ESCRIBIR
(3. Salir del programa.)
LEER(opcion)
OPCION
1:
mult
= x
* y
ESCRIBIR
(mult)
2:
div
= x/y
ESCRIBIR
(div)
3:
SALIR
en
otro caso:
ESCRIBIR
(Debe escoger una opcion entre 1 y 3)
FIN
OPCION
Repetitivas
Las
estructuras
repetitivas, que también reciben el nombre de bucle (loop, en
ingles) controlan un conjunto de instrucciones que deben repetirse
cierto número de veces, mientras se cumple una condición que ha de
ser claramente especificada. La condición podrá ser verdadera o
falsa, y se comprobara en cada paso o iteración del bucle.
Todo
bucle consta de tres
partes básicas, a saber:
Decisión:
donde se evalúa la condición y, en caso de ser cierta, se ejecuta
el cuerpo del bucle.
Cuerpo
del bucle:
son las instrucciones que se ejecutaran repetidamente, un numero
determinado de veces, cuando la decisión es verdadera.
Salida
del bucle:
es la condición que indica cuando terminan las iteraciones.
Básicamente,
existen tres tipos de estructuras repetitivas:
1.
”Mientras...” (while),
2.
”Repetir... hasta...” (do... until)
3.
”Desde” (for).
Una
forma de controlar un bucle es mediante una variable llamada contador
cuyo valor
se incrementa o decremento en una cantidad constante en cada
repetición que se produzca.
También,
los bucles suelen utilizar otro tipo de variables llamadas
acumulador,
cuya misión es almacenar una cantidad variable resultante de
operaciones sucesivas y repetidas. Es como un contador, con la
diferencia que el incremento/decremento es variable.
MIENTRAS
(while)
En
este tipo de estructura, el cuerpo del bucle se repite MIENTRAS se
cumple una determinada condición.
Al
ejecutarse esta instrucción, la condición es evaluada. Si la
condición resulta verdadera, se ejecuta una vez la secuencia de
instrucciones que forman el cuerpo del ciclo. Al finalizar la
ejecución del cuerpo del ciclo se vuelve a evaluar la condición y,
si es verdadera, la ejecución se repite. Estos pasos se repiten
mientras la condición sea verdadera.
Note
que las instrucciones del cuerpo del ciclo pueden no ejecutarse
nunca, si al evaluar por primera vez la condición resulta ser falsa.
Si
la condición siempre es verdadera, al ejecutar esta instrucción se
produce un ciclo infinito. A fin de evitarlo, las instrucciones del
cuerpo del ciclo deben contener alguna instrucción que modifique la
o las variables involucradas en la condición, de modo que ésta sea
falsificada en algún momento y así finalice la ejecución del
ciclo.
La
sintaxis básica
es:
MIENTRAS
(condición
- expresión lógica) hacer
Instrucciones
FINMIENTRAS
Ejemplo
Dado un
numero entero N calcular la suma de todos los números entre 1 y N..
INICIO
LEER(N)
I
← 1;
SUMA
← 0
MIENTRAS
(I <= N)
SUMA
← SUMA +
I;
I
← I +
1;
FINMIENTRAS
FIN
Frecuentemente
se utiliza el bucle while para validar los datos de
entrada de un programa. Veamos el siguiente:
Ejemplo
Solicitar
al usuario un valor positivo y validarlo.
INICIO
LEER(x)
Cont←
0;
MIENTRAS
(x < 0)
hacer
LEER(x)
Cont
← Cont +
1
FINMIENTRAS
FIN
En
los ejemplos las la variable I
y Cont
son
contadores y la variable SUMA
es un
acumulador. ¿Que cree Ud. que pasaría si se omitiera la línea I
← I + 1
en del cuerpo del bucle?
Repetir
(repeat)
La
instrucción Repetir-Hasta Que ejecuta una secuencia de instrucciones
hasta que la condición sea verdadera.
Repetir
<instrucciones>
Hasta
Que <condición>
Al
ejecutarse esta instrucción, la secuencia de instrucciones que forma
el cuerpo del ciclo se ejecuta una vez y luego se evalúa la
condición. Si la condición es falsa, el cuerpo del ciclo se ejecuta
nuevamente y se vuelve a evaluar la condición. Esto se repite hasta
que la condición sea verdadera.
Note
que, dado que la condición se evalúa al final, las instrucciones
del cuerpo del ciclo serán ejecutadas al menos una vez.
Además,
a fin de evitar ciclos infinitos, el cuerpo del ciclo debe contener
alguna instrucción que modifique la o las variables involucradas en
la condición de modo que en algún momento la condición sea
verdadera y se finalice la ejecución del ciclo.
DESDE
(for)
El
bucle for permite repetir un
conjunto de instrucciones un número determinado de veces, con la
peculiaridad que la instrucción incrementa (o decremento),
automáticamente y de uno en uno, la variable que se utiliza como
contador.
Al
ingresar al bloque, la variable <variable> recibe el valor
<inicial> y se ejecuta la secuencia de instrucciones que forma
el cuerpo del ciclo. Luego se incrementa la variable <variable>
en <paso> unidades y se evalúa si el valor almacenado en
<variable> superó al valor <final>. Si esto es falso se
repite hasta que <variable> supere a <final>. Si se omite
la cláusula Con Paso <paso>, la variable <variable> se
incrementará en 1.
Si
se habilita la sintaxis flexible en la configuración del lenguaje se
pueden utilizar dos alternativas. La primera variante consiste en
reemplazar el operador de asignación por la palabra clave Desde:
Para
<variable> Desde <inicial> Hasta <final> Con Paso
<paso> Hacer...
De
esta forma, la lectura de la sentencia resulta más obvia. Además,
con sintaxis flexible, si no se especifica el paso pero el valor
final es menor al inicial, el bucle recorrerá los valores en orden
inverso como si el paso fuera -1. La segunda variante solo sirve para
recorrer arreglos de una o más dimensiones. Se introduce con la
construcción Para Cada seguida de un identificador, la palabra clave
De y otro identificador:
Para
Cada <elemento> De <Arreglo> Hacer...
El
segundo identificador debe corresponder a un arreglo. El primero será
el que irá variando en cada iteración. El ciclo realizará tantas
iteraciones como elementos contenga el arreglo y en cada uno el
primer identificador servirá para referirse al elemento del arreglo
en cuestión.
La
sintaxis básica
es:
DESDE
< valor inicio > :
< valor
final > HACER
Instrucciones
FINDESDE
DESDE
< valor inicio > :
<
decremento > :
< valor
final > HACER
Instrucciones
FINDESDE
El
incremento es opcional. Si no se coloca, el bucle aumenta
de uno en uno -de forma automática el valor del contador. Si se
desea decrementar la variable es necesario colocar el valor del
decremento (-1).
Retomando
el ejemplo:
INICIO
LEER(N)
SUMA
Ã← 0
DESDE
I =
1 : N
SUMA
← SUMA +
I;
FINDESDE
FIN
Observaciones:
El
contador siempre se inicializa automáticamente en el valor inicial
indicado en la estructura.
No hay comentarios:
Publicar un comentario