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 |