Registros Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas...
-
Upload
maria-antonia-soler-godoy -
Category
Documents
-
view
223 -
download
0
Transcript of Registros Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas...
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.