Diseño de algoritmos usando tipos de datos estructurados heterogéneos
2.1.- Registros:
Definición, declaración y formas de representación.
Registro: Es un conjunto de datos elementales de diferentes tipos, lógicamente relacionados, los cuales se agrupan bajo un nombre común. Cada elemento del registro recibe el nombre de miembro ó campo del registro.
Ejemplo 1: Un registro de los pasajeros de un avión puede contener:
Ejemplo 2: Un registro de los clientes y las transacciones de un banco
Definición de un registro :
Un registro es un tipo de dato diseñado por el usuario, que se debe definir antes de que se pueda utilizar.
Formato de la Definición : Ej :
Registro nombre_registro Registro t_empleado
tipo nombre campo_1 caracter nombre[10]
tipo nombre campo_2 real sueldo
: entero edad
Fin Registro Fin Registro
Variables tipo registro :
Al igual que a otro tipo de datos, a un registro se accede utilizando una variable ó variables, que se deben declarar después de la definición del registro, ya que la definición especifica simplemente el nombre y el formato del registro, pero no reserva almacenamiento en memoria.
Declaración de Variables tipo registro :
Cada declaración de variable para un registro dado, crea un área en memoria , donde los datos se almacenan de acuerdo al formato estructurado declarado.
Formato de la declaración :
Nombre_ Registro Nombre_variable
Ejemplo : t_empleado obrero, administrativo
En el ejemplo , se declaran las variables obrero y administrativo del tipo de registro t_empleado , por lo que cada una de las variables consta de los campos : nombre, sueldo y edad.
Acceso a los campos de un registro :
Se puede acceder a los campos de un registro usando el operador punto ( . ). Formato : nombre_variable_ tipo_ registro. nombre_campo
Ejemplo :
obrero.nombre = Juan
Asigna al campo nombre de la variable obrero, el nombre Juan
Otra forma seria leyendo el nombre a través del teclado :
Leer (obrero.nombre)
Campos simples:
En este caso los campos del registro están formados por variables de tipo simple, por ejemplo , un registro de la nota de un curso podría definirse de la manera siguiente:
registro t_alumno
caracter nombre[20]
entero cedula
real nota
fin_registro
Campos constituidos por arreglos:
Los campos del registro pueden ser arreglos; por ejemplo, en el caso anterior , si se desea guardar cuatro notas por alumno se puede declarar el registro de la siguiente manera:
registro t_alumno
car nombre[20]
ent cedula
real nota[4]
fin_registro
nombre | cedula | nota[1] | nota[2] | nota[3] | nota[4] |
Este registro permite almacenar las 4 notas de un alumno
Si se declara una variable alumno usando ese registro t_alumno :
Para hacer referencia a un elemento del registro, se escribe:
alumno.nota[1] = 15
alumno.nota[2] = 18
Campos constituidos por registros:
En este caso, el registro interno debe definirse antes del registro principal.
Ejemplos:
1.-Se desea almacenar los datos de un producto en un registro. Cada producto debe guardar información concerniente a su código, nombre y precio. Diseñar la estructura de datos correspondiente y cargar los datos en el registro.
Algoritmo Creación de Registro
Inicio
// Definición del Registro
Registro t_producto
caracter codigo[3], nombre[10]
real precio
Fin Registro
// Declaración de la variable tipo registro
t_producto detergente
Mostrar (" Introduzca el código del producto " )
Leer (detergente.codigo)
Mostrar (" Introduzca el nombre del producto " )
Leer (detergente.nombre)
Mostrar (" Introduzca el precio del producto " )
Leer (detergente.precio)
Fin
2.- Una farmacia desea almacenar sus productos en una estructura de registros. Cada registro tiene los campos : codigo, nombre, precio, stock, fecha de vencimiento. La fecha debe guardar por separado día, mes y año , para lo cual se declarará otro regsitro.
Diseñar un algoritmo que permita :
Diseñar la estructura de datos
Mostrar los campos de un medicamento
Algoritmo Ejemplo
Inicio
Registro t_fecha
entero dia, mes, año
Fin Registro
Registro t_medicina
carácter codigo[3], nombre[10]
entero precio, stock
t_fecha vencimiento
Fin Registro
t_medicina analgésico
Mostrar ( analgésico.codigo)
Mostrar ( analgésico.nombre)
Mostrar ( analgésico.precio)
Mostrar ( analgésico.stock)
Mostrar ( analgésico.vencimiento.dia)
Mostrar (analgésico.vencimiento.mes)
Mostrar (analgésico.vencimiento.año)
Fin
Arreglos de Registros :
Se puede crear un arreglo de registros tal como se crea cualquier tipo de arreglo, indicando el nombre y la dimensión. Los arreglos de registros son usados para almacenar datos en un archivo de disco.
Declaración de un Arreglo de Registros :
Formato :
nombre_registro nombre_arreglo [ Dimensión ]
Ejemplo:
t_medicina analgésico[100]
Acceso a los campos de un Arreglo de Registros :
Formato :
nombre_arreglo[posición].nombre_campo
Ejemplo :
Leer ( analgésico[10].stock ) //Accesa el campo stock del elemen-
to ubicado en la posición 10 del arre-
glo de registros llamado analgésico.
Ejemplos :
1. Dada una tabla que contiene los datos NOMBRE, EDAD y PESO de un grupo de 300 estudiantes de una escuela primaria, Diseñar un algoritmo que permita cargar los datos y determinar cuantos estudiantes son mayores de 10 años y tienen un peso superior a 20 Kg.
algoritmo contar_alumnos
Inicio
//Definición de registro tipo alumno
Registro t_alumno
caracter nombre
entero edad
real peso
Fin Registro
//Declaración de Arreglo
t_alumno LISTA[50]
entero i, contador
//Cargar datos
repetir_desde (i = 1 ; i <= 50;i=i+1)
mostrar( "Introducir nombre, edad y peso del alumno", i )
leer(LISTA(i).nombre)
leer(LISTA(i).edad)
leer(LISTA(i).peso)
fin_repetir_desde
contador = 0
Repetir desde i (i = 1 ; i <= 50;i=i+1)
Si ((LISTA[i].edad > 10) && (LISTA[i].peso > 20))
contador = contador + 1
Fin Si
Fin Repetir desde
mostrar("Nº Alumnos EDAD > 10 y PESO > 20 : ", CONTADOR)
Fin
Aplicaciones sobre Arreglos de Registros
1.- Un restaurant posee una serie de insumos necesarios para la elaboración de los platos que ofrece en carta, por lo que es de vital importancia conocer cuando llegan a la existencia mínima permitida cada uno de sus 50 insumos, para lo cual se ejecutan los siguientes procesos :
– El encargado del almacén posee un listado con código, nombre, cantidad en existencia y stock mínimo
– El encargado de la cocina elabora solicitudes de insumos constantemente, en las cuales especifica : codigo y cantidad requerida.
– El encargado del almacén, al recibir la orden, envía la cantidad requerida y periódicamente, emite un listado con los códigos de los insumos que llegaron al stock mínimo.
Elabore un algoritmo que permita realizar las operaciones antes descritas, diseñando las estructuras de datos correspondientes. Usar un menú de opciones.
Análisis:
Diseño de las estructuras de datos :
El almacén lleva la información según la siguiente tabla:
t_almacén | ||||||||||
codigo | nombre | cant_ex | stock_min | |||||||
1 | ||||||||||
¦ | ||||||||||
50 |
El pedido y el reporte tienen las siguientes estructuras:
t_cocina | reporte | |||||||
codigo | Cant_req | codigo | ||||||
1 | 1 | |||||||
¦ | ¦ | |||||||
k | m |
Diseño del algoritmo :
algoritmo Proceso de Restaurant
Inicio
// Declaracion de variables
Entero i, k, m, opcion = 1
Caracter reporte [50,10], respuesta = "s"
registro t_almacen
caracter codigo[10], nombre[20]
entero cant_ex, stock_min
fin registro
t_almacen almacen[50]
registro t_cocina
caracter codigo[10]
entero cant_req
fin_registro
t_cocina cocina[50]
repetir mientras ( opcion<4 )
mostrar("Introduzca su opción :")
mostrar("[1] Registrar datos")
mostrar("[2] Elaborar Pedido")
mostrar("[3] Enviar Pedido y Elaborar Reporte")
mostrar("[4] Salir")
leer(opcion)
en caso de (opcion)
caso 1: // Registrar datos
repetir_desde i = 1 hasta i==50
Mostrar (" Introduzca codigo,nombre, cantidad y stock del insumo ", i )
leer(almacen[i].codigo)
leer(almacen[i].nombre)
leer(almacen[i].cant_ex)
leer(almacen[i].stock_min)
fin_repetir_desde
caso 2: // Elaborar Pedido
k =0
repetir mientras(resp== "s")
k = k+1
mostrar("Introduzca codigo del insumo ", k)
leer(cocina[k].codigo))
mostrar("Introduzca cantidad del insumo ", k) leer(cocina[k].cant_req)
mostrar("Desea solicitar otro insumo s/n")
leer(respuesta)
fin repetir mientras
mostrar ("Reporte de Insumos requeridos :" )
mostrar ( " codigo cantidad requerida" )
repetir desde i=1 hasta i== k
mostrar ( cocina[i].codigo , cocina[i].cant.req )
fin repetir desde
caso 3: // Enviar Pedido
m = 0
repetir_desde i = 1 hasta i==k
repetir_desde j = 1 hasta j==50
si(cocina[i].codigo = almacen[j].codigo)
almacen[j].cant_ex=almacen[j].cant_ex –cocina[i].cant_req
si(almacen[j].cant_ex <= lmacen[j].stock_min)
m = m+1
reporte[m] = cocina[i].codigo
fin_si
fin_si
fin_ repetir_desde
fin_ repetir_desde
// Elaborar Reporte
mostrar("Reporte de Componentes Faltantes")
repetir_desde i = 1 hasta i == m
mostrar(REPORTE[i])
fin_repetir_desde
caso 4: // Finalizar
Mostrar ( " Fin del programa " )
Fin en caso de
Fin repetir mientras
Fin
2.- .-Una empresa que se dedica a la venta de vehículos cuenta con 10 vendedores. La información sobre el número de vehículos vendidos es registrada semanalmente por cada uno de los vendedores, indicando además su nombre y cédula.
Se desea diseñar un algoritmo que , asumiendo registrada la información por vendedor , permita :
Dado el número de cédula, mostrar el total de vehículos vendidos en el mes
A efectos de pagar un bono , se desea conocer el nombre del vendedor con mayores ventas .
Diseño del Algoritmo :
Algoritmo Ventas de vendedores
Inicio
// Declaración de variables
entero i, j, tot_mes[10], ced, mayor
registro t_vendedor
caracter nombre[10]
entero cedula, vent_sem[4]
fin registro
t_vendedor vendedor[10]
mostrar("Introduzca el número de cédula")
leer(ced)
//Cálculo ventas por mes para todos los vendedores
repetir desde i=1 hasta i==10
tot_mes[i] = 0
repetir desde j=1 hasta j==4
tot_mes[i] = tot_mes[i] + vendedor[i] . vent_sem[j]
fin repetir desde
fin repetir desde
//Búsqueda de la cédula leída
repetir desde i=1 hasta i==10
si (vendedor[i] . cedula == ced)
mostrar(" Cantidad vendida en el mes =", tot_mes[i] )
fin si
fin repetir desde
//Búsqueda del vendedor con mayor cantidad de ventas
mayor = tot_mes[1]
repetir desde > i=1 hasta i==10
si ( tot_mes[i] mayor )
mayor = tot_mes[i]
pos = i
fin si
fin repetir desde
mostrar("vendedor con mayor cantidad de ventas = ", vendedor[pos] . nombre )
fin
EJERCICIOS PROPUESTOS
1.- Una librería posee 20 tipos de textos que son alquilados a diversos clientes.Los textos se tienen codificados , por lo que por cada texto se tiene : codigo, titulo, autor, cantidad existente.
Además, existe un registro de los 100 usuarios, con los siguientes datos : número de carnet, nombre, estado ( A = activo, S = suspendido ).
Cada uno de los 100 usuarios puede alquilar un texto solo si no está suspendido y para ello se debe registrar en el momento de alquilar un libro : número de carnet, código del libro, fecha de entrega programada.
Si al entregar el texto, la fecha de entrega es posterior a la fecha programada el día del alquiler, se coloca el estado como suspendido.
Se pide diseñar un algoritmo que permita ejecutar los siguientes procesos :
– Registrar los 20 textos y los 100 usuarios, diseñando las estructuras de datos correspondienres.
– Alquilar un texto a un cliente determinado.
– Entregar un texto por parte del cliente, considerando el caso de suspensión si la entrega es posterior a la fecha programada.
La ejecución de cada uno de los procesos debe ser seleccionada a través de un menú de opciones.
2.- Una empresa dedicada a la conexión de televisión por cable posee una cartera de 50 clientes, donde por cada cliente se tiene : cédula, dirección, teléfono, número de plan de conexión. La empresa ofrece 5 planes diferentes, donde por cada plan ofrecido se guarda : número de plan de conexión, listado de los 14 canales que lo conforman, costo del plan.
Diseñar un algoritmo para :
Registrar la información de los 5 planes
Registrar los 50 clientes y si es necesario, incluir nuevos clientes, sin excederse de 100.
Modificar el costo de cualquier plan.
Generar el recibo de pago de cualquier cliente.
3.- Una empresa dedicada a la venta de equipos electrónicos efectúa ventas al contado y a crédito. Cuando la venta se efectúa al contado se requiere emitir una factura con los siguientes datos : nombre del cliente, fecha de venta, cantidad de artículos, precio unitario y total a pagar. Si la venta se efectúa a crédito se requiere la siguiente información : nombre del cliente, teléfono, dirección, fecha de venta, deuda, cuota mensual, tasa de interés y estado ( 0 : deuda pendiente, 1 : deuda cancelada ).
Se pide desarrollar un algoritmo que :
Registre la información correspondiente a cada tipo de venta ( crédito o contado ).
Registre el pago de abonos a la deuda
Consulte la deuda de un cliente
Muestre el listado de clientes permitiendo seleccionar : lista completa, lista de clientes con deuda.
4.- La información de un almacén se guarda en un registro con las siguientes características : código de los n artículos vendidos en el almacén y la existencia ( número de unidades por cada artículo).
Por cada proveedor o cliente que llegue al almacén se graba un registro con los siguientes datos:
tipo de transacción ( 1 para proveedor : recibo, 2 para cliente : venta )
código del artículo recibido o vendido
Número de unidades recibidas o vendidas
Se requiere manejar el proceso de cada transacción ( recibo o venta ) y en cada caso , mostrar el registro del almacén actualizado.
5.-Un sistema que permite administrar una librería usa una estructura que contiene el código del libro, titulo y el precio del libro. Diseñar un algoritmo que permita las siguientes opciones presentadas en forma de menú.
(1) Registrar Libro
(2) Ordenar por precio en forma ascendente/descendente
(3) Buscar el libro de mayor/menor precio
(4) Salir
El sistema deberá ser diseñado de manera que:
Se debe poder registrar varios libros y finalizar el ingreso cuando se desee.
El ordenamiento puede ser hecho de forma ascendente o descendente.
La búsqueda puede ser del de mayor o el de menor precio.
Autor:
Pablo Turmero