Tema IV. Estructuras Fundamentales de Datos (EFD): REGISTRO
Comencemos explicando las estructuras de Registros. La palabra registro se acepta de forma general para describir datos compuestos. En general, el tipo registro T se define de la forma siguiente:
TIPO T = REGISTRO
Campo1 : T1
Campo2 : T2
...........
CampoN : TN
FIN_REGISTRO
En la declaración anterior, T es una estructura de Tipo Registro, conformada por los campos: Campo1, Campo2, ...,CampoN; estos campos pueden ser del mismo tipo o de diferente tipo.
Por ejemplo: Creemos una estructura de tipo registro que permita almacenar las señales obtenidas de dispositivos industriales en tres (3) condiciones distintas de trabajo.
TIPO Señal = REGISTRO
Dispositivo ϵ char
condicion1 ϵ R
condicion2 ϵ R
condicion3 ϵ R
FIN_REGISTRO
Si queremos hacer referencia en un algoritmo a una estructura de tipo registro, se debe colocar el nombre del registro seguido de un punto y luego el campo al que deseamos hacer referencia (por ejemplo: Señal.Dispositivo).
Ejemplo Nro. 1. Caso de Uso de la Estructura de Registro
Problema: Algoritmo que permite almacenar las señales obtenidas de cinco (5) dispositivos industriales, en tres (3) condiciones distintas de trabajo.
ɛ0 {Sea cont ϵ N, Señal = REGISTRO
Dispositivo ϵ char
condicion1 ϵ R
condicion2 ϵ R
condicion3 ϵ R
FIN_REGISTRO
INICIO
cont <- 1
mientras (cont <5) hacer
Señal.Dispositivo <-
Señal.condicion1 <-
Señal.condicion2 <-
Señal.condicion3 <-
cont=cont+1
fmientras
FIN
Comparando las estructuras de Registros con las estructuras de arreglos:
1. En la estructura de tipo Arreglo, por ejemplo: Arreglo A, entonces A[i], con i perteneciente al conjunto de indices i, acotado por el intervalo de definición.
2. Para el caso de los Registros se tiene que dado:
R: registro
s1: t1
s2: t2
........
sn : tn
f_registro
Entonces el selector estará indicado como: R.s con (s ϵ {s1,s2,...,sn})
Ejemplos de declaración de Registros
tipo fecha = registro
dia : 1...31
mes: 1 ..12
año : 1..2000
fregistro
tipo persona = registro
nombre: carácter
apellido: carácter
f.nacimiento: Fecha
sexo: (f,m)
e.civil: (s,c,v,d,o)
fregistro
Es importante destacar que, del registro Persona los campos:
sexo pertenece al conjunto (f,m)
e.civil pertenece al conjunto (s,c,v,d,o)
EJEMPLO Nro. 2. Caso Combinado de uso de Registro con Arreglo
Problema: Realice el algoritmo que permita contar la cantidad de señales del dispositivo 1 que son positivas
ɛo {Sea señal [10] = ARREGLO DE Datos-S, CONTADOR ϵ Z
Datos-S: Registro
dispositivo ϵ (1,2,3,4,5)
dato ϵ R
FRegistro }
INICIO
CONTADOR <- 0
I <- 1
N <-
mientras (I < = N) hacer
Si (señal[I].dispositivo = 1) ^ (señal[I].dato > 0) entonces
CONTADOR <- CONTADOR +1
fsi
I <- I + 1
fmientras
<- “EL NUMERO DE señales del dispositivo 1 y positivas es: ”,CONTADOR
FIN
Nota: En la ultima sección de esta pagina (Sección Laboratorio), se incluye la codificación en lenguaje Python y Go
PRACTICA: REGISTROS
Este material corresponde a la Practica Nro. 7, de la Guía de Practica
CONTENIDO:
• Conceptos y definiciones
• Manejo de Registros.
Tiempo Estimado: 3 horas/practicas.
Semana Estimada: 11
HERRAMIENTAS:
• Iteración
• Secuenciamiento
• Partición
• Acumulación
• Registros
EJERCICIOS:
1. ¿Cuáles son las razones para definir determinados conjuntos de datos como registros en lugar de arreglos?
2. Diseñar un algoritmo que permita almacenar datos en una estructura de datos de tipo Registro de nombre: DATO-ESTUDIANTE con los campos:
NOMBRES
APELLIDOS
CÉDULA_DE_IDENTIDAD
NACIONALIDAD
FECHA_NACIMIENTO
ESTADO_CIVIL
DIRECCIÓN
CIUDAD
CÓDIGO
POSTAL
TELÉFONO
• ¿Cuál cree usted que debe ser el campo Clave?
4. Diseñe un algoritmo que almacene los datos en un registro de nombre MAT_UDELL cuyos registros contienen los siguientes campos:
COD_MAT
SECCIÓN
F_ADQ
F_ELLA
F_EXP
DESCRIPCIÓN
CANTIDAD
5. Realice el algoritmo que permita almacenar los datos en una estructura con la siguiente característica:
Inf-est: arreglo de [1..100] de Estudiantes
Estudiantes: Registro
Nombre: string(20)
Apellidos: string (50)
Cédula: numérico
Dir: string(50)
Teléfono: numérico
Cod-materias: arreglo de [1..20] de carácter
Fregistro
Sugerencia: Grafique la estructura.
PROGRAMACIÓN:
P.1 Investigue como se declaran los registros en los lenguajes C y Go. Que ocurre con Python?
Laboratorio
Considerando el Algoritmo del Problema Ejemplo mencionado anteriormente, se presenta la codificación del algoritmo en los lenguajes Python y Go. Es importante diferenciar la forma de manejo de las estructuras de registros en cada caso
Algoritmo
dispositivo ϵ (1,2,3,4,5)
CONTADOR <- 0
I <- 1
N <-
mientras (I < = N) hacer
Si (señal[I].dispositivo = 1) ^ (señal[I].dato > 0) entonces
CONTADOR <- CONTADOR +1
fsi
I <- I + 1
fmientras
FIN
Lenguaje Python
class clase_senal:
pass
dato_senal = clase_senal() # Crear un registro de senales
senal= [dato_senal, dato_senal, dato_senal, dato_senal, dato_senal]
# Se llenan los registros
print("Indique cuantas senales se procesaran: ")
n=input()
# Se llena la estructura
i=1
while (i<=n):
print("Indique el numero del dispositivo : ")
senal[i].dispositivo = input()
print("Indique la senal obtenida en el dispositivo : ")
senal[i].dato = input()
i=i+1
#Se busca los valores positivos en el Dispositivo 1
i=1
cont=0
while (i<=n):
if (senal[i].dispositivo == 1 and senal[i].dato>0):
cont=cont+1
i=i+1
print("EL NUMERO DE señales del dispositivo 1 y positivas son: ", cont)
ɛo {Sea señal [10] = ARREGLO DE Datos-S, CONTADOR ϵ Z
datos-señal: Registro
dato ϵ R
FRegistro }
INICIO
<- “EL NUMERO DE señales del dispositivo 1 y positivas es: ”,CONTADOR
Lenguaje Go
package main
import "fmt"
//Definición de struct datos-señal
type datos-señal struct{
dispositivo int
dato int
//Recordemos que Go permite utilizar 'ñ' en identificadores
}
func main(){
/*Declaración de variables tipo datos-señal*/
var señal[10] datos-señal
var cont int
/*Llenamos cada variable con la información */
i=1
fmt.Scanf("%d",&n)
for (i<=n)
{
fmt.Scanf("%d",&señal[i].dispositivo)
fmt.Scanf("%d",&señal[i].dato)
i=i+1
}
i=1
cont=0
for (i<=n)
{ if (señal(I).dispositivo == 1) && (señal(I).dato > 0){
cont=cont+1}
i=i+1
}
fmt.Println("EL NUMERO DE señales del dispositivo 1 y positivas es: %d”, cont)
}