Академический Документы
Профессиональный Документы
Культура Документы
Antonio L. Carrillo
REGISTROS : Necesidad
! Cuando se quiere procesar un conjunto de datos de distinto tipo, se pueden crean interfaces engorrosas de manejar:
comparar_fechas(dia1,mes1,ao1, dia2,mes2,ao2); sumar_fracciones(num1,den1, num2,den2); leer_datos_persona(dni,nombre, dir, dia_nacim, mes_nacim, ao_nacim, lugar_nacim, nacionalidad);
REGISTROS: Conceptos
! Un registro (o estructura) es una coleccin finita y heterognea (de distinto tipo) de uno o ms elementos ! Cada uno de esos elementos tiene asociado su propio nombre, que se denomina campo ! Cada campo puede ser de cualquier tipo definido previamente ! Ejemplo:
Campos
nmeros strings
dni nombre domicilio d_nac m_nac a_nac lugar_nac nacionalidad
3
persona
! Se puede inicializar la variable en el momento de su declaracin. Se asigna la informacin en el mismo orden en el que se declararon los campos:
TRpersona Jaimito = { 193412, Jaimito Barrientos, C/ Rue del Percebe,3, 25, 10, 1970, Mlaga, Espaola };
Jaimito
Jaimito.a_nac
Jaimito.d_nac
Jaimito.domicilio[1]
REGISTROS : Ejemplo
/* ejemplo de declaracin de registros y acceso a los campos */ #include <iostream> using namespace std; Declaracin del tipo registro: TRcomponente typedef struct { int codigo; string nombre; float coste; } TRcomponente ;
int main() { TRcomponente resistencia; TRcomponente condensador = {25,condensador3,0.25}; resistencia.codigo=10; resistencia.nombre = resistencia1; resistencia.coste=0.06; cout << resistencia.nombre << resistencia.codigo; cout << resistencia.coste; return 0; }
! Las variables de tipo registro NO se pueden COMPARAR directamente (no se pueden utilizar los operadores relacionales) if (f1 == f2) ...
8
EJEMPLO:
int main() { TRpersona p1; p1 = LeerPersona(); /* copia el registro devuelto por la funcin, en p1 */ MostrarDatos(p1); // Visualiza el registro p1 } 10
12
REGISTROS: Anidamiento
! Las estructuras de datos estticas se pueden anidar: ! Un registro puede tener campos de cualquier tipo que haya sido definido: ! Arrays (uni y multidimensionales) ! Registros ! Cualquier otro tipo definido ! Los arrays pueden a su vez tener como tipo base a un tipo registro o cualquier tipo definido ! Pondremos ejemplos de las construcciones ms tpicas.
13
Jaimito.dni
193412 Jaimito Barrientos C/ Rue del Percebe, 3 25 Madrid espaola 10 1970
Jaimito
Jaimito.f_nac.anio
Jaimito.f_nac.dia
Jaimito.domicilio[1]
15
Arrays de Estructuras
! Se pueden construir arrays en los que cada elemento sea un registro (todas las casillas del mismo tipo struct): typedef struct { double real; double imag; } TRcomplejo; typedef array<TRcomplejo,10> TAcomplejos; TAcomplejos arr; /*array de 10 elementos, cada uno de tipo TRcomplejo */
10 casillas,
TRpersona director;
17
237879
banco[2].dni
Pepe Prez 819412 153317 C/ Su Casa, 25 394412 Luis 02 Ortiz 1981 13 193412 Carmen Luque Avda. Velazquez, 12 Malaga Jaimito Barrientos Plaza Constitucin, 25 09 1963 21 banco[9] espaola 3 05 del Percebe, 1975 02 C/ Rue Barcelona 10 1970 25 vila banco[2] espaola Madrid banco[1] espaola banco[0] espaola
banco[1].domicilio[0]
banco[0].f_nac.mes
18