PROGRAMACIÓN DIGITAL 10. Prof. Dolores Cuiñas H. APUNTES Nº 3 Recuerde que estos son apuntes muy simplificados que deberá completar con la bibliografía recomendada DATOS DE TIPO SUBRANGO Y TIPO ENUMERADO: Estos tipos de datos pertenecen al grupo de los datos estáticos, simples, ordinales, conocidos como datos definidos por el usuario. DATOS DE TIPO SUBRANGO: Un tipo subrango se deriva de un tipo ordinal, especificando dos constantes de este tipo, que actúan como límite inferior y superior del conjunto de datos de ese tipo. Ejemlo: 1..5 ‘F’..’I’ consta de los elementos 1,2,3,4,5 consta de los elementos ‘F’,’G’,’H’,’I’ Las declaraciones de los datos tipo subrango se sitúan entre las declaraciones de CONSTANTES y VARIABLES de la siguiente forma: TYPE nombre = límite inferior .. límite superior; Ejemplo: PROGRAM RESULTADOS; CONST A=386; TYPE B=-5..8; ALFABETO=’a’..’z’; VAR C: INTEGER; Es posible definir los subrangos directamente en las declaraciones de VAR, pero no es recomendable. Ejemplo: VAR ALFA: ‘a’..’z’; LIMITE: 5..8; ALFA: ALFABETO; LIMITE: B; X,Y: REAL; NOTA: Los datos de tipo subrango se usan para mejorar la legibilidad y la comprensión , así como para aumentar la fiabilidad de los programas debido a que el lenguaje Pascal detecta si un valor está fuera del intervalo declarado. En el caso de que al ejecutar el programa no se produzca un mensaje de error cuando el valor de un tipo subrango esté fuera de su rango definido, inserte al principio del programa el siguiente comando {$R+} Ejemplo: Si se espera que una variable X contenga sólo enteros positivos, se debe declarar así: TYPE MAXINT indica el máximo valor entero Si se introduce un valor 0 o negativo da error. De ENTEROPOS = 1..MAXINT; no producirse el mensaje de error coloque VAR después del program {$R+} y pruebe X: ENTEROPOS; nuevamente. Ejm: Program nombre programa; {$R+} TYPE Si se introduce un valor diferente de A,B,C,D o E debe dar error RANGO= ‘A’..’E’; VAR CODIGO: RANGO; DATOS TIPO ENUMERADO: Es un conjunto de valores referenciados por identificadores, que se declaran de la siguiente forma. TYPE nombre = (constante1, constante2, ….., constanten); Ejemplo: TYPE VEHICULOS=(MOTO, AUTOMOVIL, AUTOBUS, TANVIA,TREN); FRUTAS=(NARANJAS,MELOCOTONES, UVAS,LECHOZAS); DIAS=(LUN, MAR, MIER, JUE, VIE, SAB, DOM); COLOR=(ROJO,AZUL,VERDE,BLANCO); DIASLABORABLES = LUM..VIE; Siempre que Las variables pueden ser tipo enumerado: VAR CLASE: VEHICULOS; POSTRE: FRUTAS; TRABAJO: DIASLABORABLES; TONOS: COLOR; NOTA: • El dato de tipo enumerado es un ordinal cuyo orden viene dado según la disposición de valores en su definición. Ejemplo: TYPE COLOR=(ROJO, AZUL, VERDE, BLANCO); Elemento nº: 0 1 2 3 Los datos tipo enumerado sólo pueden ser acompañados por operadores de relación y de asignación, pero dentro del mismo tipo de enumerado. Ejemplo: AZUL < VERDE da como resultado: verdadero MOTO > AZUL no pueden compararse Las variables de tipo enumerado sólo pueden tomar los valores definidos en TYPE Ejemplo: VAR TONOS:COLOR; • Se define el valor de la variable cuyo tipo es enumerado Un valor no puede figurar en 2 listas diferentes. Es decir, dos o más valores no pueden pertenecer a diferentes variables de tipo enumerado, cuando esto sea necesario deben usarse combinadamente datos de tipo enumerado con datos de tipo subrango. Por ejemplo: TYPE MES = (enero, febrero, marzo, abril, mayo, junio, julio, agosto, septiembre, octubre); PRIMAVERA = marzo..mayo; VERANO = junio..agosto; VAR MESES: MES; TEMPLADO: PRIMAVERA; Sería un error colocar: PRIMAVERA = (marzo, abril, mayo); Dado que los valores marzo, abril y mayo no pueden pertenecer simultáneamente a MES y a PRIMAVERA. Mientras que declarándolos tipo subrango constituyen un intervalo del tipo enumerado definido previamente. CALIDO: VERANO; Los procedimientos de ENTRADA/SALIDA no pueden leer o escribir datos de tipo enumerado. Ejemplo: write (ROJO); produce error Si se desea imprimir un tipo enumerado se debe usar la sentencia CASE. Ejemplo: TYPE DIASEMANA=(LUNES,MARTES,MIERCOLES,JUEVES,VIERNES,SABADO,DOMINGO); LABORABLES=LUNES..VIERNES; FINSEMANA=SABADO..DOMINGO; VAR DIA: DIASEMANA; BEGIN CASE DIA OF LUNES: WRITE(‘LUNES’); MARTES: WRITE(‘MARTES’); MIERCOLES: WRITE(‘MIERCOLES’); JUEVES: WRITE(‘JUEVES’); VIERNES: WRITE(‘VIERNES’) ELSE WRITE (‘FIN DE SEMANA’) END; FUNCIONES ORDINALES: ORD, PRED, SUCC. FUNCION ORD: determina el número ordinal o posición relativa de un valor ordinal en su secuencia de valores en el tipo ordinal. En Turbo Pascal tiene la siguiente forma: ORD (x) donde x es un elemento de un tipo ordinal. Ejemplos: Ord (false) 0 Ord (true) 1 Ord (‘A’) 65 en código ASCII Ord (-7) -7 Ord (8) 8 TYPE UTILES = (lapiz, borrador, escuadra, cuaderno) ORD (borrador) 1 ORD (cuaderno) 3 ORD (lapiz) 0 FUNCIONES PRED Y SUCC: devuelven, respectivamente, el predecesor o sucesor de su argumento. Tienen la siguiente forma: PRED (x) SUCC (x) Ejemplos: Donde x es un elemento de tipo ordinal Pred (false) indefinido Succ (false) true Pred (borrador) lapiz Succ (borrador) escuadra Pred (15) 14 Succ (15) 16 NOTA: Los conceptos anteriores son tomados básicamente de: Programación en Turbo/ Borland. Pascal 7. Luis Joyanes Aguilar Programación con Lenguaje Turbo Pascal. F.J. Sanchis Llorca.-