15 septiembre 2014

Pascal - 4d1: Subrangos

4.4. Otros tipos de datos: conjuntos, enumerados y subrangos

Vamos a ver algún otro tipo de datos, quizá menos utilizado que los anteriores, pero que ayudan a que nuestros programas sean más elegantes y más legibles.

4.4.1. Subrangos

Podemos indicar los posibles valores que puede tomar una variable, indicándolo en forma de subrango, al igual que se hace con los índices de un array:
 
var
  dia: 1..31;
 
Un ejemplo completo podría ser así:
(* SUBRANGO1.PAS, Variables de tipo "subrango"  *)
(* Parte de CUPAS5, por Nacho Cabanes           *)
 
program SubRango1;
 
var
  dia: 1..31;
 
begin
    write('Introduce el dia: ');
    readLn(dia);
 
    writeLn('Has tecleado ', dia);
end. 
 
(* 
Ejemplo de ejecucion 1:
Introduce el dia: 12
Has tecleado 12
 
Ejemplo de ejecucion 2:
Introduce el dia: 45
Has tecleado 45
*)
 
Pero hay que tener una precaución: estas construcciones hacen nuestro programa más legible, pero es frecuente que el compilador no haga comprobaciones para asegurarse de que los valores realmente deban estar en ese rango, de modo que se nos permitirá introducir valores mayores o menores, como se ve en ese ejemplo.
Como alternativa, en algunos compiladores podemos forzar que se comprueben errores de valores fuera de rango en tiempo de ejecución, de modo que el programa se interrumpiría con un código de error (que más adelante veremos cómo interceptar) si ese valor introducido no es correcto. En Turbo Pascal y Free Pascal, esto se consigue incluyendo en nuestro programa la directiva {$R+}, así:
(* SUBRANGO2.PAS, Variables de tipo "subrango"  *)
(* Version con comprobacion de rangos           *)
(* Parte de CUPAS5, por Nacho Cabanes           *)
 
{$R+}
 
program SubRango2;
 
var
  dia: 1..31;
 
begin
    write('Introduce el dia: ');
    readLn(dia);
 
    writeLn('Has tecleado ', dia);
end. 
 
(* Ejemplo de ejecucion:
Introduce el dia: 45
Runtime error 201 at $080480FB
  $080480FB
  $08063733
*)