Una variable "Boolean" (llamadas así en honor al matemático George Boole) es una variable lógica, que puede valer TRUE (verdadero) o FALSE (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
*)
Ejercicio propuesto 2.2.1: Crea un programa que cree una variable de tipo boolean, le asigne el valor TRUE y luego muestre dicho valor en pantalla.
Ejercicio propuesto 2.2.2: Crea un programa que pida al usuario un número real y diga si es cero o no, usando una variable boolean.
Ejercicio propuesto 2.2.3: Crea un programa que pida al usuario un número entero y diga si es positivo, negativo o cero, usando dos variables boolean (esPositivo y esNegativo).
Ejercicio propuesto 2.2.4: Crea un programa que pida al usuario un número entero y diga si es positivo, negativo o cero, usando tres variables boolean (esPositivo, esNegativo y esCero).
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;
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).
Ejercicio propuesto 2.3.1: Crea un programa que pida al usuario un símbolo y diga si es una letra en mayúsculas, una letra en minúsculas o algún otro símbolo.
Ejercicio propuesto 2.3.2: Crea un programa que pida al usuario una letra y diga si es una vocal o una consonante.
Ejercicio propuesto 2.3.3: Crea un programa que pida al usuario un número entero del 1 al 3, y escriba en pantalla "Uno", "Dos", "Tres" o "Número incorrecto" según corresponda.
Ejercicio propuesto 2.3.4: Crea un programa que pida al usuario un número, una operación (+, -, * o /) y otro número, y muestre el resultado de aplicar esa operación a esos dos números.