Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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.
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:
= = = =
Pag. 10-2
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:
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.
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
Pag. 10-3
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
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.
Pag. 10-4
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.
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
3. 4. 5. 6.
7. 8.
9.
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?