Sei sulla pagina 1di 8

Registros

Contents
1 Tipos en Pascal 2
1.1 Clasificacin de tipos . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Tipos estructurados . . . . . . . . . . . . . . . . . . . . . . . . . 2

2 Tipo Registro 2
2.1 Definicin de un registro . . . . . . . . . . . . . . . . . . . . . . . 2
2.2 Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.3 Acceso a campos de registros . . . . . . . . . . . . . . . . . . . . 3

3 Array con tope 3


3.1 Definicin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
3.2 Cmo funciona . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
3.3 Crear conjunto vaco . . . . . . . . . . . . . . . . . . . . . . . . . 4
3.4 Insertar un elemento . . . . . . . . . . . . . . . . . . . . . . . . . 4
3.5 Eliminar un elemento . . . . . . . . . . . . . . . . . . . . . . . . 4
3.6 Bsqueda de un elemento . . . . . . . . . . . . . . . . . . . . . . 5

4 Registros variantes 5
4.1 Motivacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
4.2 Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
4.3 Ejemplo (cont) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
4.4 Ejemplo. Figuras . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
4.5 Creando una figura . . . . . . . . . . . . . . . . . . . . . . . . . . 7
4.6 Asignacin del campo discriminante . . . . . . . . . . . . . . . . 7

1
4.7 rea de una figura . . . . . . . . . . . . . . . . . . . . . . . . . . 7
4.8 Comparacin de posicin . . . . . . . . . . . . . . . . . . . . . . 8

1 Tipos en Pascal

1.1 Clasificacin de tipos


Elementales
Ordinales o escalares: Integer, Char, Boolean, subrangos, enumera-
dos.
Otros: real
Estructurados:
arreglos (array)
conjuntos (set)
registros (record)

1.2 Tipos estructurados


Arreglos: Secuencias homogneas de tamao fijo. El orden es relevante y
puede haber repetidos.
Conjuntos: Conjuntos en el sentido matemtico, sin orden, no hay repeti-
dos. El tamao es variable pero acotado.
Registros: Coleccin heterognea y ordenada de datos. Conocidos como
tuplas. Tamao fijo.

2 Tipo Registro

2.1 Definicin de un registro


type
T = record
campo1 : tipo1;
campo2 : tipo2;
...
campok : tipok
end;

Donde campo-i es un identificador que da nombre a un campo y tipo-i es su


correspondiente tipo.

2
2.2 Ejemplo
Los nmeros racionales pueden representarse as:

type
TSigno = (mas,menos);
natural = 0..MaxInt;
positivo = 1..MaxInt;

racional = record
signo : TSigno;
numerador : natural;
denominador : positivo;
end;

2.3 Acceso a campos de registros


El operador . (punto) seguido del nombre del campo se utiliza para acceder a
los componentes de un registro.

var q : racional;

...
q.signo:= mas;
q.numerador:= 4;

WriteLn(q.denominador);
...

3 Array con tope

3.1 Definicin
Otra posible representacin de conjuntos es la siguiente:

Type

Conjunto = record
elems : array [1..N] of T0;
tope : 0..N
end;

donde ahora T0 no necesita ser un tipo escalar. Solo se requiere que los valores
de tipo T0 sean comparables por igualdad.

3
3.2 Cmo funciona
El array elems almacena los elementos del conjunto.
Los elementos se almacenan en las celdas 1 a tope

El campo tope apunta a la ltima posicin ocupada del array.


El conjunto vaco se representa mediante el campo tope en 0.
Pueden representarse conjuntos que contengan de 0 a N elementos

3.3 Crear conjunto vaco

type
Conj = record
elems : array [1..N] of T;
tope : 0..N
end;

Procedure CrearConjuntoVacio(var S : Conj);


begin
S.tope := 0
end;

3.4 Insertar un elemento

procedure Insertar(e : T; var S : Conj);


{ pre condicion: (e no pertenece a S) y (S.tope < N)}
begin
with S do
begin
tope := tope + 1;
elems[tope] := e
end;
end;

3.5 Eliminar un elemento

Si el elemento no est no hace nada.

procedure Eliminar(e : T; var S : Conj);


var i : integer;
begin

4
i := 1;
{ evaluacion por circuito corto }
while (i <= S.tope) and (S.elems[i] <> e) do
i : = i + 1;

if i <= S.tope then


begin
S.elems[i] := S.elems[S.tope];
S.tope := S.tope - 1
end
end;

3.6 Bsqueda de un elemento

function pertenece(e : T; S : Conj) : boolean;


var
i: integer;
begin
i:= 1;
{ evaluacion por circuito corto }
while (i <= S.tope) and (S.elemns[i] <> e) do
i:= i+1;
pertenece:= i<=S.tope;
end;

4 Registros variantes

4.1 Motivacin

Se quiere representar una entidad que puede pertenecer a diferentes categoras.


Segn la categora hay diferentes datos.
Existe un conjunto de datos comunes a todas las categoras (eventualmente
vaco).

4.2 Ejemplo

Categoras:

Estudiante:

Ao de Ingreso

5
Cantidad de materias

Docente

Carga horaria
Grado

Egresado

Ao de egreso
Ttulo

Datos comunes a todas las categoras:

Cdula.
Credencial cvica.

4.3 Ejemplo (cont)


type
TOrden = (docente,estudiante,egresado);
...
TUniveritario = record
cedula : TCedula;
credencial : TCredencial;
case orden:TOrden of
docente : (
grado: 1..5;
carga: 0..40
);
estudiante : (
semestre: 1..15;
materias: integer
);
egresado : (
egreso: 1900..3000;
titulo: TTitulo
);
end;

4.4 Ejemplo. Figuras


const
MaxFig = 30;
type
RGBColor = record
red,
green,
blue : 0..255;
end;
TipoFigura = (circulo,cuadrado,rectangulo);
punto = record
x,y: real;
end;

6
figura = record
color: RGBColor;
case clase: TipoFigura of
circulo : (
radio: real;
centro: punto
);
cuadrado: (
lado: real;
verticeSupIzq: punto
);
rectangulo: (
base,altura: real;
verticeInfIzq: punto
);
end;

4.5 Creando una figura


Para crear una figura se deben asignar los campos correspondientes de acuerdo a la categora.

(* creacin de un rectngulo *)

r.color.red:= 10;
r.color.green:= 121;
r.color.blue:= 203;

r.clase:= rectangulo;

r.base:= 12.4;
r.altura:= 345.90;

r.verticeInfIzq.x:= 0.9;
r.verticeInfIzq.y:= 19.78;

4.6 Asignacin del campo discriminante


Una vez que asignamos un valor al campo discriminante, podemos imaginar que el registro con
variante se transforma en un registro comn que solamente contiene los campos fijos y los campos
correspondientes a la opcin asignada.

Si asignamos:

r.clase:= rectangulo;

Podemos pensar en el tipo figura de este modo:

figura = record
color: RGBColor;
base,altura: real;
verticeInfIzq: punto
end;

4.7 rea de una figura


El campo discriminante es el que permite identificar cada categora.

7
function areaFigura(fig : Figura): real;
begin
with fig do begin
case fig.clase of
circulo : areaFigura := PI * sqr(radio);
rectangulo : areaFigura:= base * altura;
cuadrado : areaFigura:= sqr(lado);
end; { case }
end; { with }
end; {areaFigura}

4.8 Comparacin de posicin


function masArriba(fig: figura; alt: real): boolean;
begin
with fig do begin
case clase of
circulo : masArriba:= (centro.y - radio) > alt;
rectangulo : masArriba:= verticeInfIzq.y > alt;
cuadrado : masArriba:= (verticeSupIzq.y - lado) > alt;
end; { case }
end; {with}
end; {masArriba}

Potrebbero piacerti anche