Está en la página 1de 15

I.P.1 curso 2005/2006 TEMA 5.

Tablas y registros

TEMA 5 Tablas y registros

5.1 ACCESO SECUENCIAL Y ACCESO DIRECTO.


Sean:
1, 1, 2, 3, 5, 8, 13, ... f(1)=1, f(2)=1, f(i)=f(i-1)+f(i-2)

12, 19, 26, 33, ... g(i)= 5+ 7*i


si queremos calcular: a) los dos términos siguientes
b) los términos noveno y decimoquinto.
distinto camino: en el primer caso paso a paso y en el segundo
será necesario aplicar la regla de la sucesión
acceso secuencial = es necesario acceder a los anteriores
acceso directo = se puede acceder a uno por su posición

5.2 Acceso directo


acceso directo = para "visitar” (acceder, alcanzar) a un
elemento no es necesario pasar (visitar)
por los elementos anteriores.
ejemplos: gráfico de temperaturas a lo largo de un día
tabla de población por provincias de España.
a la sucesión 5 + 7i se puede asociar una tabla como:
i ai
1 12
2 19
3 26
4 33
... ...

para las temperaturas máximas, por día, de una ciudad a lo largo


de la semana:
1
I.P.1 curso 2005/2006 TEMA 5. Tablas y registros

lunes 22
martes 23
miercoles 21
jueves 20
viernes 22
sabado 25
domingo 25

el acceso a los elementos mediante un índice = un elemento


de un conjunto ordenado y finito.
Los elementos de un tipo básico o definido previamente.

5.3 Tablas

5.3.1 Declaración, literales y operaciones

tabla = estructura de datos homogénea , con acceso


directo, lineal y de tamaño finito.
• estructura = colección de uno o más elementos del
mismo o distinto tipo y agrupados bajo
un mismo nombre.
• homogénea = todos los componentes del mismo tipo.
• acceso directo = se puede acceder a cualquier
elemento directamente por su
posición = índice.
• lineal = almacenada en memoria secuencialmente
• tamaño finito = número de elementos fijo,
especificado en la definición = dimensión

2
I.P.1 curso 2005/2006 TEMA 5. Tablas y registros

Clases de tablas:
(por los índices necesarios para acceder a un elemento)

Unidimensionales o vectores= conjunto ordenado de N


elementos.
índice de un elemento = posición del elemento
i ∈ {1,.....i,.....,N}; i:entero
Límite superior = valor máximo del índice = dimensión
Límite inferior = valor mínimo del índice = 1
límite inferior ≤ índice ≤ límite superior

Bidimensionales o matrices = vector de vectores


de igual dimensión = nº de columnas
cada elemento del vector = filas de la matriz
matriz = colección de vectores (escritos por filas)
dos índices = nº fila y nº columna

Tridimensionales o cubos = vector de matrices


tres índices = alto, ancho y profundidad
• • •

DECLARACIÓN
nombre_de_la_tabla : tabla [N] de Tb
N = nº de elementos de la tabla (vector)= dimensión
Tb = tipo de sus elementos

Ejemplos:
constantes
NDIAS: 365; NHORAS:24
tipos
Ttdia: tabla [NHORAS] de real
Ttanual: tabla [NDIAS] de real
Tnombre_mes : tabla [10] de caracter
variables
temperaturas_dia: Ttdia
temperaturas_año: Ttanual
3
I.P.1 curso 2005/2006 TEMA 5. Tablas y registros
nombre_mes: Tnombre_mes
tab_meses : tabla[12] de cadena (tipo anónimo)

LITERALES.
constantes
N:...
tipos
Tb:...
Tt: tabla[N] de Tb
variables
t: Tt
L={{a1, a2, ... aN} ⏐ ai ∈ Tb ∧1≤i≤N}
si t es un literal del tipo Tt ⇒ t = {a1,...,aN}.

OPERACIONES O : { _ [_] , _[_->_] }


declarado e:Tb

Descripción Perfil
Condiciones
Acceso _[_] : Tt x entero → Tb
Def(t[i]) ≡ 1 ≤ i ≤ N
Modificación _[_→_] : Tt x entero x Tb
→ Tt
Def(t[i→e]) ≡ 1 ≤ i ≤ N

semántica:
siendo t={a1, a2,..., ai,..., aN} y e:Tb
acceso e := t[i] ≡ e:=ai
modificación t := t[i→e] abreviadamente t[i] := e
t[i] := e ≡ t := {a1, ..., ai-1, e, ai+1, ..., aN}

en la operación de acceso si la posición no está


inicializada, se obtendrá un valor sin determinar

INICIALIZACIÓN: t := {a1, a2, ... aN}


4
I.P.1 curso 2005/2006 TEMA 5. Tablas y registros

MATRICES.
DECLARACIÓN:
nombre_matriz: tabla [dim1] de tabla [dim2] de Tb
brevemente: nombre_matriz: tabla [dim1, dim2] de Tb
constantes
NDIAS: 365; NHORAS:24; N : 10 ; M :31 ; MESES : 12
tipos
Ttdia: tabla [NHORAS,M] de real
Ttemp: tabla [NDIAS,NHORAS] de real
Ttnombres: tabla [MESES,N] de caracter
variables
t: Ttemp
nombres : Ttnombres
ventas : tabla [M,MESES] de entero
LITERALES:
cons
N : ... M : ...
tipos
Tt : tabla [N,M] de Tb
var
t : Tt
L={{a11,..., a1M},..,{aN1,..., aNM}⏐ai,j∈Tb∧ 1≤i≤ N ∧1≤j≤ M}
OPERACIONES
e := t[i,j]
t[i,j] := e
Inicialización: t := {{a11,..., a1M},...,{aN1,..., aNM}}

5
I.P.1 curso 2005/2006 TEMA 5. Tablas y registros

5.3.2 Esquemas de recorrido


vectores:
inicializar_el_tratamiento
i:=1
mientras i <=N
tratamiento_elemento_i-esimo(t[i])
i:=i+1
fmientras
tratamiento_final

para facilitar la escritura:


desde variable_indice :=valor_inicial hasta valor_final
sentencias
fdesde
el incremento de la variable_índice =+1
inicializar_el_tratamiento
desde i :=1 hasta N
tratamiento_elemento_i-esimo(t[i])
fdesde
tratamiento_final
ejemplo: sumar las ventas de una empresa almacenadas en
una tabla para cada uno de los meses del año.
alg Sumar ventas
cons NMESES : 12
ent t: tabla [NMESES] de entero
sal suma : entero
var
i: entero
principio
i,suma := 1,0
mientras i <= NMESES
suma := suma + t[i]
i := i + 1
fmientras
escribir "Suma total", suma
fin
6
I.P.1 curso 2005/2006 TEMA 5. Tablas y registros

con la composición desde


principio
suma := 0
desde i :=1 hasta NMESES
suma := suma + t[i]
fdesde
escribir "Suma total", suma
fin

matrices:

variables
i,j: entero
principio
inicializar_tratamiento_1
desde i := 1 hasta N
inicializar_tratamiento_2
desde j := 1 hasta M
tratar_elemento_fila_i_columna_j(t[i,j])
fdesde
tratamiento_final_2
fdesde
tratamiento final_1
fin

7
I.P.1 curso 2005/2006 TEMA 5. Tablas y registros

EJEMPLO : Sumar las ventas anuales de una empresa con los


datos almacenados en una matriz, por departamento y día
algoritmo ventas_anuales
constantes
NDEPAR : 10; NDIAS : 365
ent ventas : tabla [NDEPAR,NDIAS] de entero
sal suma: entero
variables i,j : entero
principio
suma :=0
desde i := 1 hasta NDEPAR
desde j := 1 hasta NDIAS
suma:= suma + ventas [i,j]
fdesde
fdesde
fin

5.3.3 Esquemas de búsqueda

1. Búsqueda lineal
algoritmo Existe un cero en un vector
cons N : 20
ent t: tabla [N] de entero
sal existe:logico
variables
i: entero
principio
existe, i := falso, 1
mientras i <= N y no existe
si t[i]= 0:
existe:= cierto
|otras:
i:= i+1
fsi
fmientras
fin
8
I.P.1 curso 2005/2006 TEMA 5. Tablas y registros

2. Búsqueda binaria o dicotómica.


aprovecha la ventaja del acceso directo
la tabla (vector) ha de encontrarse ordenada.
algoritmo Esquema de busqueda binaria
ent t: tabla [N] de Tb; v: Tb
sal posicion:entero
pasos:
· compara el valor buscado, v, con el elemento central
· si coincide termina, posicion = indice donde está v
· si no, decide en que parte puede encontrarse
· si se encuentra en una mitad del vector no puede
encontrarse en la otra, vuelve al primer paso
. si no existe v en el vector, terminará y posicion=0
variables
primero, ultimo: entero; encontrado: logico
principio
primero, ultimo, encontrado := 1, N, falso
mientras primero<=ultimo y no encontrado
posicion:=(primero+ultimo)/2
si t[posicion] = v :
encontrado := cierto
⏐t[posicion] < v :
primero:=posicion+1
⏐t[posicion] > v :
ultimo := posicion-1
fsi
fmientras
si no encontrado:
posicion := 0
⏐otras:
nula
fsi
fin

9
I.P.1 curso 2005/2006 TEMA 5. Tablas y registros

5.3.4 Esquemas de Ordenación


Ordenar la información = organizar la información de un
conjunto de datos según un criterio
si existe orden total en el tipo, será creciente o decreciente
elegir método por tamaño, tipo datos y memoria disponible
común (ordenación creciente):
ent/sal t : tabla [N] de Tb

1. ordenación por selección directa:


. seleccciona el menor elemento del vector y lo
intercambia con el de la primera posición
. selecciona el menor del subvector desde el segundo al
ultimo y lo intercambia con el de la segunda
. así hasta el elemento situado en la posición N - 1.
si suponemos ordenado el subvector de 1 a i-1, sus
elementos serán menores que los situados entre i y N,
buscará en este subvector el menor e intercambiará su
valor con el de la posición i-ésima, obteniendo el vector de i
elementos ordenados

var i,j,pos : entero


prin
i := 1
mientras i < N
pos, j := i, i+1
mientras j <= N
si t[pos] > t[j] :
pos := j
fsi
j := j + 1
fmientras
t[pos], t[i] := t[i], t[pos]
i := i+1
fmientras
fin

10
I.P.1 curso 2005/2006 TEMA 5. Tablas y registros

2. ordenación por inserción directa:


suponiendo ordenados los N – i elementos situados desde la
posición i+1 hasta la N, para obtener el subvector con N - i+1
elementos ordenados, los anteriores y el situado en la posición i-
ésima, se tendrá que:
. buscar la nueva posición (j) del i-ésimo en el subvector,
para que quede igualmente ordenado
. insertar dicho elemento en ese lugar, ⇒ abrir un hueco y
desplazar cada uno de los elementos situados de la i+1 a la
j, a la posición anterior a la que ocupa
variables i, j, k : entero; x : Tb
principio
i := N - 1
mientras i > 0
x, k, j := t[i], i, N
mientras k <> j
si t[k + 1]<x:
t[k],k := t[k+1], k +1
| t[k+1] >=x: j := k
fsi
fmientras
t[k] := x
i := i - 1
fmientras
fin
tambien: principio
desde i := 2 hasta N
x, k, j := t[i], i,1
mientras k <> j
si t[k -1]>x: t[k],k := t[k-1], k-1
| t[k-1] <=x: j := k
fsi
fmientras
t[k] := x
fdesde
fin
11
I.P.1 curso 2005/2006 TEMA 5. Tablas y registros
5.4 Registros
registro = conjunto de elementos, de distinto tipo,
relacionados con una entidad particular
ejemplo: para identificar a una persona:
nombre, apellidos : cadena
dni, edad : entero
sexo, estado_civil : caracter
etc...
constructor de tipos ⇒ estructuras con datos no homogéneos
registro = producto cartesiano entre tipos

elemento = lista de literales de los tipos componentes=tupla
componente = campo → identificador y tipo

5.4.1 Declaración, literales y operaciones


Declaración:
registro (reg)
lista1_nombres_campos : tipo1_campo
lista2_nombres_campos : tipo2_campo
...
fregistro (freg)
EJEMPLO: tipos
Tpersona : registro
nombre, apell1, apell2 : cadena
dni, edad: entero
sexo, estado_civil : caracter
fregistro
variables
alumno, empleado : Tpersona
articulo : registro
codigo : entero
familia : caracter
descripcion : cadena
precio : real
existencia : entero
fregistro

12
I.P.1 curso 2005/2006 TEMA 5. Tablas y registros

Literales: Sea:
tipos
Tr: registro
c1: T1
c2: T2
...
cn: Tn
fregistro
variables
r: Tr
L = { {l1, ..., ln} ⏐ li ∈ Ti ∧ 1 ≤ i ≤ n }
r = {l1,...ln}
Operaciones:
Siendo e:Ti
Descripción Perfil
Condiciones
Acceso _.ci : Tr → Ti
Def(r.ci) ≡ cierto
Modificación _[ci→e] : Tr x Ti → Tr
Def(r.[ci→e]) ≡ cierto
semántica:
r.ci = li , para usar en:
e:= r.ci o en una expresión ... r.ci...
r[ci→e] (r.ci := e) ≡ r= { l1,l2...li-1, e , li+1, ... ln}
para inicializar registros: r := {l1, ..., ln}
ejemplo:
alumno := {“Ana”,”Ruiz”,”Gil”,25635987,18,’m’,’s’}
es posible empleado := alumno

13
I.P.1 curso 2005/2006 TEMA 5. Tablas y registros

5.4.2 Tablas de registros


los elementos de la tabla son de tipo registro
EJEMPLO :
constantes
N: 200
variables
clase: tabla [N] de Tpersona
nombre : cadena
prin
...
alumno : = clase[125]
...
nombre := clase[10].nombre
...
clase[99] := alumno
...
clase[180].edad := 22
...
fin

los esquemas para tablas son aplicables:


recorrido: calcular edad media, con edad_media: entero
edad_media := 0
desde i:= 1 hasta N
edad_media := edad_media + clase[i].edad
fdesde
edad_media := edad_media / N
búsqueda lineal: localizar el alumno de DNI 28759341
existe, i := falso, 1
mientras i <= N y no existe
si clase[i].dni=28759341:
existe:=cierto
⏐otras: i := i+1
fsi
fmientras

14
I.P.1 curso 2005/2006 TEMA 5. Tablas y registros

ordenación: método de selección, creciente y por


apell1, apell2, nombre:
desde i := 1 hasta N-1
pos := i
desde j := i+1 hasta N
si es_menor (clase[j], clase[pos]):
pos:=j
fsi
fdesde
si i <> pos:
clase[i], clase[pos]:= clase[pos], clase[i]
fsi
fdesde
con
func es_menor (c1, c2: Tpersona) dev (es: logico)
prin
es := cierto
si c1.apell1>c2.apell1:
es := falso
⏐c1.apell1=c2.apell1:
si c1.apell2>c2.apell2:
es := falso
⏐c1.apell2=c2.apell2:
si c1.nombre >=c2.nombre:
es := falso
fsi
fsi
fsi
fin

15

También podría gustarte