Descargar

Tipos de datos estructurados

Enviado por Pablo Turmero


Partes: 1, 2

    edu.red

    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 ? ? ?

    edu.red

    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

    edu.red

    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

    edu.red

    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

    edu.red

    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];

    edu.red

    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

    edu.red

    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

    edu.red

    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

    edu.red

    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!

    edu.red

    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] < < " "; …

    edu.red

    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 } }

    edu.red

    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) { …

    Partes: 1, 2
    Página siguiente