------------------------------------------------------------------------------
4. Tipos Estructurados de Datos
------------------------------------------------------------------------------
4.1 Tablas
Las Tablas (o arrays, matrices, vectores) son un tipo de dato estructurado
en el que todos sus componentes, que se llaman elementos, son del mismo tipo.
Las tablas se declaran de este modo:
Algunos ejemplos:
Para acceder a los elementos de un tabla hay que escribir el nombre de la tabla
seguido por, entre corchetes, el indice del elemento en la tabla. Hay que tener en
cuenta que las tablas empiezan por el indice 0, por ello, si por ejemplo tenemos
una tabla de 50 elementos, precios[50], el primero sería el de índice 0, precios[0] y
el último el de índice 49, precios[49].
Aunque pueda parecer raro, las tablas pueden complicarse un poco:
Una tabla puede tener más de una dimensión, lo que equivaldría a tener en cada elemento
de la primera dimensión, de máximo "n", una cantidad máxima de elementos "m". Esto
quiere decir que en cada elemento de la primera dimensión (de máximo "n") hay (como
máximo) "m" elementos.
Aunque esto se puede recrear para más dimensiones aun, no solo para dos. Si la
tabla tiene una dimensión se le llama tabla o array bidimensional, si tiene tres, tridimensional, etc.
Ejemplos de tablas de varias dimensiones:
Ejemplos de operaciones con tablas:
Algo nuevo que se ve en el ejemplo anterior es la definición de una tabla inicializando
los elementos a un determinado valor. Es fácil hacerlo, colocamos el tipo de los
elementos luego el nombre de la tabla (con sus dimensión/es) y la asignamos entre
llaves { }, los valores ordenados según los índices de la tabla.
Una cosa a tener en cuenta a la hora de trabajar con tablas es que no se pueden
realizar las operaciones de cout o cin con las tablas en sí, sino que se aplican a un
elemento de la tabla en particular.
4.2. Registros
Los Registros son un tipo de dato estructurado estático en el que sus componentes,
que se llaman campos, pueden ser (o no) de distinto tipo.
Los registros se pueden declarar de dos formas:
Un ejemplo de un registro y su utilización:
Como veis en el ejemplo anterior se pueden declarar structs de diferentes formas,
ahora explicaré todas con el struct del ejemplo:
Esta forma declara un struct jugador con los campos si inicializar
Esta forma además de declarar el struct, inicializa todos los campos a la vez.
Esta manera de declarar un struct es una operación de asignación seguida de,
entre llaves y en orden, los valores que se le quieran dar a los campos
Por último, otra opción que existe es inicializar los campos uno a uno
para ello se coloca el nombre del struct seguido de punto (.) y el nombre
del campo que se quiere inicializar asignándolo a un determinado valor
Una posibilidad es utilizar como campo de un struct otro struct (aunque también se
pueden usar tablas u objetos). Por ejemplo:
4. Tipos Estructurados de Datos
------------------------------------------------------------------------------
4.1 Tablas
Las Tablas (o arrays, matrices, vectores) son un tipo de dato estructurado
en el que todos sus componentes, que se llaman elementos, son del mismo tipo.
Las tablas se declaran de este modo:
Código:
tipoElementos nombreTabla[numeroElementos];
Algunos ejemplos:
C++:
float precios[100]; // tabla de floats
double temperaturas[600]; // tabla de double
Para acceder a los elementos de un tabla hay que escribir el nombre de la tabla
seguido por, entre corchetes, el indice del elemento en la tabla. Hay que tener en
cuenta que las tablas empiezan por el indice 0, por ello, si por ejemplo tenemos
una tabla de 50 elementos, precios[50], el primero sería el de índice 0, precios[0] y
el último el de índice 49, precios[49].
Aunque pueda parecer raro, las tablas pueden complicarse un poco:
Código:
tipoElementos nombreTabla[n][m];
Una tabla puede tener más de una dimensión, lo que equivaldría a tener en cada elemento
de la primera dimensión, de máximo "n", una cantidad máxima de elementos "m". Esto
quiere decir que en cada elemento de la primera dimensión (de máximo "n") hay (como
máximo) "m" elementos.
Aunque esto se puede recrear para más dimensiones aun, no solo para dos. Si la
tabla tiene una dimensión se le llama tabla o array bidimensional, si tiene tres, tridimensional, etc.
Ejemplos de tablas de varias dimensiones:
C++:
int tabla1[10]; // una dimensión
int tabla2[10][20]; // dos dimensiones
Ejemplos de operaciones con tablas:
C++:
int main() {
int tabla1[5];
int tabla2[10][10];
int tabla3[6] = {0, 2, 4, 10, 14, 18};
tabla1[0] = 9;
tabla2[0][8] = 32;
cin >> tabla3[5];
cout << tabla3[0];
cout << tabla2[1][1];
return 0;
}
Algo nuevo que se ve en el ejemplo anterior es la definición de una tabla inicializando
los elementos a un determinado valor. Es fácil hacerlo, colocamos el tipo de los
elementos luego el nombre de la tabla (con sus dimensión/es) y la asignamos entre
llaves { }, los valores ordenados según los índices de la tabla.
Una cosa a tener en cuenta a la hora de trabajar con tablas es que no se pueden
realizar las operaciones de cout o cin con las tablas en sí, sino que se aplican a un
elemento de la tabla en particular.
4.2. Registros
Los Registros son un tipo de dato estructurado estático en el que sus componentes,
que se llaman campos, pueden ser (o no) de distinto tipo.
Los registros se pueden declarar de dos formas:
Código:
// La primera sería así:
struct nombreRegistro {
tipoCampo1 nombreCampo1;
tipoCampo2 nombreCampo2;
tipoCampo3 nombreCampo3;
...
};
// La otra forma sería así:
typedef struct {
tipoCampo1 nombreCampo1;
tipoCampo2 nombreCampo2;
tipoCampo3 nombreCampo3;
...
} nombreRegistro;
// Importante: ambas formas acaban en ;
Un ejemplo de un registro y su utilización:
C++:
struct jugador {
int posX;
int posY;
float vida;
float escudo;
float resistencia;
};
int main () {
jugador jugador1, jugador2;
jugador jugador3 = {0, 0, 100.00, 35.00, 100.00};
jugador1.posX = 8;
jugador1.posY = 10;
cout << "Introduce la posicion X del jugador 2: ";
cin >> jugador2.posX;
cout << "Introduce ahora la posicion Y: ";
cin >> jugador2.posY;
cout << "\n\n";
cout << "El jugador 3 esta en la posicion (" << jugador3.posX
<< ", " << jugador3.posY << ")."
return 0;
}
Como veis en el ejemplo anterior se pueden declarar structs de diferentes formas,
ahora explicaré todas con el struct del ejemplo:
Esta forma declara un struct jugador con los campos si inicializar
C++:
jugador jugador1;
Esta forma además de declarar el struct, inicializa todos los campos a la vez.
Esta manera de declarar un struct es una operación de asignación seguida de,
entre llaves y en orden, los valores que se le quieran dar a los campos
C++:
jugador jugador3 = {0, 0, 100.00, 35.00, 100.00};
Por último, otra opción que existe es inicializar los campos uno a uno
para ello se coloca el nombre del struct seguido de punto (.) y el nombre
del campo que se quiere inicializar asignándolo a un determinado valor
C++:
jugador1.posX = 8;
jugador1.posY = 10;
Una posibilidad es utilizar como campo de un struct otro struct (aunque también se
pueden usar tablas u objetos). Por ejemplo:
C++:
struct alumno {
char[50] nombre;
char[10] dni;
int anioNacimiento; // No se puede utilizar la ñ
int mesNacimiento;
};
struct grupo {
int numAlumnos;
int codigoClase;
alumno alumnos[20];
alumno delegado;
};
struct colegio {
int codigoColegio;
int codigoPostal;
int numAlumnos;
int numClases;
clase grupos[25];
alumno[500] alumnos; // una tabla struct dentro en la definición de otro
};