Vous êtes sur la page 1sur 48

Registros

Ctedra de Programacin Departamento de Computacin Escuela de Ingeniera de Sistemas Facultad de Ingeniera Original Prof. Flor Narciso

Mayo 2004

Ctedra de Programacin. Programacin 1.

Tipos de Datos
Simples: Almacenan un solo valor (enteros, reales, caracteres, apuntadores, lgicos). Compuestos o estructurados: Almacenan uno o mas valores (arreglos, cadenas de caracteres, registros).

Mayo 2004

Ctedra de Programacin. Programacin 1.

Registro
Generalizacin del concepto de variable Variable: Puede tener como mximo un valor. Registro: Representa una coleccin de valores , llamados campos, lgicamente relacionados, donde cada uno puede tener un tipo diferente (estructura heterognea).

Mayo 2004

Ctedra de Programacin. Programacin 1.

Registros: Representacin Grfica


Nombre del registro Edo. civil edad Fecha nac. CI

Persona nombre

Registro de 5 campos cuyo nombre es Persona


Mayo 2004 Ctedra de Programacin. Programacin 1. 4

Registros: Notacin algortmica


Notacin: Registro nombre_registro tipo_dato campo1 tipo_dato campo2 tipo_dato campon fin_registro

Ejemplo: Registro Empleado con cuatro campos Registro Empleado Cadena nombre Cadena CI entero num_dependientes real sueldo fin_registro

Mayo 2004

Ctedra de Programacin. Programacin 1.

Registros: Definicin en C/C++


Los registros en C/C++ se denominan estructuras y sus elementos individuales se denominan miembros. Para definir una estructura se utiliza la palabra struct.

Mayo 2004

Ctedra de Programacin. Programacin 1.

Registros: Definicin en C/C++


Notacin: struct nombre_estructura { tipo_dato campo1; tipo_dato campo2 ; tipo_dato campon; };

Ejemplo: struct Empleado { char nombre[31]; char CI[10]; int num_dependientes; float sueldo; };

Mayo 2004

Ctedra de Programacin. Programacin 1.

Registros: Definicin en C/C++


Ejemplo: struct Empleado { char nombre[31]; char CI[10]; int num_dependientes; float sueldo; };
Mayo 2004

Representacin grfica:
Empleado nombre sueldo CI

num_dependientes

Ctedra de Programacin. Programacin 1.

Registros: Definicin en C/C++


Ejemplo #define kMaxArtistaLong 30 #define kMaxTituloLong 50 struct CDInfo { short rating; char artista[ kMaxArtistaLong + 1 ]; char titulo[ kMaxTituloLong + 1 ]; };
Mayo 2004 Ctedra de Programacin. Programacin 1. 9

Registros: Declaracin en C/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. Una definicin 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;
Mayo 2004 Ctedra de Programacin. Programacin 1. 10

Registros: Declaracin en C++


Nombre de la variable

7 rating

miInfo Shakira

Laundry service

Valores de los campos Campos del registro CDInfo

artista

titulo

Mayo 2004

Ctedra de Programacin. Programacin 1.

11

Ejemplo:

Registros: Declaracin en C/C++

struct cuenta { int num_cuenta; char tipo_cuenta; char nombre_cliente[80]; float saldo; }; struct cuenta cliente1, cliente2, cliente3; NOTA: cliente1, cliente2 y cliente3 son variables del tipo cuenta.

Mayo 2004

Ctedra de Programacin. Programacin 1.

12

Registros: Declaracin en C/C++


Es posible combinar la definicin del registro con la declaracin de las variables tal y como se muestra en (a): a) struct cuenta
{ int num_cuenta; char tipo_cuenta; char nombre_cliente[80]; float saldo; } cliente1, cliente2, cliente3; b) struct { int num_cuenta; char tipo_cuenta; char nombre_cliente[80]; float saldo; } cliente1, cliente2, cliente3;

Como la definicin del registro se combina con la declaracin de las variables, se puede omitir el nombre del registro tal y como se muestra en (b).
Mayo 2004 Ctedra de Programacin. Programacin 1. 13

Registros: Declaracin en C/C++


Es posible combinar la definicin de un registro con la definicin de otro registro.
struct fecha { int dia; int mes; int anio; }; struct cuenta { int num_cuenta; char tipo_cuenta; char nombre_cliente[80]; float saldo; struct fecha ultima_transaccion; };

Mayo 2004

Ctedra de Programacin. Programacin 1.

14

Registros: Acceso
Para tener acceso a los campos de una variable de tipo registro se utiliza el operador punto (.)

variable miembro
Ejemplo cliente1.saldo = 500.00; cliente1.tipo_cuenta = A; strcpy(cliente1.nombre_cliente, Flor Narciso);

Mayo 2004

Ctedra de Programacin. Programacin 1.

15

Registros: Instrucciones vlidas


cliente1.saldo += 1.0; cliente1.saldo -= 1.0 ; cin >> cliente1.tipo_cuenta; cliente1.nombre_cliente[2] = A; cout << cliente1.nombre_cliente; A[1] = cliente1.num_cuenta; Y = Suma (A[i], cliente1.num_cuenta, c, 5); b = cliente1.saldo/ 2.0; cliente2 = cliente1; cliente3.num_cuenta = cliente2.num_cuenta Nota: Cada miembro de un registro puede usarse como una variable cualquiera.
Mayo 2004 Ctedra de Programacin. Programacin 1. 16

Registros: Ejemplo 1
// Definicion del registro
struct ShortIntShort { short miShort1; int miInt; short miShort2; };

// Declaracion de la variable var


struct ShortIntShort var;

// Asignacin de valores a los miembros del registro


var.miShort1 = 2; var.miInt = -12;
Mayo 2004 Ctedra de Programacin. Programacin 1. 17

Registros: Ejemplo 2
#include <iostream.h> struct baraja { char numero[7]; char pinta[7]; }; void main () { struct baraja a; a.numero[0] = A; a.numero[1] = s; a.numero[2] = \0; // Caracter de fin de cadena cin >> a.pinta; cout << a.numero << de << a.pinta << endl; }
Ctedra de Programacin. Programacin 1.

Mayo 2004

18

Registros: Ejemplo 2
a
A s \0 0 1 2 3 4 5 6 E s p a d a \0 0 1 2 3 4 5 6

numero

pinta

Nota: El caracter \0 al final de la cadena es indispensable

Mayo 2004

Ctedra de Programacin. Programacin 1.

19

Registros: Iniciacin en la declaracin


struct Alumno { long nmat; char nombre[41]; }; struct Alumno alu1={76986, "Luis Perez"}, alu2 = { 67549, "Mikel Lasa"};

Mayo 2004

Ctedra de Programacin. Programacin 1.

20

Arreglos de registros
El uso del operador punto (.) puede extenderse a arreglos de registros. En el caso de vectores, la notacin es la siguiente: Nombre_vector[expresin].miembro Para acceder al elemento i-simo de un vector la notacin es la siguiente: vector[i-1]
Mayo 2004 Ctedra de Programacin. Programacin 1. 21

Registros: Ejemplo 3
#include <iostream.h> struct estudiante { char nombre[30]; float nota1; float nota2; float nota3; float promedio; }; #define NUM 11 // Definicin de la estructura

struct estudiante est[NUM]; // Declaracin de un vector de registros global

Nota: est es un vector que puede contener hasta 11 elementos, donde cada elemento es un registro de tipo estudiante.
Mayo 2004 Ctedra de Programacin. Programacin 1. 22

Registros: Ejemplo 3
void LeerDatosPDI () // Iniciar el vector de registros { 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; } }
Mayo 2004 Ctedra de Programacin. Programacin 1. 23

Registros: Ejemplo 3
void Eximidos () // Listar nombres de estudiantes { int k; // con nota parcial 1 > 15 cout << Estudiantes eximidos << endl; for (k = 0; k < NUM; k++) if (est[k].nota1 > 15) cout << est[k].nombre << endl; }

Mayo 2004

Ctedra de Programacin. Programacin 1.

24

Registros: Ejemplo 3
void CalcularPromedio () { notas int k; // Calcular el // promedio de // de cada estudiante

for (k = 0; k < NUM; k++) est[k].promedio = (est[k].nota1 + est[k].nota2 + est[k].nota3)/3; }


Mayo 2004 Ctedra de Programacin. Programacin 1. 25

Registros: Ejemplo 3
void EscribirPromedio () { int k; // Escribir el promedio de notas // de cada estudiante

cout << Nota promedio << endl; for (k = 0; k < NUM; k++) cout << est[k].nombre << est[k].promedio << endl; } void main () // Programa principal { LeerDatosPDI (); Eximidos(); CalcularPromedio(); EscribirPromedio(); }
Mayo 2004 Ctedra de Programacin. Programacin 1. 26

Registros: definicin de tipos


// Definicin del registro typedef struct { tipo_dato c1; tipo_dato c2; ... tipo_dato cn; } nuevo_tipo; // Declaracin de variables Nuevo_tipo var1, var2={valor1, valor2, ..., valorn};
Mayo 2004 Ctedra de Programacin. Programacin 1. 27

Registros: definicin de tipos


Ejemplo: // Definicin del registro typedef struct { int num_cuenta; char tipo_cuenta; char nombre_cliente[80]; float saldo; } registro; // Declaracin de variables registro cliente1, cliente2, cliente3;
Mayo 2004 Ctedra de Programacin. Programacin 1. 28

Registros: definicin de tipos


Ejemplo: // Definicin del registro typedef struct { Cadena nombre, apellido1, apellido2; long edad, CI; char sexo; } Tpersona; // Declaracin de variables Tpersona empleado, empleado1={"Alicia", "Gmez", "Cruz", 21, 12345678, f};
Mayo 2004 Ctedra de Programacin. Programacin 1. 29

Vector de Registros: definicin de tipos


// Definicin de una tabla de registros typedef Tpersona Ttabla[30];
Nombre del tipo Tabla

Tipo de los elementos del vector

// Declaracin de variables Ttabla personas; // Declaracin del vector personas // de 30 elementos de tipo Tpersona
Mayo 2004 Ctedra de Programacin. Programacin 1. 30

Vector de Registros: definicin de tipos


typedef struct { int dia; int mes; int anio; } fecha; typedef struct { int num_cuenta; char tipo_cuenta; char nombre[80]; float saldo; fecha ultima_transaccion; } registro; typedef registro Clientes[30]; // Declaracion de variables Clientes Banco_Mercantil, Banco_Union; // Acceso X = Banco_Mercantil[0].num_cuenta;

Mayo 2004

Ctedra de Programacin. Programacin 1.

31

Registros: pase de parmetros


Los registros pueden pasarse como parmetros 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 automticamente pasados por referencia.


Mayo 2004 Ctedra de Programacin. Programacin 1. 32

Registros: Paso del registro completo (por valor)


Prototipo del procedimiento void escribe_datos_empleado (Tpersona); Llamada al procedimiento Tpersona empleado = {Sara, Lopez, Marquez, 18, 12345678, f}; ... escribe_datos_empleado (empleado); Definicin del procedimiento void escribe_datos_empleado (Tpersona e) { cout << e.nombre << e.apellido1 << e.apellido2 << endl; cout << e.edad << e.CI << e.sexo << endl; }
Mayo 2004 Ctedra de Programacin. Programacin 1. 33

Registros: Paso del registro completo (por referencia)


Prototipo
typedef Tpersona * PTpersona; . void lee_datos_empleado(PTpersona);

Llamada
Tpersona empleado; . lee_datos_empleado(&empleado);

Mayo 2004

Ctedra de Programacin. Programacin 1.

34

Registros: Paso del registro completo (por referencia)


Definicin
void lee_datos_empleado (PTpersona e) { gets (e->nombre); gets (e->apellido1); gets (e->apellido2); cout << e->edad << e->CI << e->sexo << endl; }

Mayo 2004

Ctedra de Programacin. Programacin 1.

35

Registros: Ejemplo 4
#include <iostream.h> #define MAX 100 typedef struct { int num; long fac; } RFac; // Definicin del tipo registro RFac

typedef RFac TRFac[MAX]; void rellenatabla (TRFac, int &); void muestratabla (TRFac, int);

// Definicin del tipo TRFac // Prototipos

Mayo 2004

Ctedra de Programacin. Programacin 1.

36

Registros: Ejemplo 4
void main (void) { TRFac tablafac; int n; rellenatabla (tablafac, n); muestratabla (tablafac, n); } // Programa Principal

void rellenatabla (TRFact T, int &tam) { cout << Cuntos factoriales desea calcular? << endl; cin >> tam; assert (tam <= MAX); for (i=0; i<tam; i++) { T[i].num = i+1; T[i].fac = factorial(i+1); } }
Mayo 2004 Ctedra de Programacin. Programacin 1. 37

Registros: Ejemplo 4
void muestratabla (TRFac T, int m) { int i; assert (m <= MAX); for (i=0; i<m; i++) { cout << Numero << T[i].num << endl; cout << Factorial << T[i].fac << endl; } }

Mayo 2004

Ctedra de Programacin. Programacin 1.

38

Registros: Ejemplo 5
float ajustar(char [], int, float); main() { typedef struct { int dia; int mes; int anio; } fecha; struct { int num_cuenta; char tipo_cuenta; char nombre_cliente[80]; float saldo; fecha ultimo_pago; } cliente; .. cliente.saldo = ajustar(cliente.nombre, cliente.num_cuenta, cliente.saldo); .. } float ajustar(char nom[], int n, float s) { float nuevo_saldo; . return (nuevo_saldo); }
Ctedra de Programacin. Programacin 1. 39

Mayo 2004

Registros: Ejercicios
1. Una librera almacena la siguiente informacin sobre cada uno de sus libros: CODIGO, TITULO, AUTOR y PRECIO. Tomando en cuenta que la informacin debe estar almacenada en orden ascendente por los cdigos de los libros, realizar un programa en C++ que realice lo siguiente:
Insertar informacin de nuevos libros, la cual debe mantenerse ordenada en todo momento. Buscar registros por el campo cdigo. Buscar todos los libros escritos por un autor. Borrar la informacin correspondiente a un libro.
Mayo 2004 Ctedra de Programacin. Programacin 1. 40

Registros: Ejercicios
2. 3. Realizar el ejemplo tres (3) pasando el vector de registros como parmetro a todos los procedimiento especificados. Definir un registro AGENDA que contenga los siguientes campos:
Nombre Direccin Telfono Celular Correo electrnico Fecha de nacimiento

Mayo 2004

Ctedra de Programacin. Programacin 1.

41

Registros: Ejercicios
4. Defina los siguientes tipos de estructuras:
Un tipo estructura Hora con tres campos enteros hora, minutos, segundos. Un tipo estructura Fecha con tres campos enteros dia, mes, ao. Un tipo estructura Persona con los siguientes campos:
nombre: cadena de 20 caracteres. apellidos: cadena de 40 caracteres. CI: cadena de 10 caracteres.

fecha_nacimiento: estructura de tipo Fecha. Un tipo estructura EntradaDir con los siguientes campos:
nombre: cadena de 8 caracteres. extensin: cadena de 3 caracteres. tamao: entero largo. fecha _ creacin: estructura de tipo Fecha. hora creacin: estructura de tipo Hora.
Mayo 2004 Ctedra de Programacin. Programacin 1. 42

Registros: Ejercicios
5. Declare las siguientes variables estructura:
Una variable hora_inicio de tipo Hora. Una variable amrica de tipo Fecha con valor inicial igual a la fecha del descubrimiento de Amrica. Una tabla empleados capaz de almacenar 200 elementos de tipo Persona. Una tabla directorio capaz de almacenar 256 elementos de tipo EntradaDir. Una variable p_persona de tipo puntero a Persona.

Mayo 2004

Ctedra de Programacin. Programacin 1.

43

Registros: Ejercicios
6. A partir de las declaraciones del ejercicio anterior, escriba las expresiones para:
El ao en que se descubri Amrica. El nombre del empleado i-simo de la tabla empleados. El da de nacimiento del empleado i-simo de la tabla empleados. El nombre de la persona a la que apunta p_persona. El da de nacimiento de la persona a la que apunta p_persona.

Mayo 2004

Ctedra de Programacin. Programacin 1.

44

Registros: Ejercicios
7. Un nmero complejo se puede representar mediante la siguiente estructura: typedef struct { double a, b; } Complejo;

Mayo 2004

Ctedra de Programacin. Programacin 1.

45

Registros: Ejercicios
Escriba las siguientes funciones de manipulacin de nmeros complejos: void escribe_complejo (Complejo c); // Escribe un dato de tipo complejo Complejo lee_complejo (void); // Lee un dato de tipo complejo. Complejo suma_complejos (Complejo c1, Complejo c2); // Suma dos datos de tipo complejo. Complejo multiplica_complejos (Complejo c1, Complejo c2); // Multiplica dos datos de tipo complejo. 8. Utilizando las funciones del ejercicio anterior, escriba un programa que lea dos datos de tipo Complejo y calcule e imprima la suma y el producto de ambos.
Ctedra de Programacin. Programacin 1. 46

Mayo 2004

Registros: Ejercicios
9. Una tabla de bsqueda es una tabla de estructuras en la que se realiza una bsqueda por uno de sus campos y se obtiene el valor almacenado en otro campo. Por ejemplo, para almacenar los valores de las variables de un programa se puede utilizar una tabla como la siguiente: #define MAX_SIMBOLOS 100 typedef struct { Cadena identificador; int valor; } Simbolo; typedef Simbolo tabla_simbolos[MAX_SIMBOLOS];
Mayo 2004 Ctedra de Programacin. Programacin 1. 47

Registros: Ejercicios

Escriba una funcin de bsqueda, que, dado un identificador, obtenga el valor que le corresponde en la tabla. Su prototipo ser el siguiente: int buscaValor (Simbolo tabsim[], int nsim, Cadena ident); siendo nsim el nmero de identificadores almacenados en la tabla tabsim.

Mayo 2004

Ctedra de Programacin. Programacin 1.

48

Vous aimerez peut-être aussi