Actualizado el 21 de Marzo del 2018 (Publicado el 3 de Enero del 2018)
621 visualizaciones desde el 3 de Enero del 2018
2,0 MB
43 paginas
Creado hace 10a (30/09/2014)
Teoría – Cecilia Sanz
Temas
Estructura de datos
Registro
Definición – Operaciones
Ejemplos
Cláusula WITH
Estructura de datos - Ejemplo
Nombre
Raza
Edad
Peso
Nombre
Número de documento
Domicilio
Fecha de Nacimiento
Película
Título
Director
Año
Persona
Un REGISTRO nos permitirá representar estos datos
Una manera natural y lógica de agrupar la información de cada empleado en
una sola estructura es declarar un tipo REGISTRO asociando el conjunto de
datos de cada empleado.
Cada dato que compone el Registro se denomina CAMPO.
Por lo tanto, se podrá definir al tipo Registro del empleado como:
Campos
del
registro
Nombre
DNI
Fecha Nac.
NroLegajo
Sexo
Sueldo
Antigüedad
Estructura de datos – REGISTRO
Heterogénea
Estática
Campos
pelicula
Título: string
Director:string
Año:integer
Categoría: char
Título: string
Director:string
Año:integer
Categoría: char
2 string
2 integer
1 char
Los valores almacenados
en un registro son
llamados campos, y cada
uno de ellos tiene un
identificador. Los campos
pueden ser nombrados
individualmente, como
variables ordinarias.
Registros
DECLARACIÓN DE UN REGISTRO
Estructura de datos – REGISTRO
Se declara en la zona del TYPE
S
A
C
I
T
S
I
R
E
T
C
A
R
A
C
Type
identificador = RECORD
campo1: tipo;
campo2: tipo;
end;
Var
nombreVariable: identificador;
Estructura de datos – REGISTRO
Los campos se identifican de a uno junto al tipo al que
pertenecen.
Type
identificador = RECORD
campo1: tipo;
campo2: tipo;
end;
Puede ser de cualquier
tipo predefinido, o
definido por el usuario
(subrango, string)
S
A
C
I
T
S
I
R
E
T
C
A
R
A
C
Estructura de datos – REGISTRO - Ejemplo
Program uno;
Type periodo=1950..2014;
pelicula = record
titulo: string;
director:string;
año:periodo;
categoria: char;
end;
Var
peli1,peli3:perro;
Begin
… OPERACIONES?
End.
Registros
OPERACIONES
Registros
Asignación
Estructura de datos – REGISTRO – Operaciones
Con la variable REGISTRO
Sólo se puede realizar la
operación de asignación.
peli1:= peli3;
siendo peli1 y peli3 del
mismo tipo registro
Con los campos del registro
Las operaciones con los campos
del registro son las que el tipo de
campo permita. Para acceder a un
campo se utiliza
la notación
calificada:
nombrevarregistro.campo
peli1.director
permite
válidas para un entero.
todas
las operaciones
Estructura de datos – REGISTRO
¿Cómo le asignamos valor a un registro?
Program uno;
Type
periodo=1950..2014;
pelicula = record
titulo: string;
director:string;
año:periodo;
categoria: char;
end;
Var
p1,p3:pelicula;
Begin
p1.titulo:=“La era del hielo”;
p1.director:= “Chris Wedge”;
p1.año:= 2002;
p1.categoria:=‘A’;
End.
¿Qué pasa si no asignamos
todos los campos?
Registros
Lectura de sus datos
Estructura de datos – REGISTRO
¿Cómo le asignamos valor a un registro?
Program uno;
Type
perro = record
nombre: string;
raza:string;
edad:integer;
cant-come: integer;
peso:real;
end;
si no
los
todos
¿Qué pasa
leemos
campos?
Var
p1,p3:perro;
Begin
read(p1.nombre);
read(p1.raza);
read(p1.edad)
read(p1.cant-come);
read(p1.peso);
End.
NO SE PUEDE
read(p1);
¿Cómo
modularizamos?
Estructura de datos – REGISTRO
¿Cómo le asignamos valor a un registro?
Program uno;
Type
perro = record
…
end;
Procedure
p:perro);
begin
read (p.nombre);
leer
(var
read(p.raza);
read(p.edad)
read(p.cant-come);
read(p.peso);
End;
Var
p1:perro;
Begin
leer(p1);
End.
¿Cómo imprimimos
los datos de un
registro?
Registros
Impresión de los datos que lo
componen (CAMPOS)
Estructura de datos – REGISTRO – Cómo le
imprimimos un registro?
Program uno;
Type
perro = record
…
end;
Var
p1:perro;
Begin
leer(p1);
write(p1.nombre);
write(p1.raza);
write(p1.edad);
write(p1.cant-come);
write(p1.peso);
End.
NO SE PUEDE
write(p1);
¿Pueden no imprimirse
todos los campos?
Cómo
modularizamos
?
Estructura de datos – REGISTRO – Cómo
imprimimos un registro?
Program uno;
Type
perro = record
…
end;
Procedure imprimir (p:perro);
begin
write(p.nombre);
write(p.raza);
write(p.edad)
write(p.cant-come);
write(p.peso);
End;
Var
p1:perro;
Begin
leer(p1);
imprimir(p1);
End.
Registros
¿Comparación?
Estructura de datos – REGISTRO – ¿Cómo
comparamos dos registros?
Se debe realizar la comparación campo a campo.
No se puede realizar en forma directa entre dos variables
registro, es decir,
if (p1 = p3) then
Estructura de datos – REGISTRO – Cómo
comparamos dos registros?
Program uno;
Type
perro = record
…
end;
Procedure leer(VAR p:perro);
begin
…
end;
Var
p1,p3:perro;
Begin
leer(p1);
leer(p3);
if (p1.nombre = p3.nombre)and
(p1.edad = p3.edad)and
(p1.raza = p3.raza)and
(p1.cant-come = p3.cant-come)and
(p1.peso = p3.peso)then ….
end.
Registros
EJEMPLO
Estructura de datos – REGISTRO – Ejercicio
Se pide realizar un programa que lea datos sobre los perros que
visitan una veterinaria hasta leer uno con nombre “XXX”. Al
finalizar informar la cantidad de perros de raza ovejero, y la
cantidad de perros de 2 años que comen una vez por día.
nombre=“XXX”
nombre=“HOOK”
raza=“ovejero”
edad=2
cant-come=1
Peso=35,5
nombre=“PUPI”
raza=“labrador”
edad=2
cant-come=3
Peso=40,8
nombre=“MIK”
raza=“ovejero”
edad=2
cant-come=2
Peso=35,5
2
1
Estructura de datos – REGISTRO – Ejercicio
Program uno;
Type
perro = record
…
end;
Procedure leer(VAR p:perro);
begin
…
end;
Var
p:perro; cantO,cantTot:integer;
Begin
leer(p); cantO:=0; cantTot:=0;
while(p.nombre<>”XXX”) do
begin
if (p.raza= “ovejero”) then
cantO:= cantO+1;
if (p.cant= 1) and (p.edad=2) then
cantTot:= cantTot+1;
leer(p);
end;
Informar(cantO, cantTot);
end.
Registros
¿Se puede tener como campo de un
registro otro registro?
Estructura de datos – REGISTRO de REGISTROS
perro = record
nombre: string;
raza:string;
edad:integer;
cant-come: integer;
peso:real;
dia:1..31;
mes:1..12;
año:1900..2012;
end;
fecha=record
dia:1..31;
mes:1..12;
año:1900..2010;
end;
perro = record
nombre: string; raza:string;
edad:integer; cant-come: integer;
peso:real;
fec:fecha;
end;
damos valor?
Nacimiento
¿Cómo le
Estructura de datos – REGISTRO de REGISTROS
Program dos;
type
fecha=record
dia:1..31;
mes:1..12;
año:1900..2010;
end;
perro = record
nombre:string;
raza:string;
edad:integer;
cant-come: integer;
peso:real;
fec:fecha;
end;
Var p1:perro;
Begin
p1.nombre:=“HOOK”;
p1.raza:= “Ovejero”
p1.edad;= 2;
p1.cant-come:=1
p1.peso:=35,5;
p1.fec.dia:=5;
p1.fec.mes:=3;
p1.fec.año:=2007;
end.
Estructura de datos – REGISTRO de REGISTROS
Program dos;
type
fecha=record
…
end;
perro = record
…
end;
Var
p1:perro;
Procedure leer (var p:perro)
Begin
read(p.nombre);
read(p.raza);
read(p.edad);
read(p.cant-come);
read(p.peso);
read(p.fec.dia);
read(p.fec.mes);
read(p.fec.año);
end;
Registros
EJEMPLOS
Estructura de datos – REGISTRO Ejercicio
Realice un programa que lea información sobre los
bebés nacidos en La Plata en el último año, hasta leer
uno de nombre Lolo e informe el nombre del bebé con
mayor peso, y la cantidad de bebés nacidos en junio.
Estructura de datos – REGISTRO Ejercicio
Program bebes;
Type
cadena=string[30]; dias=1..31; meses: 1..12; años=2011..2014;
fecha= record
dia: dias;
mes: meses;
año: años;
bebe=record
apellido: cadena;
nombre: cadena;
peso: real;
fnac: fecha;
end;
Estructura de datos – REGISTRO Ejercicio
Var
b:bebe;
cantJunio:integer;
max:real;
maxNom:cadena;
Begin
leer(b);
max:=-1;
cantJunio:=0;
while (b.nombre<>’Lolo’) do
begin
if (b.fnac.mes=6) then cantJunio:= cantJunio + 1;
if (b.peso > max) then
begin
max:= b.peso;
maxNom:=b.nombre;
end;
leer(b);
end;
write(maxNom, cantJunio);
End.
Estructura de datos – REGISTRO – EJERCICIO
Se pide realizar un programa que lea información de grupos
de música. De cada grupo se cuenta con (nombre, canción,
votos recibidos). Se pide calcular e informar el grupo que ha
obtenido en promedio más votos por sus canciones. Tenga en
cuenta los siguientes puntos:
• La lectura termina cuando llega el grupo de nombre ZZZ.
• Un grupo puede tener más de una canción
• Todas las canciones de un grupo se leen consecutivas
Estructura de datos – REGISTRO – Ejercicio
Nombre= ‘Agapornis’
Cancion= ‘La llave’
Votos= 4000
Nombre= ‘Miranda’
Cancion=‘Es Mentira’
Votos= 1000
Nombre= ‘Agapornis’
Cancion=
‘Persiana
Americana’
Nota= 6000
Nombre= ‘Miranda’
Promedio = 1000
Nombre= ‘Agapornis’
Promedio = 5000
Nombre= ‘Los Piojos’
Cancion= ‘Ll
Comentarios de: clase6 PARTE II Registros (0)
No hay comentarios