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