Registros
Prof. Flor NarcisoDepartamento de Computación
Escuela de Ingeniería de SistemasFacultad de Ingeniería
Universidad de Los Andes
Tipos de Datos
Simples: Almacenan un solo valor (enteros, reales, caracteres, apuntadores, lógicos).
Compuestos o estructurados: Almacenan uno o mas valores (arreglos, registros, cadenas de caracteres).
Registro
Generalización del concepto de variable
Variable: Puede tener como máximo un valor.
Registro: Representa una colección de valores , llamados campos, lógicamente relacionados, donde cada uno puede tener un tipo diferente (estructura heterogénea).
Registros: Representación Gráfica
Nombre Edo.
civil
Edad Fecha
nac.
CI
Persona
Nombre del registro
Registro de 5 campos cuyo nombre es Persona
Registros: Notación Algorítmica
Registro nombre_registro tipo_dato campo1
tipo_dato campo2
……… tipo_dato campon
fin_registro
Registros: Notación Algorítmica
Ejemplo
Registro EmpleadoCadena nombre Cadena CIentero num_dependientesreal sueldo
fin_registro
Registros: Definición en C++
Para definir registros en C++ se utiliza la palabra struct.
struct Empleado { char nombre[31]; // Vector de caracteres (cadena) char CI[10]; // Vector de caracteres (cadena) int num_dependientes; float sueldo;}
Cadenas de Caracteres
Una cadena de caracteres (string) es un conjunto de caracteres - incluido el blanco - que se almacenan en localidades contiguas de memoria. Se representa como un vector de caracteres.
‘1’ ‘2’ ‘ ’ ‘d’ ‘e’ ‘ ’ ‘M’
’
‘a’ ‘y’ ‘o’ ‘\0’
’0 1 2 3 4 5 6 7 8 9 10
fecha
char fecha[11];
Cadenas de Caracteres
‘1’ ‘2’ ‘ ’ ‘d’ ‘e’ ‘ ’ ‘M’
’
‘a’ ‘y’ ‘o’ ‘\0’
’0 1 2 3 4 5 6 7 8 9 10
fecha
Nota: El caracter ‘\0’ al final de la cadena es indispensable para indicar el fin de la cadena
Registros: Definición en C++
Ejemplo
#define kMaxArtistaLong 50#define kMaxTituloLong 50struct CDInfo{
short rating; // campo1
char artista[ kMaxArtistaLong + 1 ]; // campo2
char titulo[ kMaxTituloLong + 1 ]; // campo3
};
Registros: Declaración en C++
Al declarar una variable de tipo registro (struct) se reserva un grupo de localidades consecutivas de memoria relacionadas por el hecho que tienen el mismo nombre y diferentes tipos.
Registros: Declaración en C++
Una definición de tipo struct crea un tipo de datos nuevo. De la misma forma como usamos el tipo short o float para declarar una variable, podemos usar este nuevo tipo de datos para declarar una variable de tipo struct.
struct CDInfo miInfo;
En C++ se puede omitir la palabra struct.
CDInfo miInfo;
Registros: Declaración en C++
7 “Shakira” “Pies Descalzos”
ra
ti
n
g
artista titulo
miInfo
Nombre de la variable
Campos del registro CDInfo
Valores de los campos
Registros: Acceso
Para tener acceso a los campos de una variable de tipo registro se utiliza el operador .
Ejemplo
miInfo.rating = 7;
miInfo.artista = “Shakira”;
miInfo.titulo = “Pies Descalzos”;
Registros: Ejemplo (1)
struct ShortIntShort // Definicion del registro
{
short miShort1;
int miInt;
short miShort2;
};
struct ShortIntShort var; // Declaración de la variable var
Registros: Ejemplo (1)
2 -12 3
miShort1 miInt miShort2
var
Primer campo: var.miShort1 = 2
Segundo campo: var.miInt = -12
Tercer campo: var.miShort2 = 3
Acceso a los campos de la variable
Representación gráfica de la variable
Registros: Ejemplo (2)
#include <iostream.h>
struct baraja {char numero[8];char pinta[7];
};void main () {
struct baraja a;
a.numero[0] = ‘A’;a.numero[1] = ‘s’;anumero[2] = ‘\0’; // Caracter de fin de cadenacin >> a.pinta;cout << a.numero << “de” << a.pinta << endl;
}
Registros: Ejemplo (2)
‘A’ ‘s’ ‘\0’ ‘E’ ‘s’ ‘p’ ‘a’ ‘d’ ‘a’ ‘\0’
0 1 2 3 4 5 6 0 1 2 3 4 5 6
a
numero pinta
Nota: El caracter ‘\0’ al final de la cadena es indispensable
Registros: Instrucciones Válidas
A.campo1 = 3; X = A.campo4; cin >> A.campo3; cout << A.campo3; A.campo1 = A.campo3; Y = Suma (A.campo1, b, c); b = A.campo6 / 2;
Cada campo de una variable de tipo registro puede usarse como una variable cualquiera.
Registros: Inicialización
struct Alumno {
long nmat;
char nombre[41];
};
struct Alumno alu1={76986, "Luis Perez"},
alu2 = { 67549, "Mikel Lasa"};
Registros: Ejemplo (3) Crear un vector de registros
#include <iostream.h>
struct estudiante { // Definición de la estructurachar nombre[30];short nota1;short nota2;short nota3;short promedio;
};#define num 11
struct estudiante est[num]; // Declaración de un vector de // registros como una variable global
Registros: Ejemplo (3) Crear un vector de registros
void LeerDatosPDI () {int k;
for (k = 0; k < num; k++) {cout << “Nombre del estudiante:” << endl;cin >> est[k].nombre;cout << “Nota Parcial 1:” << endl;cin >> est[k].nota1;cout << “Nota Parcial 2:” << endl;cin >> est[k].nota2;cout << “Nota Parcial 3:” << endl;cin >> est[k].nota3;
}}
Registros: Ejemplo (3) Listar nombre de estudiantes con
Parcial1 > 15
void Eximidos () {int k;
cout << “Estudiantes eximidos” << endl;for (k = 0; k < num; k++)
if (est[k].nota1 > 15) cout << est[k].nombre << endl;
}
Registros: Ejemplo (3) Calcular el promedio de notas de cada
estudiante
void CalcularPromedio () {int k;
for (k = 0; k < num; k++) est[k].promedio = (est[k].nota1 + est[k].nota2 +
est[k].nota3)/3;}
Registros: Ejemplo (3) Escribir el promedio de notas de cada
estudiante
void EscribirPromedio () {int k;
cout << “Nota promedio” << endl;for (k = 0; k < num; k++) cout << est[k].nombre << est[k].promedio << endl;
}
Registros: Ejemplo (3) Programa Principal
void main () {LeerDatosPDI ();Eximidos();CalcularPromedio();EscribirPromedio();
}
Registros: Paso de parámetros
Los registros pueden pasarse como parámetros a las funciones de la siguiente forma:– Un campo individual: por valor– La estructura completa: por valor– Un apuntador a la estructura: por referencia.
Nota: Arreglos de estructuras son automáticamente pasados por referencia.
Ejercicios
Realizar el ejemplo tres pasando el vector de registros como parámetro a todos los procedimiento especificados.
Definir un registro AGENDA que contenga los siguientes campos:– Nombre– Direccion– Telefono– Celular– Correo electrónico– Fecha de nacimiento
Ejercicios
Una librería almacena la siguiente información sobre cada uno de sus libros: CODIGO, TITULO, AUTOR y PRECIO. Tomando en cuenta que la información debe estar almacenada en orden ascendente por los códigos de los libros, realizar un programa en C++ que realice lo siguiente:– Insertar información de nuevos libros, la cual debe mantenerse
ordenada en todo momento.
– Buscar registros por el campo código.
– Buscar todos los libros escritos por un autor.
– Borrar la información correspondiente a un libro.