TURBO PASCAL
  3) Case
 
 



TURBO PASCAL


3) Case:


Co
mo se ha visto, la sentencia If presenta una forma de tomar decisiones basándose en el resultado de evaluar una expresión condicional. Esto, por supuesto, tiene limitaciones; a veces es necesario evaluar una expresión aritmética en vez de lógica, y tomar varias decisiones según los distintos valores. Si hay muchos valores diferentes posibles, usar If para esto puede ser tedioso.

Es por esto que la sentencia Case ejecuta condicionalmente uno o más bloques de código de acuerdo con el resultado de una expresión aritmética que produzca un número entero. Su sintaxis es:

Case <expr> Of
    
<val1> : <bloq1>;
    
<val2> : <bloq2>;
   
 . . .
     <val-n> : <bloq-n>;
Else
    
<bloq>;
End;

 

Donde <expr> es la expresión a evaluar y <val1>, <val2>, ... <val-n> son valores de entre los que puede tomar esa expresión, y para cada valor se ejecutará el bloque correspondiente. Como los valores pueden repetirse, se pueden ejecutar uno o más de los bloques, o bien ninguno.

Nótese que el Case termina siempre con un End;, a pesar de que no tiene Begin.

Nótese que la parte del Else es opcional, al igual que en el If, y su bloque asociado sólo se ejecuta si la expresión toma un valor para el cual no se ha especificado un bloque de código. Sin embargo, si se usara el Else, el último bloque sobre él debe llevar un punto y coma al final de su última línea, a diferencia de como es en el If.

Veamos el siguiente ejemplo:

Program Case;
Uses
     CRT;
Var
    
opcion:char;

Begin
     CLRSCR;
     Writeln ('
Opción: 1 ');
     Writeln ('
Opción: 2 ');
     Writeln ('
Opción: 3 ');
     Write ('
Escoge una opción: ');
     Readln (
opcion);
     Case
opcion Of
          '
1': Writeln ('Escogiste la opción: 1');
          '
2': Writeln ('Escogiste la opción: 2');
          '
3': Writeln ('Escogiste la opción: 3');
     Else
          Writeln ('
Escogiste una opción no valida');
     End;
     Readln;
End.

El ejemplo anterior nos presenta un pequeño menú con 3 opciones a escoger, si escogemos la opción 1, y por tanto le damos a la variable opcion el valor de uno, entonces se ejecutaron las instrucciones que corresponden al caso de que la variable sea igual a 1, si escogemos la opción 2, entonces se ejecutarán las instrucciones que corresponden al caso de que la variable sea igual a 2, etc.

Dentro de cada caso que tenga la expresión podemos ejecutar una o más instrucciones, incluyendo bloques If y anidar bloques Case si nos fuera necesario.

Otro ejemplo:

Program Directorio;
Uses
     Crt;
Var
    
Piso: Integer;
    
Negocio: String;
Begin
     Write ('
Número de piso: ');
     Readln (
Piso);
     Case
Piso Of
         1: Negocio:= 'Microsoft';
         2: Negocio:= 'Compaq';
     End;
     If
Negocio <> '' Then
         Writeln ('
El negocio en el piso ', Piso, ' es: ', Negocio)
     Else
         Writeln ('
Este edificio sólo tiene dos pisos');
End.

El programa trabaja como sigue: según sea el piso escogido, se guardan los nombres de los negocios en ese piso en una variable de tipo String. Luego, se consulta el valor de esa variable: si es nula (''), no se le asignó valor en el Case y entonces el número de piso no es válido y se imprime el mensaje del Else. En caso contrario, se muestran los negocios en ese piso.

Sin embargo, esta no es más que una pequeña muestra en el poder del Case. En efecto, una extensión a su sintaxis de valores le permite ejecutar un mismo bloque de código para un rango de valores de la expresión:

Case X Of
    
1..5 : Write ('Entre 1 y 5');
    
7 : Write ('Siete');
End;


La idea es colocar dos expresiones separadas por punto punto (..); si el valor de la expresión evaluada por el Case (en este caso el valor de la variable X) está comprendido en este rango, se ejecuta este bloque.

Una última consideración sobre el Case es que la expresión a ser evaluada debe producir siempre un resultado entero, o un carácter:

Case X Of
     '
A'..'Z', 'a'..'z': Write ('Letra');
     '
0'..'9' : Write ('Número');
Else
     Write ('
Carácter especial');
End;


Aquí a es una variable del tipo Char. Como se ve además en este ejemplo, se pueden colocar más de un rango en un solo bloque, como se ha hecho con las letras (ya que la computadora interpreta las mayúsculas y las minúsculas de formas distintas).

Otro ejemplo:

Program Case;
Uses
     CRT;
Var
    
letra:char;

Begin
     CLRSCR;
     Write ('
Escriba un símbolo: ');
     Readln (
letra);
     Case
letra Of
          ' ': Writeln ('
Un espacio');
          '
A'..'Z', 'a'..'z': Writeln ('Una letra');
          '
0'..'9': Writeln ('Un dígito');
          '
+', '-', '*', '/': WriteLn('Un operador');
     Else
          Writeln ('
No es espacio, ni letra, ni dígito, ni operador');
     End;
     Readln;
End.

Otro ejemplo:

Program Areas;
Uses
     CRT;
Var
    
area,L,B,N:real;
    
opcion:integer;

Begin
     CLRSCR;
     Writeln ('
1.- Area Triangulo');
     Writeln ('
2.- Area Rectángulo');
     Writeln ('
3.- Area Cuadrado');
     Writeln ('
4.- Salir');
     Write ('
Ingrese opción: ');
     Readln (
opcion);
     Case
opcion Of
         
1: Begin
                    Write ('
Ingrese base: ');
                    Readln (
B);
                    Write ('
Ingrese altura: ');
                    Readln (
N);
                   
area:=(B*N)/2;
                    Writeln ('
El Area es: ',area:8:4);
               End;
         
2: Begin
                    Write ('
Ingrese base: ');
                    Readln (
B);
                    Write ('
Ingrese altura: ');
                    Readln (
N);
                   
area:=B*N;
                    Writeln ('
El Area es: ',area:8:4);
               End;
         
3: Begin
                    Write ('
Ingrese lado: ');
                    Readln (
L);
                   
area:=Sqr(L);
                    Writeln ('
El Area es: ',area:8:4);
               End;
         
4: Writeln ('Hasta luego');
     Else
          Writeln ('
Opcion Invalida');
     End;
     Readln;
End.

 

 

 
  Hoy habia 1 visitantes (1 clics a subpáginas) ¡Aqui en esta página!  
 
Este sitio web fue creado de forma gratuita con PaginaWebGratis.es. ¿Quieres también tu sitio web propio?
Registrarse gratis