12. TIPOS SIMPLES DEFINIDOS POR EL PROGRAMADOR En

Anuncio
UNIVERSIDAD TECNICA FEDERICO SANTA MARIA
DEPARTAMENTO DE ELECTRONICA
Programación en Pascal
Capítulo 12. Tipos simples definidos por el programador.
12. TIPOS SIMPLES DEFINIDOS POR EL PROGRAMADOR
En Pascal existe la posibilidad de definir tipos de datos simples. Se tienen dos formas: una,
la definición de un nuevo tipo por enumeración de sus valores posibles; la otra, por definición
de un subrango de un tipo definido previamente.
En ambos casos, los tipos son ordinales, escalares, no estructurados, estáticos.
12.1. Tipo definido por enumeración.
12.1.1. Valores y Sintaxis.
Se define un conjunto ordenado de valores, por la enumeración de los identificadores que
denotan esos valores.
<tipo enumerativo> ::= '(' { <identificador>* ',' } ')'
Ejemplos:
var
dia:(lunes,martes,miercoles,jueves,viernes,sabado,domingo);
mes:(ene,feb,mar,abr,may,jun,jul,ago,sep,oct,nov,dic);
La relación de orden queda dada por el orden en la lista.
12.1.2. Manipulación.
Pueden aplicarse las funciones estándar: ord, succ, pred. También los operadores
relacionales. Está definida la asignación.
Ejemplos:
ord(feb);
succ(jul);
ene<dic;
mes:=ene;
Prof. Leopoldo Silva Bijit.
toma el valor 1.
toma valor ago.
toma valor true.
a mes se asigna valor ene.
07-07-2003
159
UNIVERSIDAD TECNICA FEDERICO SANTA MARIA
DEPARTAMENTO DE ELECTRONICA
Programación en Pascal
Capítulo 12. Tipos simples definidos por el programador.
No pueden emplearse las instrucciones de entrada y salida estándar (read y write) para leer
variables y escribir expresiones de tipo enumerativo. Si se desea hacerlo, deberán escribirse
procedimientos para realizar estas acciones.
En general, pueden definirse operaciones para manipular valores de tipo enumerativo
mediante procedimientos.
12.1.3. Ventajas del tipo enumerativo.
La mayor ventaja, debida a la definición de este tipo de datos, es el aumento de la
legibilidad del texto del programa producto de la abstracción. Puede observarse que con el
uso de un código, basado en números enteros, se logra el mismo objetivo que con un tipo
enumerativo. Por ejemplo, se podría haber asociado un 0 con ene, 1 con feb y así
sucesivamente hasta llegar a 11 para dic. Pero en el texto aparecerán una serie de constantes
enteras (los números del código), de las cuales no siempre se tendrá una clara interpretación.
Este efecto aumenta cuanto más complejo sea el código que representa la situación.
Otras ventajas tienen que ver con la capacidad de los computadores de chequear la
compatibilidad de los tipos. En el ejemplo anterior, si se hubiera empleado códigos numéricos,
el valor 1 podría ser un entero, o estar asociado a martes, o a feb.
En el Report se ha definido este tipo como escalar, lo cual ha producido confusiones. Es
mejor la denominación: por enumeración.
12.2. Tipos por subrango.
12.2.1. Valores.
Si se conoce, o supone, que una variable adoptará valores solamente dentro de un cierto
rango contiguo de un tipo determinado, puede ser declarada como un tipo subrango.
Cada tipo por subrango tiene un tipo base, que es el tipo de los valores que él toma. Y
todos los operadores y manipulación definidos para el tipo base son también aplicables al de
subrango. La única restricción es la asignación, que sólo permite copiar valores pertenecientes
al subrango.
Prof. Leopoldo Silva Bijit.
07-07-2003
160
UNIVERSIDAD TECNICA FEDERICO SANTA MARIA
DEPARTAMENTO DE ELECTRONICA
Programación en Pascal
Capítulo 12. Tipos simples definidos por el programador.
12.2.2. Sintaxis.
<tipo subrango> ::=<cota inferior> '..' <cota superior>
Donde las cotas son constantes de igual tipo (del tipo base) y debe cumplirse:
cota inferior<cota superior
Ejemplos:
var letra :'A'..'Z';
{subrango de char}
dígito:'0'..'9';
indice: 1..100 ; {subrango de integer}
No pueden definirse subrangos de reales, ya que el tipo por subrango es ordinal.
12.2.3. Ventajas del tipo por subrango.
Además de las ventajas mencionadas para el tipo por enumeración, esta definición ofrece
resguardo adicional de protección contra asignaciones de valor fuera de rango, y por lo tanto
ayuda en la detección de errores. Debe notarse que estos chequeos se efectúan en tiempo de
ejecución, y no pueden ser detectados por la sola inspección del texto. Además posibilitan
una representación interna más adecuada, y en ciertos casos puede lograrse un ahorro de
memoria.
Ejemplo: var a:1..10; b:0..30;
La asignación a:=11 presenta incompatibilidad, detectable en el texto. Pero a:=b puede
aceptarse, ya que ambos son subrangos de enteros; en este caso, se detectan errores sólo en
ejecución, si se intenta asignar a la variable a, por ejemplo, un valor fuera su rango.
Prof. Leopoldo Silva Bijit.
07-07-2003
161
Descargar