Vous êtes sur la page 1sur 11

Qu es controlar el flujo?

Sentencias de control alternativas


La sentencia if La sentencia case

Un ejemplo con las alternativas Sentencias de control repetitivas


La sentencia for La sentencia while La sentencia repeat

Un ejemplo con las repetitivas

Qu es controlar el flujo?
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:

La sentencia if La sentencia case

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:

La sentencia for La sentencia while La sentencia repeat

Volver al inicio de la pgina Pasar al siguiente apartado sobre las sentenciasalternativas

Sentencias de control alternativas


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 case

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

condicin sentencia1 sentencia2

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

if Numero >= 0.0 then writeln('El


positivo')

numero es

else
negativo'); end.

writeln('El numero es

El ejemplo es un programa muy sencillo que determina si un numero es positivo o negativo:


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;

Las palabras case, of y end tienen que aparecer siempre. 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 o o o

Se mira si el valor del selector aparece en alguna de las listas de constantes Si aparece, entonces se ejecuta la sentencia correspondiente Si no aparece y hay una clusula else entonces se ejecuta la sentencia que la sigue 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

Un ejemplo sobre las sentencias alternativas


Por si no te qued muy clara la sentencia if, a continuacin tienes un ejemplo que te ayudar. En la primera parte del cdigo que se muestra puedes introducir valores para tres variables: a, b y c. A continuacin aparece una sentencia if que usa estas variables, y donde tambin puedes elegir entre el operador and o el operador or. Adems puedes comprobar el resultado de la ejecucin pulsando el botn. nota: lgicamente los valores que tienes que teclear para las variables tienen que ser numricos. Porque si introduces letras u otros caracteres se mostrar un error.
Volver al inicio de la pgina Pasar al siguiente apartado sobre las sentencias repetitivas

Sentencias de control repetitivas


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 nmeros del 1 al 20 no tienes porque escribir 20 llamadas awriteln, basta con una y alguna lnea de cdigo adicional. Sera algo como:

numero := 0;

haz lo siguiente 20 veces


begin writeln('El valor es ',numero); numero := numero + 1 end;

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

Las sentencias iterativas se dividen en tres:


La sentencia for La sentencia while La sentencia repeat

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

for i:=inicial to begin end


end.

final

do

writeln('El valor actual es ',i)

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: while begin
condicion

do

program prueba_WHILE; const inicial = 0;

sentencia end;

var i : integer; final : integer; begin write('Introduzca el valor FINAL: '); readln(final); i := inicial;

while begin

i<=final

do

writeln('El valor actual es ',i); i := i + 1

end
end.

Con respecto a la sintaxis:


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

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

Un ejemplo sobre las sentencias repetitivas


Despus de ver la parte terica de los bucles pasemos a ver un ejemplo interactivo. Primeramente debes elegir valores para las variables inicial y final. A continuacin tienes que elegir entre una de las tres sentencias repetitivas: for, while o repeat. Y para ver la ejecucin tienes que pulsar el botn ejecutar. 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.

Vous aimerez peut-être aussi