Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
PROGRAMACIÓN I-2019 Teoría – Ma. Virginia Ainchil 1 Tipo de dato REGISTRO Concepto Declaración en Pascal Ejercitación TEMAS de la CLASE 1 TEORIA 7 3 Estructurados Registros Tipos de Numérico Carácter Lógico Tipos de Datos Simples Compuestos (definidos por el usuario) Def. por el lenguaje Def. por el usuario Subrango String Conjunto Trabajaremos con el tipo de dato estructurado REGISTRO Tipo de dato Registro Una de las primeras estructuras de datos básica, con la que vamos a trabajar es la de registro. El registro es uno de los tipos de datos estructurados, que permiten agrupar diferentes clases de datos en una estructura única. Pensemos en los siguientes ejemplos… Nombre DNI Fecha Nac. NroLegajo Sexo Sueldo Antigüedad Empleado Nombre Nro. Alumno Datos Personales Materias que cursa Materias aprobadas Alumno Origen Destino Fecha envío Mensaje Mensaje Código Marca Nombre Precio Fecha de vencimiento Producto 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 producto. Cada dato que compone el Registro se denomina CAMPO. Por lo tanto, se podrá definir al tipo Registro del producto como: Código Nombre Fecha Vencimiento Marca Precio Tipo de dato Registro Pensemos como representamos los otros ejemplos vistos: Futuros candidatos Nombre Nro. Alumno Datos Personales Materias que cursa Materias aprobadas Nombre DNI Fecha Nac. NroLegajo Sexo Sueldo Antigüedad Origen Destino Fecha envío Mensaje Tipo de dato Registro Un registro es una estructura de datos que cumple con: Los valores pueden ser de diferentes tipos, esto convierte a un registro en una estructura de datos heterogénea. El almacenamiento ocupado por un registro es fijo, por esto, un registro es una estructura estática. El acceso a sus componentes (campos) es directo. Debe referenciarse a través de su nombre. Nombre DNI Fecha Nac. NroLegajo Sexo Sueldo Antigüedad Nombre Nro. Alumno Datos Personales Materias que cursa Materias aprobadas Origen Destino Fecha envío Mensaje Código Marca Nombre Precio Fecha de vencimiento Tipo de dato Registro – Características Se identifica el nombre del tipo como registro (RECORD). Se especifica el nombre y tipo de los campos individuales que componen el tipo. La lista de campos se encierra entre las palabras claves record y end. Cada uno de los campos tiene un identificador. Los campos pueden ser nombrados individualmente, como variables ordinarias. Los campos pueden ser de cualquier tipo predefinido o definidos por el usuario (estáticos). Type nombre = record Campo1: tipoA; Campo2: tipoB; ..... end; Var nombre-variable:nombre; Tipo de dato Registro – Declaración en Pascal Type cadena15 = string [15]; producto= Record codigo: integer; Nombre: cadena15; Marca: cadena15; FechaVenc????? Precio: real End; Var prod: producto; Código Marca Nombre Precio Fecha de vencimiento Tipo de dato Registro – Declaración en Pascal Type fecha = record día: 1..31; mes: 1..12; año: 1900..2100; end; Type cadena15 = string [15]; fecha = record día: 1..31; mes: 1..12; año: 1900..2100; end; producto= Record codigo: integer; nombre: cadena15; marca: cadena15; fechaVenc: fecha; Precio: real End; Var prod: producto; Código Marca Nombre Precio Fecha de vencimiento El tipo fecha puede ser definido como un registro ¿Cuál es la ocupación en memoria para prod? Tipo de dato Registro – Declaración en Pascal Para acceder a los campos de un registro, se necesita especificar tanto el nombre del registro como el del campo que interesa. Esto se denomina calificar al campo. En Pascal se hace de la siguiente forma: Nombre-Registro.nombre-campo Prod.fechaVenc.dia Prod.nombre Prod.precio prod.marca Tipo de dato Registro – Acceso a los campos Type cadena15 = string [15]; fecha = record día: 1..31; mes: 1..12; año: 1900..2100; end; producto= Record codigo: integer; nombre: cadena15; marca: cadena15; fechaVenc: fecha; Precio: real End; Var prod: producto; Dado que el Registro es un tipo de dato estructurado, las operaciones deberán aplicarse a cada uno de los campos que lo componen. Asignación Comparación Lectura/escritura Como los campos de un registro son variables de algún tipo, las operaciones posibles sobre un campo son las permitidas para el tipo de dato correspondiente. Operaciones aplicadas a los campos de un registro Type cadena15 = string [15]; fecha = record día: 1..31; mes: 1..12; año: 1900..2100; end; producto= Record codigo: integer; nombre: cadena15; marca: cadena15; fechaVenc: fecha; Precio: real End; Var prod: producto; Asignación prod.nombre := ‘Yerba’ prod.marca := ‘SanCor’ Prod.fechaVenc.año:=2019 prod.precio :=20 Operaciones aplicadas a los campos de un registro Type cadena15 = string [15]; fecha = record día: 1..31; mes: 1..12; año: 1900..2100; end; producto= Record codigo: integer; nombre: cadena15; marca: cadena15; fechaVenc: fecha; Precio: real End; Var prod: producto; Comparación if (prod.precio > 30) and (prod.precio <50) then …. while (prod.marca= ‘SanCor’) do begin if prod.fechaVenc.año=2018 then …. if prod.precio=20 then …. Operaciones aplicadas a los campos de un registro Type cadena15 = string [15]; fecha = record día: 1..31; mes: 1..12; año: 1900..2100; end; producto= Record codigo: integer; nombre: cadena15; marca: cadena15; fechaVenc: fecha; Precio: real End; Var prod: producto; Lectura Observar que el orden en que se leen los campos del registro podría no coincidir con el orden especificado en la declaración del tipo empleado ¿Por qué? Escritura Read (prod.marca); Read (prod.codigo); Read (prod.fechavenc.mes); write (prod.marca); write (prod.nombre); write (prod.fechavenc.año); Operaciones aplicadas a los campos de un registro Type cadena15 = string [15]; fecha = record día: 1..31; mes: 1..12; año: 1900..2100; end; producto= Record codigo: integer; nombre: cadena15; marca: cadena15; fechaVenc: fecha; Precio: real End; Var prod: producto; Operaciones permitidas para el tipo Registro La única operación permitida entre registros es la de Asignación, siempre y cuando, los dos registros estén definidos del mismo tipo. Type cadena15 = string [15]; fecha = record día: 1..31; mes: 1..12; año: 1900..2100; end; producto= Record codigo: integer; nombre: cadena15; Marca: cadena15; FechaVenc:fecha; Precio: real End; Var prod1, prod2: producto; Begin ……. prod2 := prod1; …….. ¿Cómo se comparan variables de tipo registro? No pueden realizarse comparaciones entre registroscompletos, es decir para saber si dos registros son iguales, se debe evaluar cada uno de los campos. function iguales (f1, f2 : fecha) : boolean; begin iguales:= (f1.dia=f2.dia) and (f1.mes=f2.mes) and (f1.año = f2.año); end; Type fecha = record día: 1..31; mes: 1..12; año: 1900..2100; end; Comentarios sobre el parámetro de la función… Para comparar dos registros puede realizarse una función de la forma: Ejemplo para la lectura del registro Producto Type cadena15 = string [15]; fecha = record día: 1..31; mes: 1..12; año: 1900..2100; end; producto= Record codigo: integer; nombre: cadena15; marca: cadena15; FechaVenc:fecha; Precio: real End; Var prod: producto; Comentarios sobre el parámetro del procedimiento… Procedure LeerProducto (Var prod: producto); begin Readln (prod.codigo); Readln (prod.nombre); Readln (prod.marca); Readln (prod.fechaVenc.dia); Readln (prod.fechaVenc.mes); Readln (prod.fechaVenc.año); Readln (prod.precio); end; ¿Por qué conviene tener un procedimiento de lectura? Se leen 100 datos correspondientes a los productos de un supermercado. Obtener un listado con los nombres de los productos con precio entre 25 y 50 pesos e informar la cantidad de productos de marca ‘Ala’. Ejercitación Type cadena15 = string [15]; fecha = record día: 1..31; mes: 1..12; año: 1900..2100; end; producto= Record codigo: integer; nombre: cadena15; marca: cadena15; fechaVenc:fecha; precio: real End; Program ejemplo; Type cadena15 = string [15]; fecha = record día: 1..31; mes: 1..12; año: 1900..2100; end; producto = Record codigo: integer; nombre: cadena15; marca: cadena15; fechaVenc:fecha; Precio: real End; {implementación módulo LeerFecha} {implementación módulo LeerProducto} var prod:producto; cant, i: integer; begin {Programa principal} cant:= 0; for i:= 1 to 100 do begin LeerProducto (prod); if (prod.precio >=25 and prod.precio <=50) then Writeln (prod.nombre); if (prod.marca = ‘Ala’) then cant := cant +1; end; write (cant) end. Procedure LeerProducto (Var prod: producto); begin Readln (prod.codigo); Readln (prod.nombre); Readln (prod.marca); LeerFecha (prod.fechaVenc); Readln (prod.precio); end; Inicializar cantidad Repetir 100 Leer producto si precio entre 25 y 50 entonces muestro nombre si marca = Ala then incremento cantidad Fin Mostrar cantidad Se leen 100 datos correspondientes a los productos de un supermercado. Obtener un listado con los nombres de los productos con precio entre 25 y 50 pesos e informar la cantidad de productos de marca ‘Ala’. Procedure LeerFecha (Var f:fecha); begin Readln (f.dia); Readln (f.mes); Readln (f.año); end; Se leen datos correspondientes a los productos de un supermercado. La lectura finaliza con código igual a -1. Obtener un listado con los nombres de los productos con precio entre 25 y 50 pesos e informar la cantidad de productos de marca ‘Ala’. Ejercitación Type cadena15 = string [15]; fecha = record día: 1..31; mes: 1..12; año: 1900..2100; end; producto= Record codigo: integer; nombre: cadena15; marca: cadena15; fechaVenc:fecha; precio: real End; Procedure LeerProducto2 (Var prod: producto); begin Readln (prod.codigo); if (prod.código <> -1) then begin Readln (prod.nombre); Readln (prod.marca); LeerFecha (prod.fechaVenc); Readln (prod.precio); end; end; Se leen datos correspondientes a los productos de un supermercado. La lectura finaliza con código igual a -1. Obtener un listado con los nombres de los productos con precio entre 25 y 50 pesos e informar la cantidad de productos de marca ‘Ala’. Program ejemplo; Type cadena15 = string [15]; fecha = record día: 1..31; mes: 1..12; año: 1900..2100; end; producto = Record codigo: integer; nombre: cadena15; marca: cadena15; fechaVenc:fecha; Precio: real End; {implementación módulo LeerFecha} {implementación módulo LeerProducto} var prod:producto; cant: integer; begin {Programa principal} cant:= 0; LeerProducto2 (prod); While (prod.codigo <> -1) do begin if (prod.precio >=25 and prod.precio <=50) then Writeln (prod.nombre); if (prod.marca = ‘Ala’) then cant := cant +1; LeerProducto2 (prod); end; write (cant) end. Inicializar cantidad Leer producto Mientras producto <> -1 si precio entre 25 y 50 entonces muestro nombre si marca = Ala then incremento cantidad leer otro producto Fin Mostrar cantidad Procedure LeerFecha (Var f: fecha); begin Readln (f.dia); Readln (f.mes); Readln (f.año); end;
Compartir