Académique Documents
Professionnel Documents
Culture Documents
Ctedra de Programacin Departamento de Computacin Escuela de Ingeniera de Sistemas Facultad de Ingeniera Original Prof. Flor Narciso
Mayo 2004
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
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
Persona nombre
Ejemplo: Registro Empleado con cuatro campos Registro Empleado Cadena nombre Cadena CI entero num_dependientes real sueldo fin_registro
Mayo 2004
Mayo 2004
Ejemplo: struct Empleado { char nombre[31]; char CI[10]; int num_dependientes; float sueldo; };
Mayo 2004
Representacin grfica:
Empleado nombre sueldo CI
num_dependientes
7 rating
miInfo Shakira
Laundry service
artista
titulo
Mayo 2004
11
Ejemplo:
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
12
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
Mayo 2004
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
15
Registros: Ejemplo 1
// Definicion del registro
struct ShortIntShort { short miShort1; int miInt; short miShort2; };
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
Mayo 2004
19
Mayo 2004
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
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
24
Registros: Ejemplo 3
void CalcularPromedio () { notas int k; // Calcular el // promedio de // de cada estudiante
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
// Declaracin de variables Ttabla personas; // Declaracin del vector personas // de 30 elementos de tipo Tpersona
Mayo 2004 Ctedra de Programacin. Programacin 1. 30
Mayo 2004
31
Un campo individual: por valor La estructura completa: por valor Un apuntador a la estructura: por referencia.
Llamada
Tpersona empleado; . lee_datos_empleado(&empleado);
Mayo 2004
34
Mayo 2004
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);
Mayo 2004
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
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
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
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
44
Registros: Ejercicios
7. Un nmero complejo se puede representar mediante la siguiente estructura: typedef struct { double a, b; } Complejo;
Mayo 2004
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
48