principal contenidos <-- --> test editor indice


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


Volver al inicio de la página
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 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
then sentencia

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
then sentencia1
else sentencia2
   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.


Volver al inicio de la página
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 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.

Volver al inicio de la página
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 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.



Volver al inicio de la página
Pasar al siguiente ejemplo sobre las sentencias repetitivas

 











Un ejemplo sobre las sentencias repetitivas

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.



Volver al inicio de la página
Volver al apartado anterior sobre sentencias repetitivas

 

| Inicio | Contenidos | Introducción | Estructura | Variables |
| Tipos de datos | E/S de datos | Sentencias | Control del flujo | Progr. modular |