31 marzo 2014

Pascal - 2b: booleanos, case

2.2. Variables booleanas

Una variable "Boolean" (llamadas así en honor al matemático George Boole) es una variable lógica, que puede valer TRUE (verdadero) oFALSE (falso), y se pueden usar para hacer que las condiciones resulten más legibles:
(* IF5.PAS, "if" y booleanos             *)
(* Parte de CUPAS5, por Nacho Cabanes    *)
 
program if5;
 
var
    numero: integer;
    esPositivo: boolean;
 
begin
    writeLn('Escriba un numero');
    readLn(numero);
    esPositivo := numero>0;
    if esPositivo then writeLn('El numero es positivo');
end. 
 
(* Ejemplo de ejecucion:
Escriba un numero
2
El numero es positivo
*)
 


2.3. Muchos posibles valores (case)

Cuando queremos comprobar entre varios posibles valores, podemos hacerlo con muchos "if" seguidos, pero puede resultar pesado y hacer que el programa sea poco legible. Hay una alternativa que resulta mucho más cómoda en esas ocasiones: la orden case. Su sintaxis es
case expresion of 
  caso1: sentencia1; 
  caso2: sentencia2; 
  ... 
  casoN: sentenciaN; 
end;
o bien, si queremos indicar también lo que se debe hacer si no coincide con ninguno de los valores que hemos enumerado, añadimos la cláusula opcional else:
case expresion of 
  caso1: sentencia1; 
  caso2: sentencia2; 
  ... 
  casoN: sentenciaN; 
  else
    otraSentencia;</tt> 
end;
(Nota: Esta es la sintaxis empleada por Turbo Pascal y Free Pascal. En Pascal estándar, esta construcción se empleaba con otherwise en lugar de "else" para expresar "en caso contrario".
Veamos un ejemplo:
(* CASE1.PAS, Condiciones múltiples con "case" *)
(* Parte de CUPAS5, por Nacho Cabanes          *)
 
program case1;
 
var
    letra: char;
 
begin
    WriteLn('Escriba un simbolo');
    ReadLn(letra);
    case letra of
        ' ':                 WriteLn('Un espacio');
        'A'..'Z', 'a'..'z':  WriteLn('Una letra');
        '0'..'9':            WriteLn('Un digito');
        '+', '-', '*', '/':  WriteLn('Un operador');
    else  { otherwise en SURPAS y otros compiladores }
        WriteLn('No es espacio, ni letra, ni digito, ni operador');
    end;
end. 
 
(* Ejemplo de ejecucion:
Escriba un simbolo
a
Una letra
*)
 
Una precaución: la "expresión" debe pertenecer a un tipo de datos con un número finito de elementos, como "integer" o "char", pero no "real".
Y como se ve en el ejemplo, los "casos" posibles pueden ser valores únicos, varios valores separados por comas, o un rango de valores separados por .. (como los puntos suspensivos, pero sólo dos).
(Como siempre, puedes ver la versión más actualizada en la página oficial del curso)