Tipos de datos estructurados
Tipos de datos
Clasificación de tipos
Simples
Estándar: int, float, double, char, boolConjunto de valores predeterminado
Definidos por el usuario: enumeradosConjunto de valores definido por el programador
Estructurados
Colecciones homogéneas: arraysTodos los elementos del mismo tipo
Colecciones heterogéneas: estructurasLos elementos pueden ser de tipos distintos
?
?
?
Tipos estructurados
Colecciones o tipos aglomerados
Agrupaciones de datos (elementos):
Todos del mismo tipo: array o tabla
De tipos distintos: estructura, registro o tupla
Arrays (tablas)
Elementos organizados por posición: 0, 1, 2, 3, …
Acceso por índice: 0, 1, 2, 3, …
Una o varias dimensiones
Estructuras (tuplas, registros)
Elementos (campos) sin orden establecido
Acceso por nombre
Arrays
[]
Estructura secuencial
Cada elemento se encuentra en una posición (índice):
Los índices son enteros positivos
El índice del primer elemento siempre es 0
Los índices se incrementan de uno en uno
Acceso directo
A cada elemento se accede a través de su índice:
ventas[4] accede al 5º elemento (contiene el valor 435.00)
cout < < ventas[4];
ventas[4] = 442.75;
(Gp:) Datos de un mismo tipo base:Se usan como cualquier variable
Tipos y variables arrays
Declaración de tipos de arrays
const int Dimensión = …;
typedef tipo_base tNombre[Dimensión];
Ejemplo:
const int Dias = 7;
typedef double tVentas[Dias];
Declaración de variables de tipos array: como cualquier otra
tVentas ventas;
¡NO se inicializan los elementos automáticamente!
¡Es responsabilidad del programador usar índices válidos!
No se pueden copiar arrays directamente (array1 = array2)
Hay que copiarlos elemento a elemento
Arrays y bucles for
Procesamiento de arrays
Recorridos
Búsquedas
Ordenación etcétera…
Recorrido de arrays con bucles for
Arrays: tamaño fijo ? Bucles de recorrido fijo (for)
tVentas ventas;
double media, total = 0;
…
for (int i = 0; i < Dias; i++) {
total = total + ventas[i];
}
media = total / Dias;
const int Dias = 7;
typedef double tVentas[Dias];
tVentas ventas;
double media, total = 0;
…
for (int i = 0; i < Dias; i++) {
total = total + ventas[i];
}
(Gp:) 12.40
(Gp:) 1
(Gp:) 23.36
(Gp:) 2
(Gp:) 31.79
(Gp:) 3
(Gp:) 43.44
(Gp:) 4
(Gp:) 84.62
(Gp:) 7
Arrays y bucles for
(Gp:) false
(Gp:) true
(Gp:) total+=ventas[i]
(Gp:) i++
(Gp:) i< Dias
(Gp:) i = 0
…
Inicialización de arrays
Podemos inicializar los elementos de los arrays en la declaración
Asignamos una serie de valores al array:
const int DIM = 10;
typedef int tTabla[DIM];
tTabla i = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
Se asignan los valores por su orden:
i[0] i[1] i[2] i[3] i[4] … i[9]
1º 2º 3º 4º 5º … 10º
Si hay menos valores que elementos, los restantes se ponen a 0
tTabla i = { 0 }; // Pone todos los elementos a 0
Enumerados como índices
const int Colores = 3,
typedef enum { rojo, verde, azul } tRGB;
typedef int tColor[Colores];
tColor color;
…
cout < < "Cantidad de rojo (0-255): ";
cin >> color[rojo];
cout < < "Cantidad de verde (0-255): ";
cin >> color[verde];
cout < < "Cantidad de azul (0-255): ";
cin >> color[azul];
Recuerda que internamente se asignan enteros a partir de 0a los distintos símbolos del enumeradorojo ? 0 verde ? 1 azul ? 2
Paso de arrays a subprogramas
Simulación de paso de parámetro por referencia
Sin poner & en la declaración del parámetro
Los subprogramas reciben la dirección en memoria del array
const int Max = 10;
typedef int tTabla[Max];
void inicializa(tTabla tabla); // Sin poner &
Las modificaciones del array quedan reflejadas en el argumento
inicializa(array);
Si inicializa() modifica algún elemento de tabla, automáticamente queda modificado ese elemento de array
¡Son el mismo array!
Paso de arrays a subprogramas
0 1 2 3 4 5 6 7 8 9
const int Dim = 10;
typedef int tTabla[Dim];
void inicializa(tTabla tabla); // no se usa &
void inicializa(tTabla tabla) {
for (int i = 0; i < Dim; i++)
tabla[i] = i;
}
int main() {
tTabla array;
inicializa(array); // array queda modificado
for (int i = 0; i < Dim; i++)
cout < < array[i] < < " ";
…
Paso de arrays a subprogramas
¿Cómo evitar que se modifique el array?
Usando el modificador const en la declaración del parámetro:
const tTabla tabla Un array de constantes
void muestra(const tTabla tabla);
El argumento se tratará como un array de constantes
Si en el subprograma hay alguna instrucción que intente modificar un elemento del array: error de compilación
void muestra(const tTabla tabla) {
for (int i = 0; i < Dim; i++) {
cout < < tabla[i] < < " ";
// OK. Se accede, pero no se modifica
}
}
Implementación de listas con arrays
Listas con un número fijo de elementos
Array con el nº de elementos como dimensión
const int NUM = 100;
typedef double tLista[NUM]; // Exactamente 100 double
tLista lista;
Recorrido de la lista:
for (int i = 0; i < NUM; i++) {
…
Búsqueda en la lista:
while ((i < NUM) && !encontrado) {
…
Página siguiente ![]() |