Arreglo de registro
Arreglo
Estructura de datos formada por un conjunto finito y ordenado de elementos homogéneos.
● Elementos homogéneos: todos los elementos son del mismo tipo: el tipo base del
array.
● Serie finita: tiene un tamaño limitado que habrá que definir en la declaración y que no puede ca b a m i r.
● Ordenado: cada elemento puede ser identif
Se trata de una estructura de acceso directo o aleatorio.
● Es posible acceder a cada elemento de forma individual.
9 Los elementos pueden seleccionarse arbitrariamente y son igualmente accesibles.
9 Para designar a un elemento se utilizará el selector.
o Uno o más índices que indican su posición dentro de la estructura.
● Dependiendo del número de índices necesario para referenciar un componente habrá: Dependiendo del número de índices necesario para referenciar un componente habrá:
9 Arrays unidimensionales (vectores).
9 Arrays bidimensionales (matrices)
9 Arrays multidimensionales.
Registros
Los registros (o estructuras) son datos estructurados
formados por elementos heterogéneos y lógicamente
relacionados.
● Estructura jerárquica con información de distinto tipo referente a un Estructura jerárquica con información de distinto tipo referente a un
mismo objeto.
9 A cada componente de un registro se le denomina campo.
Declaración
Se realiza enumerando cada uno de los componentes que lo forman.
registro : nombreRegistro
tipoDeDato : nombreCampo
tipoDeDato : nombreCampo
...
Fin_registro
● nombreRegistro es un identificador que se utilizará para hacer
referencia a la estructura
Se pueden declarar varias variables del mismo tipo.
Por cada campo hay que incluir su tipo de dato y su nombre.
tipoDeDato será cualquier dato simple o estructurado.
nombreCampo será id tifi d álid á un identificador válido.
registro : empleado
cadena : DNI, nombre
real : sueldo
fin_registro
Operaciones
Con una estructura de tipo registro sólo se podrá realizar la operación de
asignación.
● Se podrá asignar un registro a otro del mismo tipo.
Dos registros son del mismo tipo si tienen los mismos campos y del mismo tipo de
dato.
Con los elementos individuales de un registro, se podrán realizar las
mismas operaciones que se realizan con datos de ese tipo de dato.
//Concatena la cadena Pérez al nombre del empleado
empleado.nombre <- empleado.nombre & 'Pérez'
//Lee por teclado el sueldo del empleado
leer(empleado.sueldo)
//escribe la desviación estándar de las ventas del empleado
//utilizando la función del ejemplo 5 2
escribir(DesviaciónEstándar(empleado.ventas,12))
Los registros también se pueden pasar como argumentos a los
procedimientos.
procedimiento LeerRegistro(ref empleado : e)
var
entero : i
inicio
leer(e.DNI)
leer(e.nombre)
leer(e.sueldo)
leer(e.fechaContrato día)
leer(e.fechaContrato.mes)
leer(e.fechaContrato.año)
desde i <- 1 hasta 12 hacer
leer(e.ventas[i])
fin desde fin_desde
fin_procedimiento
//Calcula el total de las ventas anuales del empleado
procedimiento CalcularVentasAnualesEmpleado(ref empleado : e)
var
entero : i
inicio
e.totalVentas <- 0 //Se podría haber hecho e.totalVentas=SumaVector(e.ventas,12)
desde i <- 1 hasta 12 hacer
e.totalVentas <- e.totalVentas + e.ventas[i]
fin_desde
fin_procedimiento
Arrays paralelos.
Dos o más arrays que utilizan el mismo subíndice para referirse a
términos homólogos se llaman arrays paralelos.
El tipo base de un array también
puede ser un registro:
● Arrays de registros.
var
array[ ] 1..40 de empleado : vendedores
A los elementos de un arra
y de re
gistros se accede con la
notación ya explicada.
//Leer por teclado el DNI del cuarto empleado
leer( [] ) vendedores[4].DNI)
//Escribir el año del contrato del cuarto empleado
escribir(vendedores[4].fechaContrato.año)
vendedores[5].ventas[12]
<-vendedores[5].ventas[12] + 1000
//Calcular el total de las ventas de los 40 empleados utilizando
//el procedimiento CalcularVentasAnualesEmpleado ya definido
desde i
<- 1 hasta 40 hacer
CalcularVentasAnualesEmpleado(vendedores[i])
fin desde
Declarar de todas las estructuras de datos necesarias para realizar las
acciones de los puntos si
guientes.
const
N = … //Número de productos a manejar
tipos
registro = Producto
cadena : código, descripción
entero : stock : stock
fin_registro
array[0..N] de Producto = Productos
array[1..N,1..7] de entero = Ventas
Diseñar un módulo que permita leer las ventas de cada producto, teniendo
en cuenta que la entrada de datos se hará por día de la semana (es decir,
primero se leerán las ventas del lunes del producto 1, después las ventas del
lunes del producto 2, después las ventas del lunes del producto 3, etc.)
procedimiento LeerVentas(ref ventas : tabla; valor entero : n)
var
entero : i,j
inicio
desde i <- 1 hasta 7 hacer
//Leer todas las ventas del día i
desde j <- 1 hasta n hacer
leer(tabla[j, i])
fin_desde
fin_desde
fin_procedimiento
fin_procedimiento
Diseñar un módulo que actualice el stock de cada producto, restando
al stock actual las ventas realizadas a lo largo de la semana.
procedimiento ActualizarVentas(valor ventas:tabla;ref Productos:p)
var
entero : i,j
inicio
desde i <- 1 hasta n hacer
desde j <- 1 hasta 7 hacer
p[i].stock
Å p[i].stock – tabla[i,j]
fin_desde
fin_desde
fin_procedimiento