registros prof. flor narciso departamento de computación escuela de ingeniería de sistemas...

29
Registros Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes

Upload: maria-antonia-soler-godoy

Post on 02-Feb-2016

223 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Registros Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes

Registros

Prof. Flor NarcisoDepartamento de Computación

Escuela de Ingeniería de SistemasFacultad de Ingeniería

Universidad de Los Andes

Page 2: Registros Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad 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).

Page 3: Registros Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes

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).

Page 4: Registros Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes

Registros: Representación Gráfica

Nombre Edo.

civil

Edad Fecha

nac.

CI

Persona

Nombre del registro

Registro de 5 campos cuyo nombre es Persona

Page 5: Registros Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes

Registros: Notación Algorítmica

Registro nombre_registro tipo_dato campo1

tipo_dato campo2

……… tipo_dato campon

fin_registro

Page 6: Registros Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes

Registros: Notación Algorítmica

Ejemplo

Registro EmpleadoCadena nombre Cadena CIentero num_dependientesreal sueldo

fin_registro

Page 7: Registros Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes

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;}

Page 8: Registros Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes

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];

Page 9: Registros Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes

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

Page 10: Registros Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes

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

};

Page 11: Registros Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes

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.

Page 12: Registros Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes

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;

Page 13: Registros Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes

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

Page 14: Registros Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes

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”;

Page 15: Registros Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes

Registros: Ejemplo (1)

struct ShortIntShort // Definicion del registro

{

short miShort1;

int miInt;

short miShort2;

};

struct ShortIntShort var; // Declaración de la variable var

Page 16: Registros Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes

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

Page 17: Registros Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes

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;

}

Page 18: Registros Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes

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

Page 19: Registros Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes

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.

Page 20: Registros Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes

Registros: Inicialización

struct Alumno {

long nmat;

char nombre[41];

};

struct Alumno alu1={76986, "Luis Perez"},

alu2 = { 67549, "Mikel Lasa"};

Page 21: Registros Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes

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

Page 22: Registros Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes

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;

}}

Page 23: Registros Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes

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;

}

Page 24: Registros Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes

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;}

Page 25: Registros Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes

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;

}

Page 26: Registros Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes

Registros: Ejemplo (3) Programa Principal

void main () {LeerDatosPDI ();Eximidos();CalcularPromedio();EscribirPromedio();

}

Page 27: Registros Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes

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.

Page 28: Registros Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes

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

Page 29: Registros Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes

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.