| principal | contenidos | <-- | --> | test | editor | indice |
|
|
|
|
|
|
|
|
Controlar el flujo es determinar el orden en el que se ejecutarán las instrucciones en nuestros programas. Si no existiesen las sentencias de control entonces los programas se ejecutarían de forma secuencial, empezarían por la primera instrucción e irían una a una hasta llegar a la última.
Pero, obviamente este panorama sería muy malo para el programador. Por un lado, en sus programas no existiría la posibilidad de elegir uno de entre varios caminos en función de ciertas condiciones (sentencias alternativas). Y por el otro, no podrían ejecutar algo repetidas veces, sin tener que escribir el código para cada una (sentencias repetitivas).
Para estos dos problemas tenemos dos soluciones: las sentencias de control alternativas y las repetitivas. Estos dos conjuntos de sentencias forman en Pascal el grupo de las sentencias estructuradas. Y se les llama estructuradas porque a diferencia de las simples pueden contener en su cuerpo otras sentencias.
Las sentencias alternativas también son conocidas como sentencias selectivas porque permiten seleccionar uno de entre varios caminos por donde seguirá la ejecución del programa. En algunos casos esta selección viene determinada por la evaluación de una expresion lógica. Este tipo de sentencias se dividen en dos:
A las sentencias repetitivas se les conoce también como sentencias iterativas ya que permiten realizar algo varias veces (repetir, iterar). Dentro de ellas distinguimos tres:
Las sentencias de control alternativas permiten que en un punto dado de un programa puedan existir varios caminos posibles a seguir. Y el camino seguido se escogerá en función de una condición.
Son dos las sentencias que forman el grupo de las alternativas:
La sentencia if
La sentencia if tiene la forma siguiente:
if condición |
Las palabras if y then tienen que aparecer siempre. La condición es una expresión lógica. Y sentencia puede ser una sentencia simple o varias si están encerradas entre begin y end.
Para saber lo que hace esta sentencia basta con tener unos conocimientos mínimos del Inglés: Si (if) se cumple la condición, entonces (then) se ejecuta/n la/s sentencia/s.
Bueno, en realidad existen otras formas de escribir sentencias if. A continuación tienes dos más completas que la anterior:
if condición |
if condición1
then sentencia1
else if condición2
then sentencia2
else sentencia3
...
else sentenciaN
|
La palabra else significa sino y es la que marca las
sentencias que se ejecutarán cuando no se cumpla la condición.
nota: la sentencia que vaya antes de else no puede
finalizar con punto y coma (mira el siguiente ejemplo).
Veamos un ejemplo para comprender mejor la sentencia if:
program Chequeo_Signo;
var
Numero : real;
begin
writeln('Introduzca un numero: ');
readln(Numero);
if Numero >= 0.0
then writeln('El numero es positivo')
else writeln('El numero es negativo');
end.
|
El ejemplo es un programa muy sencillo que determina si un numero es positivo o negativo:
La sentencia case
La sentencia case al igual que las if permite elegir entre diferentes
alternativas. Tiene la estructura siguiente:
case selector of
lista_constantes1 : sentencia1;
lista_constantes2 : sentencia2;
...
lista constantesN : sentenciaN
else sentecia_Else
end;
|
Veamos un ejemplo:
program prueba_CASE;
var
Opcion : char;
...
begin
...
readln(Opcion);
case Opcion of
'1' : nuevaEntrada;
'2' : cambiarDatos;
'3' : borrarEntrada;
'0' : salir
else writeln('Opcion no valida!!')
end;
...
end.
|
En este ejemplo se presenta uno de los usos más típicos de la sentencia case: la creación de un menu de opciones. El código aquí representado podría formar parte de un programa que simulase una agenda de teléfonos. Y con este código lo que hacemos es elegir uno de entre varios procedimientos disponibles, como añadir un nuevo teléfono o borrar uno ya existente.
Por si no te quedó muy clara la sentencia if, a
continuación tienes un ejemplo que te ayudará. En la primera parte
del código que se muestra puedes introducir valores para tres variables:
a, b y c.
A continuación aparece una sentencia if que usa estas variables, y donde
también puedes elegir entre el operador and o el
operador or. Además puedes comprobar el resultado de la
ejecución pulsando el botón.
nota: lógicamente los valores que tienes que teclear
para las variables tienen que ser numéricos. Porque si introduces letras u
otros caracteres se mostrará un error.
Con las sentencias de control repetitivas puedes realizar algo varias veces sin tener que escribirlo
cada vez. Por ejemplo si quieres imprimir en pantalla los números
del 1 al 20 no tienes porque escribir 20 llamadas a writeln, basta con una y alguna
línea de código adicional. Sería algo como:
numero := 0;
haz lo siguiente 20 veces
begin
writeln('El valor es ',numero);
numero := numero + 1
end;
A las sentencias repetitivas también se las conoce como sentencias iterativas o
bucles porque permiten realizar una tarea varias veces. Dentro de un bucle
distinguimos dos partes:
Las sentencias iterativas se dividen en tres:
La sentencia for
La sentencia for es la única de las repetitivas que no depende de una
expresion. En su ejecución no es necesario chequear
ninguna condición. Veamos su sintaxis:
for var := inicial to final do begin
sentencia
end;
|
Lo que hace la sentencia for es bien sencillo: ejecuta lo que hay entre begin y end un número de veces igual a final-inicial+1 incrementando el valor de var en una unidad después de cada iteración.
Advertencias sobre la variable var
Veamos un ejemplo:
program prueba_FOR;
const
inicial = 0;
var
i : integer;
final : integer;
begin
write('Introduzca el valor FINAL: ');
readln(final);
for i:=inicial to final do begin
writeln('El valor actual es ',i)
end
end.
|
El código anterior representa un programa en el que se pide al usuario el valor final del bucle for, y a continuación se escriben en pantalla números desde cero hasta el valor introducido por el usuario.
La sentencia while
Así como la sentencia repetitiva for no depende de ninguna condición,
while si que depende de la evaluación de una
expresión lógica. Esta característica
también está presente en la sentencia repeat, por eso se les conoce como
bucles condicionales.
Como ya sabrás las expresiones lógicas sólo pueden devolver uno de dos posibles valores: true o false. Y las sentencias contenidas en el cuerpo del while se ejecutarán mientras la evaluación de la expresión devuelva cierto (true).
Veamos la sintaxis y un pequeño ejemplo:
while condicion do begin
sentencia
end;
|
program prueba_WHILE;
const
inicial = 0;
var
i : integer;
final : integer;
begin
write('Introduzca el valor FINAL: ');
readln(final);
i := inicial;
while i<=final do begin
writeln('El valor actual es ',i);
i := i + 1
end
end.
|
Con respecto a la sintaxis:
El ejemplo hace exactamente lo mismo que el que se presenta en la
sección del for.
La sentencia repeat
La sentencia de control repeat es casi igual a la while, en lo único que
difieren es en que el cuerpo de la primera se ejecutará al menos
una vez. Esto se debe a que en el while el chequeo de la
condición se realiza antes de ejecutar las sentencias, mientras que en
el repeat se ejecutan primero las sentencias y luego se chequea
la condición.
Lo que hace repeat es repetir las sentencias
hasta que se cumple una condición. Veamos su
sintaxis:
repeat
sentencia
until condicion;
|
Para aclarar un poco las ideas, veamos un ejemplo:
...
repeat
write('Quiere cambiar los datos (s/n)?');
readln(Resp);
if (Resp<>'s') and (Resp<>'n')
then writeln('Valor incorrecto');
until (Resp='s') or (Resp='n');
|
En el ejemplo tenemos una tarea muy común, que es solicitar una confirmación por parte del usuario. Pero en este caso estamos solicitando una respuesta de forma robusta, ya que si el usuario no teclea una de las posibles opciones entonces se le volverá a pedir la respuesta.
Por último comentar que para resolver la mayoría de los problemas es indistinto
utilizar while o repeat, aunque mi consejo
es que utilices siempre que puedas while y dejes repeat para los casos en los
que las sentencias se tengan que ejecutar al menos una vez.
nota: lo de que utilices siempre que puedas el while es
porque si te pasas a otro lenguaje de programación igual te llevas la desagradable
sorpresa de que no dispones de sentencia repeat.
Después de ver la parte teórica de los bucles pasemos a ver un ejemplo interactivo. Primeramente debes elegir valores para las variables inicial y final. A continuación tienes que elegir entre una de las tres sentencias repetitivas: for, while o repeat. Y para ver la ejecución tienes que pulsar el botón ejecutar.
Este ejemplo te ayudará a entender mejor las diferencias entre los tres tipos de bucles. Para ello, y después de elegir valores para las variables y el tipo de bucle, debes de pensar el resultado antes de pulsar el botón, así podrás comprobar si estás o no en lo cierto.
|
|
Inicio
|
Contenidos
|
Introducción
|
Estructura
|
Variables
|
| Tipos de datos | E/S de datos | Sentencias | Control del flujo | Progr. modular | |