Está en la página 1de 5

10

Despus de la intuicin de algunas proposiciones simples, cuando sacamos de ellas otra conclusin, es til recorrer las mismas proposiciones en un movimiento continuo y completamente ininterrumpido del pensamiento, reflexionar en sus diversas relaciones mutuas y concebir de manera distinta varias de ellas a la vez, en la medida de lo posible; de esta manera, en efecto, nuestro conocimiento se hace mucho ms cierto y se aumenta sobre todo la extensin de nuestro espritu. Ren Descartes Reglas para la direccin de la mente Regla XI - 1628. Si bien el lenguaje Pascal en todas sus versiones ofrece una buena cantidad de tipos de datos, stos no siempre son suficientes para describir ideas o conceptos que no fueran fcilmente representables mediante los tipos predefinidos: recuerde que un programa manipula smbolos y que estos representan ideas que pueden ser numricas, alfanumricas, lgicas o abstractas. Por ello, el lenguaje permite al programador definir tipos de datos adicionales a los existentes; ello facilita la manipulacin de instrucciones dado que permite otra gama de conexiones entre las ideas del programador y los elementos de construccin de programas.

10.1 Declaracin de Tipo


Como toda otra declaracin, sta se realiza en la zona destinada a ello, de manera similar a la declaracin de variables. Comienza con la palabra reservada TYPE y puede estar ubicada en cualquier lugar de la zona antes o despus de otras declaraciones siempre y cuando las referencias a un tipo particular declarado sean posteriores a su declaracin. Se permite tambin la declaracin de tipos antes y despus de otras declaraciones, ms no as la repeticin de la declaracin de un mismo tipo. Existen bsicamente cuatro clases de declaraciones de tipos: tipos alias, tipos enumerados, tipos subrango y tipos estructurados. Cada una de ellas tiene caractersticas particulares, que se irn viendo ms adelante, pero todas coinciden en la estructura bsica de la declaracin: TYPE NOMBRE DEL TIPO = DEFINICIN DEL TIPO; donde NOMBRE DEL TIPO corresponde a un identificador estndar de Pascal y su definicin depende de la clase que se trate. En este captulo se vern los tres primeros, dejando los tipos estructurados para otros captulos.

resultando entonces la existencia de un tipo particular con dos o ms nombres. Esta declaracin se realiza de la siguiente manera: TYPE NOMBRE DEL TIPO = TIPO;

Ejemplo 10-1
La siguiente declaracin de tipo Alias: Type Mis_Reales = Extended; hara posible la existencia de dos nombres para el tipo Extended de tal manera que la siguiente declaracin de variables: Var X,Y: Mis_Reales; Z,T: Extended; provocara la existencia de cuatro variables de ese tipo, es decir, que las variables X e Y seran del mismo tipo que las variables Z y T. De igual manera permitira la construccin de un encabezado de procedimiento como el siguiente: Procedure Uno(A,B: Mis_Reales); y de una invocacin del mismo como esta: Uno(Z,T); Otras declaraciones de tipos Alias podran ser:

10.2 Tipos alias


Se declara un tipo alias cuando se desea utilizar un identificador distinto al identificador estndar de un tipo,

Type Pocos_Enteros Enteros_con_signo Enteros_sin_signo Monetario

= = = =

Byte; Longint; Longword; Currency;

Pag. 10-2

Cap. 10: Definicin de Tipos

Cadena

= String;

Se declara tambin un tipo alias cuando se necesita crear un tipo equivalente a otro. En ese caso se utiliza la siguiente declaracin: TYPE NOMBRE DEL TIPO = TYPE TIPO;
Note la repeticin de la palabra TYPE

As, se estara creando un tipo nuevo que, si bien es equivalente a uno ya existente, sera adicional al total de tipos disponibles en el programa. Constantes, variables y expresiones de ambos tipos seran totalmente compatibles.

Ejemplo 10-2
La siguiente declaracin de tipo alias: Type Mis_Reales = Type Extended; hara posible la existencia de un tipo adicional con las caractersticas del tipo Extended, de tal manera que la siguiente declaracin de variables: Var X,Y: Mis_Reales; Z,T: Extended; definira ahora la existencia de dos pares de variables de distinto tipo, es decir, que las variables X e Y seran de un tipo y las variables Z y T seran de otro, pero ambos tipos compatibles. Otras declaraciones de tipos Alias podran ser: TYPE TPocos_Enteros TEnteros_con_signo TEnteros_sin_signo TMonetario TCadena = = = = = Type Type Type Type Type Byte; Longint; Longword; Currency; String;

Entonces qu son las palabras False y True? Son la representacin simblica de dos conceptos abstractos: la idea de algo falso y de algo verdadero. Como no son nmeros, no pueden intervenir en expresiones numricas; de igual forma, como no son palabras, no pueden intervenir en expresiones alfanumricas. Sin embargo, tienen una gran utilidad al determinar el comportamiento de instrucciones que dependen del valor que tome una expresin lgica, como son las instrucciones de seleccin y las instrucciones de repeticin. La existencia de valores booleanos ilustra la conveniencia de tipos de datos cuyos valores tienen utilidad al intervenir en algunas instrucciones y al representar conceptos que quedan fuera de los mbitos numrico y alfanumrico, casi siempre con propsitos de organizacin de ideas. Este tipo de datos se denomina enumerado, y es el programador el que, no slo lo bautiza al darle un nombre, sino que tambin define los valores que tomar este tipo y el orden entre ellos. Esto se lleva a cabo en la zona de declaraciones y, como en cualquier declaracin de tipos, comienza con la palabra reservada TYPE:

TYPE NOMBRE DEL TIPO = (VALOR 0, VALOR 1,...,VALOR


N);

Ejemplo 10-3
Algunas declaraciones de tipo definido podran ser: Type Tgrado = (Primaria, Secundaria, Universitaria); Tcarta = (Corazon, Diamante, Trebol, Pica); Tdias = (Lunes, Martes, Mircoles, Jueves, Viernes, Sabado, Domingo); Tmes_abrev = (Ene, Feb, Mar, Abr, May, Jun, Jul, Ago, Sep, Oct, Nov, Dic); Tposicion = (Izquierda, Centro, Derecha); Observe entonces que en la declaracin anterior se han definido cinco tipos nuevos, cada uno de ellos con tres, cuatro, siete, doce y tres valores respectivamente. Observe tambin que los nombres de todos ellos comienzan con la letra T; esto no es obligatorio pues el identificador de un tipo, al igual que cualquier otro, slo debe cumplir con las reglas para identificadores del Pascal. El uso de esta letra al principio de cada identificador es slo una regla de organizacin de identificadores de tipos que algunos programadores recomiendan.

10.3 Tipos Enumerados


Suponga que se permitiera ver en un programa, la declaracin del tipo boolean. sta aparecera de la siguiente manera:
TYPE Boolean = (False, True);

Esta declaracin describe no slo el nombre del tipo sino tambin todos los valores que ste representa, es decir, todos los valores que puede almacenar una variable de este tipo, incluso el orden relativo de estos valores recuerde que False < True . Ahora fije por un momento su atencin en las palabras False y True y piense en lo siguiente: Estas palabras no son cadenas de caracteres pues no estn encerradas entre comillas. No son identificadores de variables, ni de constantes, ni de funciones, ni de algn otro elemento conocido de un programa escrito en Pascal. Evidentemente, tampoco son cantidades numricas, an cuando exista una relacin de orden entre ellas.

Para un correcto uso de estos tipos, deben atenderse las siguientes observaciones: Un tipo enumerado es ordinal, y el orden de los valores viene dado por el orden en que aparecen en la definicin, teniendo el primer valor un nmero de orden igual a cero. Por lo tanto, est permitido con ellos el uso de las funciones Ord, Pred, Succ, High y Low as como los procedimientos Inc y Dec.
Ing. Jos Ricardo Vargas

Programacin con Delphi

Cap. 10: Definicin de Tipos

Pag. 10-3

Ejemplo: dadas las siguientes declaraciones:


Type Tdias = (Lunes, Martes, Miercoles, Jueves, Viernes, Sabado, Domingo); Tmes_abrev = (Ene, Feb, Mar, Abr, May, Jun, Jul, Ago, Sep, Oct, Nov, Dic); Var X: Tdias; las siguientes expresiones lgicas son True: Pred(Martes) = Lunes Succ(Martes) = Miercoles Ord(Lunes) = 0 Ord(Dic) = 12 Low(X) = Lunes

Ejemplo: Dadas las siguientes declaraciones: Type Tdias = (Lun, Mar, Mie, Jue, Vie, Sab, Dom); Var K: Tdias;
Se pueden construir las siguientes instrucciones: K:= Mie; Inc(K); If (K>Vie) And (K<Dom) Then ....; While K<Sab ....; Case K Of Lun: Writeln(Lunes); Mar: Writeln(Martes); : End; For K:=Lun To Dom Do ....;
Object Pascal viene con una gran cantidad de tipos enumerados predefinidos, por ejemplo: TFloatFormat = (ffGeneral, ffExponent, ffFixed,, ffNumber, ffCurrency)

Los valores de tipos enumerados no pueden intervenir en expresiones numricas ni alfanumricas pero s en expresiones lgicas ya que, por ser tipos ordinales, permiten el uso de operadores de relacin. Ejemplo: Tomando las declaraciones del ejemplo anterior,
observe las siguientes expresiones lgicas: Martes < Mircoles True Nov > Feb True Lunes = Pred(Martes) True Dic <> High(Tmes_abrev) False

A PROPSITO

10.4 Tipos Subrango


Se entiende por subrango de un tipo como una porcin de valores consecutivos de un tipo ordinal que mantienen el orden relativo original entre ellos. Cada uno de los valores de un subrango es del tipo original, al que se le llama tipo soporte o base. En Pascal se denota un subrango especificando el primero y el ltimo trmino separados por un par de puntos suspensivos. Ejemplo:
1..20 a..z A..Z Lun..Vie -10..10

Una variable de tipo enumerado puede ser declarada usando el nombre de dicho tipo o definiendo el tipo en la misma declaracin de variable, quedando ste sin nombre. Ejemplo: Observe el siguiente segmento de programa:
Type Tcarta = (Corazon, Diamante, Trebol, Pica); Var Xnum: Tcarta; En este segmento se han declarado dos elementos, el tipo Tcarta y la variable Xnum. Esto tambin puede hacerse de la siguiente manera: Var Xnum: (Corazon, Diamante, Trebol, Pica); pero en este caso slo se declara la variable Xnum como de un tipo sin nombre.

subrango de nmeros enteros de 1 a 20 subrango de letras de la a a la z subrango de letras de la A a la Z subrango de valores del Lun al Vie del tipo Tdias del ejemplo anterior subrango de nmeros enteros de 10 a 10

Los valores de tipos enumerados no pueden ser ledos desde el teclado con los procedimientos read/readln o escritos en pantalla con los procedimientos write/writeln, ya que stos slo procesan valores de tipos numricos, char, string y boolean. Los valores definidos en un tipo de datos no pueden aparecer en otro tipo, a menos que este otro tipo sea un subrango del primero. Parmetros de subprogramas pueden ser de tipos enumerados. Variables de tipos enumerados pueden utilizarse en instrucciones de seleccin mltiple o en instrucciones repetitivas.

Un tipo subrango es un tipo ordinal formado por un subrango de un tipo soporte. Se declara de la siguiente manera:
TYPE NOMBRE DEL TIPO = PRIMER VALOR..ULTIMO VALOR;

donde PRIMER VALOR < ULTIMO VALOR, ambos de un mismo tipo soporte. Una variable declarada de un tipo subrango tendr todas las caractersticas del tipo soporte, a excepcin del rango de valores que puede tomar, el cual ser el denotado por el subrango. Una variable de un tipo soporte ser totalmente compatible con las variables de los tipos subrango que de ste se declaren. Al igual que con los tipos enumerados, una variable de tipo subrango puede ser declarada usando un tipo subrango declarado o usando simplemente un rango.

Programacin con Delphi

Ing. Jos Ricardo Vargas

Pag. 10-4

Cap. 10: Definicin de Tipos Type Cad20 = String[20];

Ejemplo 10-4
Las siguientes son declaraciones vlidas de tipos subrango: Type Minusculas Mayusculas Primeros10 DosDigitos LetrasNum = = = = = 'a'..'z'; 'A'..'Z'; 1..10; 10..99; '0'..'9';

Dadas las siguientes declaraciones de tipo enumerado: Type Tdias Tmes = (Lunes, Martes, Mircoles, Jueves, Viernes, Sabado, Domingo); = (Ene, Feb, Mar, Abr, May, Jun, Jul, Ago, Sep, Oct, Nov, Dic);

establece la existencia de un nuevo tipo cadena llamado Cad20. Una variable de este tipo no podr albergar ms de 20 caracteres. Por lo general, intentar asignar a una variable as, un nmero de caracteres mayor que su longitud mxima, hace que se asigne a sta slo los primeros 20 caracteres. Por supuesto, una variable de este tipo no puede estar involucrada en subprogramas propios de cadenas de longitud dinmica como SETLENGTH o SLICE.

10.6 Sobre Parmetros de Subprogramas


Existe una regla importante del lenguaje Pascal que establece que no puede haber una declaracin explcita de tipos en la declaracin de parmetros de subprogramas. As, las siguientes declaraciones NO son vlidas:
Procedure Uno(A : 1..100); Function Otro(B : String[50]); Function Mas(C : (menor, igual, mayor));

Se pueden hacer tambin las siguientes: Type Dias_habiles = Lunes..Viernes; Primer_semestre = Ene..Jun; Segundo_semestre = Jul..Dic; Igualmente, se pueden declarar variables: Var Charmin: Charmay: X1, X2 : UnDia : NumMes : Dia_Mes: Minsculas; Maysculas; DosDigitos; Dias_habiles; 1..12; 1..31;

Para que sean vlidas, estas declaraciones deben hacerse de la siguiente manera:
Type Sub1 = 1..100; Cad50 = String[50]; Relacion = (menor, igual, mayor); Procedure Uno(A : Sub1); Function Otro(B : Cad50); Function Mas(C : Relacion);

Observe que las variables Charmin, Charmay, X1, X2 y UnDia son de tipos declarados mientras que las variables Mes y DiaMes son de tipos subrango numricos no declarados.
El nmero de orden de un valor cualquiera de un tipo soporte se mantiene en los subrangos que de l se definan. As, si Mes es una variable de tipo Segundo_semestre del ejemplo anterior y que almacena el valor Jul, entonces Ord(Mes) es igual a 6 an cuando Jul es el primer valor de ese tipo ya que, en el tipo soporte Tmes, tiene ese orden.

A PROPSITO

Preguntas de repaso
1. 2. Qu es una definicin de tipo? Cuntas clases de definiciones de tipo hay en Pascal? Cul es la finalidad de la palabra TYPE? Pueden hacerse declaraciones de tipos en procedimientos y funciones? Cules cree usted que podran ser aplicaciones de los tipos alias? Cul es la diferencia entre un alias y un tipo alias? Qu ventajas proporciona el uso de variables enumeradas? Cmo se asignan valores a variables enumeradas? Qu funciones pueden usarse con variables enumeradas? Puede un valor enumerado aparecer en ms de una definicin de tipo? Cmo se establece el orden de los valores de un tipo enumerado? En particular cul es el nmero de orden del primer valor del tipo? Cmo pueden leerse o escribirse valores enumerados?
Ing. Jos Ricardo Vargas

10.5 Definicin de Tipos Cadena


En ocasiones, por razones de ahorro de espacio de almacenamiento, por compatibilidad hacia otras versiones de Pascal o por otras razones que se mencionarn luego, podra ser deseable trabajar con tipos cadena de tamao mximo fijo. El tipo SHORTSTRING es un tipo cadena con una longitud mxima de 255 caracteres. Pascal permite la declaracin de nuevos tipos cadena cuyo tamao mximo no exceda un valor menor o igual a 255. Para ello, se declara el nuevo tipo, de la siguiente manera: TYPE NOMBRE DEL TIPO = STRING[X]; donde X es un nmero entre 1 y 255. As, la siguiente declaracin:
Programacin con Delphi

3. 4. 5. 6.

7. 8.

9.

Cap. 10: Definicin de Tipos

Pag. 10-5

10. Puede una variable enumerada ser un parmetro de procedimiento o funcin? Y una variable subrango? 11. Pueden dos subrangos de un mismo tipo soporte, comenzar con el mismo primer valor o terminar con el mismo ltimo valor? Pueden dos subrangos de un mismo tipo soporte ser exactamente iguales? 12. Qu ventajas proporciona el uso de variables de tipo subrango? 13. Cules operadores pueden usarse con variables enumeradas? Y cules pueden usarse con variables de tipo subrango? 14. Es ventajoso declarar variables enumeradas o subrango sin declarar un tipo especfico? 15. Por qu, en una declaracin de tipo subrango, el primer valor debe ser menor que el ltimo valor? Explique. 16. Podra definirse un subrango numrico compuesto slo por valores impares? 17. Podra definirse un tipo enumerado compuesto slo por letras vocales?

Programacin con Delphi

Ing. Jos Ricardo Vargas

También podría gustarte