Tipos simples en Pascal
Hasta aquí, hemos considerado los tipos simples estándar integer, real, boolean,char y byte proporcionados por Turbo Pascal.
Estos tipos de datos pueden ser utilizados para declarar variables numéricas, de caracteres y/o lógicas. Sin embargo, es posible que ninguno de ellos satisfaga los requerimientos de un determinado problema, haciéndose necesaria la utilización de otros tipos como:
TIPO SUBRANGO
El tipo de dato más simple que se puede definir en un programa Pascal es el tipo subrango o intervalo. Estos tipos son útiles, sobre todo por la facilidad que ofrecen para verificar automáticamente errores. Un tipo subrango se define de un tipo ordinal, especificando dos constantes de ese tipo, que actúan como límite inferior y superior del conjunto de datos de ese tipo. Un tipo subrango es un tipo ordinal y sus valores se ordenan de igual modo que en el tipo patrón de que se deducen.
Ejemplos:
1. 0..9 – este tipo subrango consta de los elementos 0,1,2,3,4,5,6,7,8,9
2. ‘0’..’9′ – este subrango consta de los caracteres ‘0’ a ‘9’
3. ‘A’..’F’ – este subrango consta de los caracteres ‘A’ a ‘F’
Se pueden crear variables cuyos valores se restrinjan a un subrango dado. Las declaraciones de tipo subrango se sitúan entre las declaraciones de constantes y de variables.
Formato:
typeNombre = límite inferior .. límite superior |
Ejemplos:
{$R+} {Directiva de compilador R} Program Positivos; Uses Crt; {El siguiente programa realiza una validación para que sólo se acepten valores positivos entre 0 y 32767 por medio de un tipo subrango}Type NumPositivo = 0..MaxInt; Var numero: NumPositivo; Begin ClrScr; {numero:=-1; (está instrucción provocaría un error} Write('Escribe un número entero positivo : '); ReadLn(numero); ReadKeyend.
Nota: Puesto que Turbo Pascal no siempre produce un error cuando el valor de un tipo subrango está fuera de su rango definido. Sin embargo se puede tener la posibilidad de visualizar dichos errores mediante la directiva de compilador:
{$R+} activada {$R-} desactivada
Por default esta desactivada. Sólo se debe usar durante la fase de depuración.
TIPOS ENUMERADOS
En estos tipos de datos simples, se listan los identificadores que serán asociados con cada valor a utilizar.
Por ejemplo:
Type dias_semana =(lunes,martes,miercoles,jueves, viernes,sabado,domingo); colores_baraja =(espada,oro,basto,copa);
De igual forma las variables pueden ser de tipo enumerado:
Var dias : dias_semana; baraja: colores_baraja;
Formato:
Type nombre = (constante1,constante2,...,constanteN) |
Los datos de tipo colores_baraja sólo podrán tomar los valores denotados por :espada,oro, basto, copa . La posición de cada valor en la lista define su orden, por lo que para el tipo dias_semana tenemos que :
domingo > viernes da como resultado true sabado < martes da como resultado false jueves <> miercoles da como resultado true
Características:
- Un tipo de dato enumerado es un tipo ordinal cuyo orden se indica por la disposición de los valores en la definición.
- El número de orden de cada elemento comienza en 0 para el primer elemento.
- Las variables de tipo enumerado sólo pueden tomar valores de estos tipos.
- Los únicos operadores que pueden acompañar a los tipos ordinales son los operadores de relación y asignación.
A los valores de los tipos enumerados se les pueden aplicar las funciones estándarsucc (de sucesor),pred(de predecesor) y ord (de ordinal).
En el caso del valor máximo de un tipo enumerado, succ no está definido, y, para su valor mínimo, no está definidopred.
La función estándar ordes aplicable a los argumentos que sean valores de tipo enumerado. La relación biunívoca se da entre los valores del tipo y los enteros comprendidos entre 0 y N-1, donde N es la cardinalidad del tipo enumerado.
El tipo estándarboolean es equivalente a un tipo enumerado de la forma:
boolean = ( false, true);
Aplicación de las funciones Ord, Pred, Succ | ||||
Argumento(x) | Tipos de datos | Ord(x) | Pred(x) | Succ(x) |
lunes | dias_semana | 0 | Indefinido | martes |
oro | colores_baraja | 1 | espada | basto |
22 | Integer | 22 | 21 | 23 |
0 | Integer | 0 | -1 | 1 |
-20 | Integer | -20 | -21 | -19 |
MaxInt | Integer | MaxInt | MaxInt-1 | Indefinido |
false | Lógico | 0 | Indefinido | true |
Ejemplo:
Program Dias_Semana; Uses Crt; {El siguiete programa muestra los dias de la semana por medio de tipos enumerados}Type Dia_Semana = (Lunes,Martes,Miercoles,Jueves, Viernes,Sabado,Domingo); Var dias: Dia_Semana; i : byte; Begin ClrScr; dias:=lunes; for i:=1 to 7 do begin case dias of Lunes : WriteLn('Lunes '); Martes : WriteLn('Martes '); Miercoles: WriteLn('Miercoles'); Jueves : WriteLn('Jueves '); Viernes :WriteLn('Viernes '); Sabado : WriteLn('Sabado '); Domingo : WriteLn('Domingo ') end; dias:=succ(dias) end; ReadKeyend.