Algorítmica y Lenguajes de Programación Tipos definidos: Enumerados, subrangos y tuplas Tipos definidos. Introducción n Tipos de datos predefinidos: n n n n n n Hay ocasiones en los que hay que trabajar con datos que no se ajustan a ninguno de estos tipos y es necesario crear un tipo “a medida”. Por ejemplo: n n n n n entero (integer) real (real) lógico (logical) carácter (character) días de la semana meses del año referencia bibliográfica Lenguajes de programación modernos permiten al usuario la definición de tipos de datos propios. Los más sencillos son: n n n enumerados subrangos tuplas (o registros) 2 1 Tipos definidos. Enumerado (i) n Para definirlo se enumeran los valores de sus elementos; ejemplos de tipos enumerados: n n n n n n n días de la semana, estaciones del año, palos de una baraja, sexo de una persona, ... Para definir un nuevo tipo de datos en la notación algorítmica se debe indicar una nueva sección mediante la palabra reservada tipos. La sintaxis para definir un tipo enumerado es la siguiente: tipos nombre_enumerado = {valor1, valor2, ..., valorN}3 Tipos definidos. Enumerado (ii) n Los ejemplos anteriores se definirían tipos dias_semana={lunes,martes,miercoles,jueves,viernes, sabado,domingo} estaciones_anno={primavera,verano, otono ,invierno} palos_baraja={oros,copas,espadas,bastos} sexo={mujer,hombre} n Para declarar variables de dichos tipos se procede como con los tipos predefinidos: variables dia ∈ ∈ semana estacion ∈ ∈ estaciones_ anno palo ∈ ∈ palos_baraja sexo_contribuyente ∈ ∈ sexo 4 2 Tipos definidos. Enumerado (iii) n n n n Los tipos enumerados son tipos ordenados. Es posible utilizar con ellos los operadores relacionales (> > , < , ≥ y ≤ ). Existen las funciones ord, pred y succ que retornan el ordinal, el valor anterior y el valor siguiente de un tipo enumerado. FORTRAN 90 no soporta tipos enumerados. 5 Tipos definidos. Subrango n n Un subrango es un subconjunto de un tipo enumerable (entero, carácter, lógico y cualquier tipo enumerado) que contiene todos los elementos entre dos valores dados. Sintaxis para definir un subrango: tipos nombre_subrango = valor_inicial .. valor_final n Algunos ejemplos de subrangos: tipos minusculas = ‘a’ .. ‘z’ mayusculas = ‘a’ .. ‘z’ numeros = ‘0’ .. ‘9’ dias_laborables = lunes .. viernes fin_semana = sabado .. domingo n FORTRAN 90 tampoco soporta subrangos. 6 3 Tipos definidos. Tuplas o registros (i) n n Una tupla (o registro) es un conjunto de datos con un número fijo de componentes no necesariamente del mismo tipo. Ejemplos de datos representables mediante tuplas: n n n n Información sobre un alumno (nombre, apellidos, DNI, dirección, etc.) Referencias bibliográficas (título, autor, editorial, año de edi Información sobre una película (título, director, año, etc.) La sintaxis para la definición de una tupla en la notación algorítmica es la siguiente: tipos nombre_tupla = tupla campo1 ∈ tipo1 campo2 ∈ tipo2 ... campoN ∈ tipoN fin tupla 7 Tipos definidos. Tuplas o registros (ii) n Las tuplas “recursiva”: pueden anidarse de forma tipos direccion = tupla calle ∈ ∈ carácter portal, piso ∈ ∈ entero letra, CP, localidad, municipio, provincia ∈ ∈ carácter fin tupla fecha = tupla dia, mes, anno ∈ ∈ entero fin tupla persona = tupla nombre, apellido1, apellido2, DNI ∈ ∈ carácter nacimiento ∈ ∈ fecha fin tupla alumno = tupla datos_personales ∈ ∈ persona asignatura ∈ ∈ carácter direccion _asturias , direccion_familiar ∈ ∈ direccion fin tupla 8 4 Tipos definidos. Tuplas o registros (iii) n n ¡¡FORTRAN soporta tuplas!! Sintaxis FORTRAN para definir una tupla: type nombre_tupla tipo1 campo1 tipo2 campo2 ... tipoN campoN end type nombre_tupla 9 Tipos definidos. Tuplas o registros (iv) n El ejemplo anterior traducido a FORTRAN: type direccion character*64 calle integer portal, piso character*2 letra character*5 CP character*64 localidad, municipio, provincia end type direccion type fecha integer dia , mes, anno end type fecha Obsérvese notación para declarar variables de tipo registro: type(tipo_tupla) variable type persona character*64 nombre, apellido1, apellido2 character*8 DNI type(fecha) nacimiento end type persona type alumno type(persona) datos_personales character*32 asignatura type(direccion) direccion _asturias, direccion_familiar end type alumno 10 5 Tipos definidos. Tuplas o registros (v) n Los registros pueden procesarse: n Registro a registro: n n n n Asignar un registro a otro registro del mismo tipo. Escribir un registro completo. Leer un registro (desaconsejable). Campo a campo: n n Es necesario utilizar “selectores de campo”. Un selector de campo se construye mediante el identificador del registro y de los campos separándolos mediante: n n n Un punto ‘.’ en el caso de la notación algorítmica. Un carácter ‘%’ en el caso de FORTRAN. Ejemplos: n n Notación algorítmica: alumno1.datos_personales.nacimiento.dia FORTRAN: alumno1%datos_personales%nacimiento%dia 11 Tipos definidos. Resumen n n Todos los lenguajes modernos permiten la definición de tipos de usuario. Los tipos definidos por el usuario más habituales son: n n n n n n n n n n enumerado, subrango y tupla o registro. Un tipo enumerado consiste en la simple enumeración de los valores de sus elementos. Al definir un tipo enumerado se establece una relación de orden entre sus valores. En FORTRAN 90 no es posible definir tipos enumerados. Un subrango es un subconjunto de un tipo enumerable que contiene todos los elementos entre dos valores datos. No es posible definir subrangos en FORTRAN 90. Una tupla o registro es un conjunto de datos con un número fijo de componentes generalmente de tipos diferentes (incluyendo otros registros). Los registros o tuplas pueden procesarse de forma completa o campo por campo. (utilizando selectores de campo). 12 6