Sunteți pe pagina 1din 72

Tema 5: Tipos de datos no predefinidos

Fernando Bobillo
fbobillo@unizar.es


Departamento de Informatica e Ingeniera de Sistemas
Universidad de Zaragoza

Curso 2015/2016

Fundamentos de Informatica
Grado de Ingeniera Qumica

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 1 / 48



Motivacion

que calcule los das transcurridos


Problema: funcion
entre 2 fechas (para saber la antiguedad
de algo):
{ Cabecera }
FUNCTION d i a s T r a n s c u r r i d o s (
dia1 , mes1 , anyo1 : integer ;
dia2 , mes2 , anyo2 : integer
) : integer ;

{ Llamada }
dias := d i a s T r a n s c u r r i d o s (6 , 4 , 2016 , 8 , 2 , 2016);

legible y menos propenso a errores:


Mas
{ Cabecera }
FUNCTION d i a s T r a n s c u r r i d o s ( fecha1 , fecha2 : tpFecha ) : integer ;

{ Llamada }
dias := d i a s T r a n s c u r r i d o s ( fecha1 , fecha2 );

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 2 / 48



Motivacion

Problema: dar aprobado general a los alumnos del curso


nota1 := 5;
nota2 := 5;
nota3 := 5;
nota4 := 5;
nota5 := 5;
nota6 := 5;
nota7 := 5;
nota8 := 5;
nota9 := 5;
nota10 := 5;
{ ... }

108 variables y 108 instrucciones iguales o similares!


! Se le quitan a uno las ganas de darlo

Solucion:
1 variable compuesta con todas las notas (posiblemente
diferentes) que permita hacer un bucle para recorrerlas

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 2 / 48



Motivacion

Por que definir nuevos tipos de datos:


Legibilidad del codigo

Reusabilidad de los tipos

mas
Simplicidad: representacion cercana al mundo real,
menor numero
...
de variables, facilidad de codificacion


Fiabilidad: menos errores, chequeo automatico de
compatibilidad de los tipos . . .

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 2 / 48


Objetivos

Conocer los mecanismos existentes para definir nuevos


tipos de datos

Crear nuevos tipos de datos

de nuevos tipos de datos a la


Aplicar la creacion
resolucion de problemas

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 3 / 48


Contenidos

1 de nuevos tipos de datos


Mecanismos de definicion

2 Renombrado

3
Enumeracion

4 Subrango

5 Registros

6 Vectores y matrices

7 Cadenas de caracteres

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 4 / 48


Contenidos

1 de nuevos tipos de datos


Mecanismos de definicion

2 Renombrado

3
Enumeracion

4 Subrango

5 Registros

6 Vectores y matrices

7 Cadenas de caracteres

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 5 / 48


Estructura de un programa en Pascal
1 Cabecera: PROGRAM y el nombre del programa
2 Declaraciones optativas
de constantes: comienza por CONST
Declaracion
de tipos de datos: comienza por TYPE
Declaracion
de variables: comienza por VAR
Declaracion
de funciones (FUNCTION) y procedimientos
Declaracion
(PROCEDURE)
3 Cuerpo o programa principal
Secuencia de sentencias (instrucciones)
Delimitado por BEGIN y END. (con punto)

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 6 / 48


Estructura de un programa en Pascal

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 6 / 48


de tipos de datos en Pascal
Clasificacion

1 Predefinidos en el languaje
2 No predefinidos (hay mecanismos para que el
programador defina sus propios tipos de datos)

Predefinidos
Caracter Entero
Booleano Real
Enumeracion Subrango
No predefinidos Cadena Array
Registro Fichero

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 7 / 48


Tipos de datos estructurados

Mecanismos para definir nuevos tipos:


Renombrado

Enumeracion
Subrango (de un tipo ordinal)
registros
Agregacion:
vectores, matrices y cadenas
Indexacion:
ficheros secuenciales (tema 6)
Secuenciacion:

read y write no los permiten (excepto cadenas)

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 8 / 48


Contenidos

1 de nuevos tipos de datos


Mecanismos de definicion

2 Renombrado

3
Enumeracion

4 Subrango

5 Registros

6 Vectores y matrices

7 Cadenas de caracteres

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 9 / 48


Renombrado

Idea: crear un apodo del tipo de dato original


Operadores, representaciones interna y algortmica:
los del tipo base
Sintaxis:
TYPE
< tipoNuevo > = < tipoExistente >;

Ejemplo:
TYPE
numero = integer ;

! Se pueden transformar todas las variables enteras es reales


con solo un cambio

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 10 / 48


Contenidos

1 de nuevos tipos de datos


Mecanismos de definicion

2 Renombrado

3
Enumeracion

4 Subrango

5 Registros

6 Vectores y matrices

7 Cadenas de caracteres

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 11 / 48



Enumeracion
de los posibles valores
Idea: enumeracion
Dominio: definido de modo explcito
algortmica: identificador
Representacion
TYPE
< tipoNuevo > = ( < identificador1 > , ... , < identificadorN > );

! No se pueden repetir valores ni usar palabras reservadas


interna: enteros en [0, N 1]
Representacion
Ejemplos:
TYPE
tpVocal = ( a , e , i , o , u );
tpValorBaraja = (1 , 2 , 3 , 4 , 5 , 6 , 7 , sota , caballo , rey );

Error!
Los valores de tpVocal y tpValorBaraja deben ser identificadores
F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 12 / 48

Enumeracion
Ejemplos:
TYPE
tpColor = ( rojo , verde , azul , ... );
tpDia = ( lunes , martes , ... , domingo );
tpMes = ( enero , febrero , ... , diciembre );
tpPaloBaraja = ( oros , copas , espadas , bastos );
tpValorBaraja = ( uno , dos , tres , cuatro , cinco , seis ,
siete , sota , caballo , rey );
tpVocal = (a , e , i , o , u );

Operadores relacionales: <, <=, >=, >=, =, <>


rojo < azul devuelve true

Funciones de orden: succ, prec, ord


ord(lunes) devuelve 0
succ(febrero) devuelve marzo

No se pueden utilizar directamente read ni writeln


F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 13 / 48
Contenidos

1 de nuevos tipos de datos


Mecanismos de definicion

2 Renombrado

3
Enumeracion

4 Subrango

5 Registros

6 Vectores y matrices

7 Cadenas de caracteres

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 14 / 48


Subrango

Idea: subconjunto de valores de un tipo con dominio finito



(caracter,
entero, enumeracion): el compilador puede
comprobar que el valor es correcto
Dominio: subconjunto del dominio de su tipo base
Operadores, representaciones interna y algortmica:
los del tipo base
TYPE
< tipoNuevo > = < valorInicial >.. < valorFinal >;

Ejemplos:
TYPE
dia = 1..31;
mes = 1..12;
minuscula = a .. z

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 15 / 48


Subrango

Pueden ser utiles


en sentencias CASE
PROGRAM notas ;
TYPE
nota = 0..10;
VAR
n : nota ;
BEGIN
write ( Escriba un entero con la nota : );
readln ( n );
CASE n OF
0..4 : writeln ( Suspenso );
5..6 : writeln ( Aprobado );
7..8 : writeln ( Notable );
9..10 : writeln ( Sobresaliente );
END
END .

Se usan para definir vectores, matrices y cadenas

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 15 / 48


Contenidos

1 de nuevos tipos de datos


Mecanismos de definicion

2 Renombrado

3
Enumeracion

4 Subrango

5 Registros

6 Vectores y matrices

7 Cadenas de caracteres

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 16 / 48


Registros
Idea: paquete de tipos (tipo compuesto de otros tipos)
Fecha (dia, mes, anyo)
Persona (nombre, apellidos, DNI, edad)

datos
Registro: tipo resultante de agregar 2 o mas
Cada dato se denomina campo del registro
Los campos pueden ser de diferentes tipos
Los tipos de los campos no pueden ser ficheros

Dominio: producto cartesiano de los dominios de los tipos


Representacion interna: Concatenacion
de las
representaciones de los tipos base
algortmica: identificador de tipo registro
Representacion
F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 17 / 48
Registros

Definicion:
TYPE
< nombretipo > = RECORD
< nombreCampo1 > : < tipoCampo1 > ;
...
< nombreCampoN > : < tipoCampoN > ;
END ;

Ejemplo:
TYPE
tpFecha = RECORD
dia : 1..31;
mes : 1..12;
anyo : integer ;
END ;

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 17 / 48


Operadores de los registros

Acceso a un campo: registro.campo


{ Sea VAR fecha : tpFecha ; }
fecha . dia := 6;
fecha . mes := 4;
fecha . anyo := 2016;

de registros del mismo tipo


Asignacion
! No sirven registros de distinto tipo con campos de igual tipo

Igualdad y desigualdad de registros


No permitido: otros operadores relacionales, read, write
Estas operaciones deben hacerse campo a campo

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 18 / 48



Ejemplo: juego del guinote

Enunciado
de las cartas de la baraja espanola
Representacion
que indique si una carta mata a otra en el guinote
Funcion
c1 mata a c2 sii ambas son del mismo palo y c1 tiene mayor
valor que c2 o bien si c1 es del palo del triunfo y c2 no

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 19 / 48



Ejemplo: juego del guinote

TYPE
tpPalo = ( oros , copas , espadas , bastos );

tpNombreCarta = ( dos , cuatro , cinco , seis , siete , caballo ,


sota , rey , tres , uno );

tpCarta = RECORD
nombre : tpNombreCarta ;
palo : tpPalo ;
END ;

FUNCTION mata ( c1 , c2 : tpCarta ; triunfo : tpPalo ) : boolean ;


BEGIN
IF c1 . palo = c2 . palo THEN
mata := c1 . nombre > c2 . nombre
ELSE
mata := c1 . palo = triunfo
END ;

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 19 / 48


Operador WITH

WITH permite acceder a los campos solo con su nombre


WITH < identificadorRegistro > DO < sentencia >

Ejemplo:
WITH fecha DO
BEGIN
dia := 6;
mes := 4;
anyo := 2016;
END ;

Usar solamente si aporta legibilidad

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 20 / 48


Contenidos

1 de nuevos tipos de datos


Mecanismos de definicion

2 Renombrado

3
Enumeracion

4 Subrango

5 Registros

6 Vectores y matrices

7 Cadenas de caracteres

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 21 / 48


Vectores y matrices

Idea intuitiva: conjunto de datos de un mismo tipo


Ejemplo: para almacenar las notas de 20 alumnos, podra-
mos usar 20 variables nota1, . . . , nota20, o 1 estructurada
... nota
1 2 3 20

Concepto: estructura de datos obtenida como indexacion
de una serie finita de elementos de un mismo tipo

Vector (o array, arreglo): 1 dimension
dimensiones
Matriz (o tabla): 2 o mas

Formalmente: aplicacion V : I D, siendo I un conjunto


de ndices y D el tipo de los elementos

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 22 / 48


Vectores y matrices

Vector Matriz

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 23 / 48


Vectores

Ejemplo: Notas de 20 alumnos


5.5 7.25 9 ... 8.1
1 2 3 20
de letras en un texto
Ejemplo: frecuencia de aparicion
17 3 5 ... 1
a b c z
Ejemplo: lluvias registradas durante una semana
0.0 0.5 12.5 ... 2.0
lunes martes miercoles domingo

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 24 / 48


Vectores

Dominio: producto cartesiano de los dominios de los


componentes
Representacion interna: concatenacion
de las
representaciones (posiciones contiguas)
estatico
Tamano (fijo)
Pueden no usarse todas las posiciones

Distinguir aforo maximo de tamano usado: es habitual
real ocupado o un
tener una variable que indique el tamano
registro con un array y una variable entera

Hay mecanismos para tener vectores dinamicos

Muy utiles

en calculo cientfico

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 25 / 48


Vectores

Sintaxis (1 dimension):
TYPE
< nombreTipo > = ARRAY [ < tipoIndices > ] OF < tipoElementos >;

donde <tipoIndices> puede ser:


Subrango de valores, e.g., 1..20, a..z
En otros lenguajes los ndices de los enteros empiezan en 0
Tipo ya definido (con dominio finito), e.g. tpDiaSemana
e.g., (oros, copas, espadas, bastos)
Enumeracion,

Ejemplos:
tpVectorNotas = ARRAY [1..20] OF real ;
tpVe ctorLetr as = ARRAY [ a .. z ] OF integer ;
t pV ec to r Ll uv ia s = ARRAY [ ( lunes , martes , miercoles , jueves ,
viernes , sabado , domingo ) ] OF real ;

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 26 / 48


Operadores de los vectores
de vectores del mismo tipo
Asignacion
! No sirven vectores de distinto tipo con elementos del mismo

Igualdad y desigualdad de vectores


No permitido: otros operadores relacionales, read, write
Estas operaciones deben hacerse elemento a elemento


Acceso a un elemento (1 dimension):
v[i], siendo v el array e i el ndice
Ejemplos: v[1], v[a], v[lunes]

Tiempo de acceso: igual para todos los elementos


de memoria de v[i]: d0 + (i-1) * tamTipo
Direccion
de memoria del primer elemento
d0: direccion
del tipo del vector
tamTipo: tamano
F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 27 / 48
Operadores de los vectores

indexada:
Iteracion
Recorrer todos los elementos de un vector para la
o modificacion
inspeccion de sus datos
Se utiliza un bucle FOR (con TO o DOWNTO) con una
variable de control del mismo tipo que los ndices del vector

v[1] v[2] v[3] ... v[n]

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 28 / 48


Operadores de los vectores

indexada:
Iteracion
Recorrer todos los elementos de un vector para la
o modificacion
inspeccion de sus datos
Se utiliza un bucle FOR (con TO o DOWNTO) con una
variable de control del mismo tipo que los ndices del vector

v[1] v[2] v[3] ... v[n]

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 28 / 48


Operadores de los vectores

indexada:
Iteracion
Recorrer todos los elementos de un vector para la
o modificacion
inspeccion de sus datos
Se utiliza un bucle FOR (con TO o DOWNTO) con una
variable de control del mismo tipo que los ndices del vector

v[1] v[2] v[3] ... v[n]

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 28 / 48


Operadores de los vectores

indexada:
Iteracion
Recorrer todos los elementos de un vector para la
o modificacion
inspeccion de sus datos
Se utiliza un bucle FOR (con TO o DOWNTO) con una
variable de control del mismo tipo que los ndices del vector

v[1] v[2] v[3] ... v[n]

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 28 / 48


Ejemplo: lectura y escritura de vector
Enunciado
Lectura y escritura de vector

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 29 / 48


Ejemplo: lectura y escritura de vector
CONST
TAM = 10;
TYPE
tpElemento = integer ;
tpIndice = 1.. TAM ;
tpVector = ARRAY [ tpIndice ] OF tpElemento ;

PROCEDURE leerVector ( VAR v : tpVector );


VAR i : tpIndice ;
BEGIN
FOR i := 1 TO TAM DO
BEGIN
write ( Escriba valor en la posicion , i , : );
readln ( v [ i ]);
END
END ;

PROCEDURE escr ibirVect or ( v : tpVector );


VAR i : tpIndice ;
BEGIN
FOR i := 1 TO TAM DO
write ( v [ i ] , );
END ;
F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 29 / 48

Ejemplo: maximo de un vector

Enunciado

Calculo
del maximo de un vector

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 30 / 48



Ejemplo: maximo de un vector


Maximo de un vector:
CONST
TAM = 10;
TYPE
tpElemento = integer ;
tpIndice = 1.. TAM ;
tpVector = ARRAY [ tpIndice ] OF tpElemento ;

FUNCTION maximo ( v : tpVector ): tpElemento ;


VAR
i : tpIndice ;
max : tpElemento ;
BEGIN
max := v [1];
FOR i := 2 TO TAM DO
IF v [ i ] > max THEN
max := v [ i ];
maximo := max ;
END ;

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 30 / 48



Ejemplo: maximo de un vector

alternativa
Solucion
CONST
TAM = 10;
TYPE
tpElemento = integer ;
tpIndice = 1.. TAM ;
tpVector = ARRAY [ tpIndice ] OF tpElemento ;

FUNCTION maximo ( v : tpVector ): tpElemento ;


VAR
i : tpIndice ;
max : tpElemento ;
BEGIN
max := - MAXINT - 1; { M nimo entero representable }
FOR i := 1 TO TAM DO
IF v [ i ] > max THEN
max := v [ i ];
maximo := max ;
END ;

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 30 / 48


del maximo
Ejemplo: posicion de un vector

del maximo
Posicion de un vector:
CONST
TAM = 10;
TYPE
tpElemento = integer ;
tpIndice = 1.. TAM ;
tpVector = ARRAY [ tpIndice ] OF tpElemento ;

FUNCTION posMaximo ( v : tpVector ): tpIndice ;


VAR
i : tpIndice ;
posMax : tpIndice ;
BEGIN
posMax := 1;
FOR i := 2 TO TAM DO
IF v [ i ] > v [ posMax ] THEN
posMax := i ;
posMaximo := posMax ;
END ;

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 31 / 48


Matrices

dimensiones, con elementos


Matrices: array de 2 o mas
representados en posiciones de memorias contiguas
Sintaxis:
< nombreTipo > = ARRAY [ < tipoIndices1 > , < tipoIndices2 >] OF
< tipoElementos >;

< nombreTipo > = ARRAY [ < tipoIndices1 >] OF ARRAY


[ < tipoIndices2 >] OF < tipoElementos >;

Ejemplos:
tpMatriz = ARRAY [1.. FILAS , 1.. COLUMNAS ] OF real ;

tpMatriz = ARRAY [1.. FILAS ] OF ARRAY [1.. COLUMNAS ] OF real ;

Acceso a un elemento en 2 dimensiones: v[i, j] o v[i][j]

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 32 / 48


Matrices

Origen de coordenadas en la esquina superior izquierda:


m[1,1] m[1,2] m[1,3]
m[2,1] m[2,2] m[2,3]
m[3,1] m[3,2] m[3,3]

Origen de coordenadas en la esquina inferior izquierda:


m[3,1] m[3,2] m[3,3]
m[2,1] m[2,2] m[2,3]
m[1,1] m[1,2] m[1,3]

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 33 / 48


Matrices

indexada: bucles anidados (uno por dimension)


Iteracion

m[1,1] m[1,2] m[1,3] ... m[1,c]


m[2,1] m[2,2] m[2,3] ... m[2,c]
... ... ... ... ...
m[f,1] m[f,2] m[f,3] ... m[f,c]

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 34 / 48


Matrices

indexada: bucles anidados (uno por dimension)


Iteracion

m[1,1] m[1,2] m[1,3] ... m[1,c]


m[2,1] m[2,2] m[2,3] ... m[2,c]
... ... ... ... ...
m[f,1] m[f,2] m[f,3] ... m[f,c]

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 34 / 48


Matrices

indexada: bucles anidados (uno por dimension)


Iteracion

m[1,1] m[1,2] m[1,3] ... m[1,c]


m[2,1] m[2,2] m[2,3] ... m[2,c]
... ... ... ... ...
m[f,1] m[f,2] m[f,3] ... m[f,c]

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 34 / 48


Matrices

indexada: bucles anidados (uno por dimension)


Iteracion

m[1,1] m[1,2] m[1,3] ... m[1,c]


m[2,1] m[2,2] m[2,3] ... m[2,c]
... ... ... ... ...
m[f,1] m[f,2] m[f,3] ... m[f,c]

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 34 / 48


Matrices

indexada: bucles anidados (uno por dimension)


Iteracion

m[1,1] m[1,2] m[1,3] ... m[1,c]


m[2,1] m[2,2] m[2,3] ... m[2,c]
... ... ... ... ...
m[f,1] m[f,2] m[f,3] ... m[f,c]

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 34 / 48


Matrices

indexada: bucles anidados (uno por dimension)


Iteracion

m[1,1] m[1,2] m[1,3] ... m[1,c]


m[2,1] m[2,2] m[2,3] ... m[2,c]
... ... ... ... ...
m[f,1] m[f,2] m[f,3] ... m[f,c]

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 34 / 48


Matrices

indexada: bucles anidados (uno por dimension)


Iteracion

m[1,1] m[1,2] m[1,3] ... m[1,c]


m[2,1] m[2,2] m[2,3] ... m[2,c]
... ... ... ... ...
m[f,1] m[f,2] m[f,3] ... m[f,c]

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 34 / 48


Matrices

indexada: bucles anidados (uno por dimension)


Iteracion

m[1,1] m[1,2] m[1,3] ... m[1,c]


m[2,1] m[2,2] m[2,3] ... m[2,c]
... ... ... ... ...
m[f,1] m[f,2] m[f,3] ... m[f,c]

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 34 / 48


Matrices

indexada: bucles anidados (uno por dimension)


Iteracion

m[1,1] m[1,2] m[1,3] ... m[1,c]


m[2,1] m[2,2] m[2,3] ... m[2,c]
... ... ... ... ...
m[f,1] m[f,2] m[f,3] ... m[f,c]

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 34 / 48


Matrices

indexada: bucles anidados (uno por dimension)


Iteracion

m[1,1] m[1,2] m[1,3] ... m[1,c]


m[2,1] m[2,2] m[2,3] ... m[2,c]
... ... ... ... ...
m[f,1] m[f,2] m[f,3] ... m[f,c]

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 34 / 48


Matrices

indexada: bucles anidados (uno por dimension)


Iteracion

m[1,1] m[1,2] m[1,3] ... m[1,c]


m[2,1] m[2,2] m[2,3] ... m[2,c]
... ... ... ... ...
m[f,1] m[f,2] m[f,3] ... m[f,c]

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 34 / 48


Matrices

indexada: bucles anidados (uno por dimension)


Iteracion

m[1,1] m[1,2] m[1,3] ... m[1,c]


m[2,1] m[2,2] m[2,3] ... m[2,c]
... ... ... ... ...
m[f,1] m[f,2] m[f,3] ... m[f,c]

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 34 / 48


Matrices
Tiempo de acceso: igual para todos
de v[i,j]: d0 + [ (i-1) * columnas + (j-1) ] * tamTipo
Direccion

Es habitual tener un registro con un array n-dimensional y n


real ocupado
variables de tipo entero indicando el tamano
Ejemplo: Tablero 8x8 para jugar a los barquitos
tpEstado = ( agua , barco );
tpTablero = ARRAY [ A .. H , 1..8] OF tpEstado ;

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 35 / 48


Ejemplo: leer matriz de teclado

CONST
TAM = 10;

TYPE
tpElemento = integer ;
tpIndice = 1.. TAM ;
tpMatriz = ARRAY [ tpIndice , tpIndice ] OF tpElemento ;

PROCEDURE leerMatriz ( VAR m : tpMatriz );


VAR
i , j : tpIndice ;
BEGIN
FOR i := 1 TO TAM DO
FOR j := 1 TO TAM DO
BEGIN
write ( Escriba valor de posicion , i , , , j , : );
readln ( m [i , j ]);
END
END ;

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 36 / 48


Ejemplo: escribir matriz en pantalla
CONST
TAM = 10;

TYPE
tpElemento = integer ;
tpIndice = 1.. TAM ;
tpMatriz = ARRAY [ tpIndice , tpIndice ] OF tpElemento ;

PROCEDURE escr ibirMatr iz ( m : tpMatriz );


VAR
i , j : tpIndice ;
BEGIN
FOR i := 1 TO TAM DO
FOR j := 1 TO TAM DO
write ( m [i , j ] , );
END ;

Error!
Se escriben todos los numeros
en la misma lnea

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 37 / 48


Ejemplo: escribir matriz en pantalla

CONST
TAM = 10;

TYPE
tpElemento = integer ;
tpIndice = 1.. TAM ;
tpMatriz = ARRAY [ tpIndice , tpIndice ] OF tpElemento ;

PROCEDURE escr ibirMatr iz ( m : tpMatriz );


VAR
i , j : tpIndice ;
BEGIN
FOR i := 1 TO TAM DO
BEGIN
FOR j := 1 TO TAM DO
write ( m [i , j ] , );
writeln ;
END
END ;

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 38 / 48


Ejemplo: matriz diagonal

CONST
TAM = 10;

TYPE
tpElemento = integer ;
tpIndice = 1.. TAM ;
tpMatriz = ARRAY [ tpIndice , tpIndice ] OF tpElemento ;

PROCEDURE diagonal ( VAR m : tpMatriz );


VAR
i , j : integer ;
BEGIN
FOR i := 1 TO TAM DO
FOR j := 1 TO TAM DO
IF i = j THEN
m [i , j ] := 1
ELSE
m [i , j ] := 0
END ;

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 39 / 48


Ejemplo: matriz diagonal
CONST
TAM = 10;

TYPE
tpElemento = integer ;
tpIndice = 1.. TAM ;
tpMatriz = ARRAY [ tpIndice , tpIndice ] OF tpElemento ;

PROCEDURE diagonal ( VAR m : tpMatriz );


VAR
i , j : integer ;
BEGIN
FOR i := 1 TO TAM DO
FOR j := i +1 TO TAM DO
m [i , j ] := 0;

FOR i := 1 TO TAM DO
FOR j := 1 TO i -1 DO
m [i , j ] := 0;

FOR i := 1 TO TAM DO
m [i , i ] := 1;
END ;

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 40 / 48



Ejemplo: juego del guinote
Enunciado
de una tabla de puntos para el guinote,
Creacion dado el tipo:
tpNombreCarta = ( dos , cuatro , cinco , seis , siete , caballo ,
sota , rey , tres , uno );

TYPE
tpTablaPuntos = ARRAY [ tpNombreCarta ] OF integer ;
{ tpTablaPuntos = ARRAY [ dos .. uno ] OF integer ; }

PROCEDURE c r e a r T a b l a Pu n t o s ( VAR t : tpTablaPuntos );


VAR
nombre : tpNombreCarta ;
BEGIN
FOR nombre := dos TO siete DO
t [ nombre ] := 0;
t [ caballo ] := 2;
t [ sota ] := 3;
t [ rey ] := 4;
t [ tres ] := 10;
t [ uno ] := 11;
END ;
F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 41 / 48
Contenidos

1 de nuevos tipos de datos


Mecanismos de definicion

2 Renombrado

3
Enumeracion

4 Subrango

5 Registros

6 Vectores y matrices

7 Cadenas de caracteres

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 42 / 48


Cadenas de caracteres
Array de caracteres con operadores especiales
Ejemplo: Calcular la letra del DNI
PROGRAM letraDNI ;
CONST
letras = T R W A G M Y F P D X B N J Z S Q V H L C K E ;
VAR
dni : integer ;
BEGIN
write ( DNI ? );
readln ( dni );
writeln ( Letra : , letras [( dni MOD 23) + 1]);
END .

En Pascal hay 2 mecanismos:


PACKED ARRAY OF char

STRING (menos estandar)

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 43 / 48


PACKED ARRAY OF char
PACKED:
Precede a array o registro

Minimiza el uso de memoria, a costa del tiempo de ejecucion
Por defecto, se usa alineamiento de palabra: mas memoria
de la necesaria alineando a palabras de 8 bits (1 Byte)
relativa de un dato dentro de una
Para calcular la posicion

estructura compleja basta con hacer aritmetica de bytes en

vez de sumar los tamanos de cada uno de los elementos de
la estructura y multiplicar por el desplazamiento
PACKED ARRAY OF char: array de tamano fijo con el

caracter especial chr(0) tras la ultima
usada
posicion

Sintaxis de definicion:
TYPE
tpCadena = PACKED ARRAY [1..50] OF char ;

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 44 / 48


STRING

STRING: array con algunas operaciones definidas

maximo
Tamano de 255 caracteres


No es necesario definir el tipo para ser parametro formal

de variables:
Sintaxis de creacion
VAR
cadena10 : STRING [10] { Tama~
n o m
a ximo : 10 }
cadena255 : STRING { Tama~
n o m
a ximo : 255 }

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 45 / 48


Operaciones con cadenas
Lectura: read
Escritura: write
:=
Asignacion:
directa
! Algunos lenguajes no permiten asignacion
[]
Acceso a una posicion:
<, <=, >=, >, =, <>
Comparacion:

Se hace caracter
a caracter, hasta que una cadena difiera
de la otra, siendo menor la que tiene menor ordinal
abcd < abd devuelve true
Ab < AC devuelve false
cadena1 + cadena2
Concatenacion:
hola + mundo devuelve hola mundo
F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 46 / 48
Operaciones con STRING

Longitud

! Estandar (no funciona en DevPascal): cadena[0]
length(cadena)

Busqueda

De una subcadena dentro de una cadena
pos(subcadena, cadena)

Paso de real/entero a cadena:


str(numeroReal, cadena)

Paso de cadena a real/entero:


val(cadena, numeroReal, error)

error vale 0 si hubo error en la conversion
F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 47 / 48
Operaciones con STRING

de una subcadena
Extraccion
cadena2 := copy(cadena1, posInicial, numCaracteres)

Borrado de una subcadena


delete(cadena, posInicial, numCaracteres)

de una subcadena
Insercion
insert(cadena, subcadena, posInicial)

! Si se utiliza PACKED ARRAY OF char deben ser


implementadas por el programador

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 47 / 48


Aspectos avanzados


No es estandar sea
que el valor devuelto por una funcion
un tipo no predefinido

Los parametros formales de un subprograma deben ser
TYPE
tipos predefinidos o definidos en la seccion
Registros con variantes (campos del registro variables): no
vistos en el curso

Muchos lenguajes (como Java o C++) tienen muchas mas
operaciones implementadas sobre las cadenas de
caracteres

F. Bobillo (DIIS, Unizar) Tema 5: Tipos de datos no predefinidos Curso 2015/2016 48 / 48

S-ar putea să vă placă și