Documente Academic
Documente Profesional
Documente Cultură
Controlar el flujo es determinar el orden en el que se ejecutarn las instrucciones en nuestros programas. Si no existiesen las sentencias de control entonces los programas se ejecutaran de forma secuencial, empezaran por la primera instruccin e iran una a una hasta llegar a la ltima. Pero, obviamente este panorama sera muy malo para el programador. Por un lado, en sus programas no existira la posibilidad de elegir uno de entre varios caminos en funcin de ciertas condiciones (sentenciasalternativas). Y por el otro, no podran ejecutar algo repetidas veces, sin tener que escribir el cdigo 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 tambin son conocidas como sentencias selectivas porque permiten seleccionar uno de entre varios caminos por donde seguir la ejecucin del programa. En algunos casos esta seleccin viene determinada por la evaluacin de una expresion lgica. Este tipo de sentencias se dividen en dos:
A las sentencias repetitivas se les conoce tambin 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 funcin de una condicin. Son dos las sentencias que forman el grupo de las alternativas:
La sentencia if
La sentencia if tiene la forma siguiente: if
condicin sentencia
then
Las palabras if y then tienen que aparecer siempre. La condicin es una expresin lgica. Y sentencia puede ser una sentencia simple o varias si estn encerradas entre begin y end. Para saber lo que hace esta sentencia basta con tener unos conocimientos mnimos del Ingls: Si (if) se cumple la condicin, entonces (then) se ejecuta/n la/s sentencia/s. Bueno, en realidad existen otras formas de escribir sentencias if. A continuacin tienes dos ms completas que la anterior: if condicin1 then sentencia1 else if condicin2 then sentencia2 else sentencia3
...
if
then else
else
sentenciaN
La palabra else significa sino y es la que marca las sentencias que se ejecutarn cuando no se cumpla la condicin.
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);
Se lee de la entrada estndar (teclado) un valor que se almacena en la variable real Numero. A continuacin se determina si el numero es mayor o igual que cero. Si lo es, entonces se escribe en pantalla el mensaje El numero es positivo, sino se escribe El numero es 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;
El selector tiene que ser una constante, una variable, o una expresin, pero su tipo debe ser ordinal. La palabra else y su correspondiente sentencia es opcional, y en caso de ponerla indica la sentencia que se ejecutar sino coincide el selector con ninguna de las listas de constantes. La lista de constantes se compone de o uno o ms valores constantes. En caso de ser ms de uno se separarn por comas. Aunque tambin existe la posibilidad de especificar un rango de valores como: 0..9 La forma que tiene de trabajar es la siguiente: o Se mira si el valor del selector aparece en alguna de las listas de constantes o Si aparece, entonces se ejecuta la sentencia correspondiente o Si no aparece y hay una clusula else entonces se ejecuta la sentencia que la sigue o Si no aparece y no hay else entonces no se hace nada
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 ms tpicos de la sentencia case: la creacin de un menu de opciones. El cdigo aqu representado podra formar parte de un programa que simulase una agenda de telfonos. Y con este cdigo lo que hacemos es elegir uno de entre varios procedimientos disponibles, como aadir un nuevo telfono o borrar uno ya existente.
Volver al inicio de la pgina Pasar al siguiente ejemplo sobre las sentencias alternativas
A las sentencias repetitivas tambin se las conoce como sentencias iterativas o bucles porque permiten realizar una tarea varias veces. Dentro de un bucle distinguimos dos partes:
seccin de control: es donde se determina si se ejecutar y el nmero de veces que lo har el cuerpo del bucle cuerpo del bucle: es el que contiene las sentencias a ejecutar
La sentencia for
La sentencia for es la nica de las repetitivas que no depende de una expresion. En su ejecucin no es necesario chequear ninguna condicin. Veamos su sintaxis:
for begin
var
:=
inicial
to
final
do
sentencia
end;
Lo que aparece en azul es obligatorio y no se puede sustituir por otras palabras var es una variable ordinal, casi siempre de tipo entero inicial y final son valores constantes, recordar que incluso pueden ser expresiones si devuelven un valor de igual tipo que var Y sentencia es una o ms sentencias separadas por punto y coma. Si es una sla sentencia no es necesario inclur las palabras reservadas begin y end
Lo que hace la sentencia for es bien sencillo: ejecuta lo que hay entre begin y end un nmero de veces igual a final-inicial+1 incrementando el valor de var en una unidad despus de cada iteracin. Advertencias sobre la variable var
El valor que tiene al terminar la sentencia for es indefinido No se puede cambiar su valor en el cuerpo del bucle No pasarla como parmetro por referencia a una funcin o procedimiento
Veamos un ejemplo:
program prueba_FOR; const inicial = 0; var i : integer; final : integer; begin write('Introduzca el valor FINAL: '); readln(final);
El cdigo anterior representa un programa en el que se pide al usuario el valor final del bucle for, y a continuacin se escriben en pantalla nmeros desde cero hasta el valor introducido por el usuario.
La sentencia while
As como la sentencia repetitiva for no depende de ninguna condicin, while si que depende de la evaluacin de una expresin lgica. Esta caracterstica tambin est presente en la sentencia repeat, por eso se les conoce como bucles condicionales. Como ya sabrs las expresiones lgicas slo pueden devolver uno de dos posibles valores: true o false. Y las sentencias contenidas en el cuerpo del while se ejecutarn mientras la evaluacin de la expresin devuelvacierto (true). Veamos la sintaxis y un pequeo ejemplo:
program prueba_WHILE; const inicial = 0; var i : integer; final : integer;
while begin
condicion
do
sentencia end;
while begin
i<=final
do
end
end.
Las palabras en azul son obligatorias y no se pueden sustituir condicin es una expresin que tiene que devolver true o false
Y sentencia es una o ms sentencias separadas por punto y coma. Si es una sla sentencia no es necesario inclur las palabras reservadas begin y end
El ejemplo hace exactamente lo mismo que el que se presenta en la seccin 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 condicin se realiza antes de ejecutar las sentencias, mientras que en el repeat se ejecutan primero las sentencias y luego se chequea la condicin. Lo que hace repeat es repetir las sentencias hasta que se cumple una condicin. Veamos su sintaxis: repeat
sentencia
until
condicion;
repeat y until deben aparecer siempre A diferencia de while, cuando repeat lleva ms de una sentencia no necesitan ir entre begin y end Como siempre la condicin es una expresin que tiene que devolver true o false
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 comn, que es solicitar una confirmacin 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 mayora 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 programacin igual te llevas la desagradable sorpresa de que no dispones de sentencia repeat.
Volver al inicio de la pgina Pasar al siguiente ejemplo sobre las sentencias repetitivas
Este ejemplo te ayudar a entender mejor las diferencias entre los tres tipos de bucles. Para ello, y despus de elegir valores para las variables y el tipo de bucle, debes de pensar el resultado antes de pulsar el botn, as podrs comprobar si ests o no en lo cierto.