Monografias.com > Computación > Programación
Descargar Imprimir Comentar Ver trabajos relacionados

Arreglos Multidimensionales




Enviado por Pablo Turmero



Partes: 1, 2


    Monografias.com
    Motivación
    La mayoría de las aplicaciones actuales requieren el manejo de grandes cantidades de datos.

    Si requerimos almacenar N datos, uno podría declarar variables llamadas x1, x2, …, xN. Sin embargo, esto suele ser impráctico, ya que no es posible generalizar ciertas tareas para que se apliquen a todas las variables.

    Considere, por ejemplo, el problema de estimar el histograma de serie de tiros de dado: en cada tiro el valor obtenido está entre 1 y 6. Después de N tiros, deseamos saber cuántas veces cayó 1, 2, 3, etc.

    Monografias.com
    Histograma: solución ingenua
    int main() {
    int h1, h2, h3, h4, h5, h6;
    int i, x, N = 1000;
    h1 = h2 = h3 = h4 = h5 = h6 = 0;
    for (i = 0; i < N; i++) {
    x = rand() % 6 + 1;
    switch (x) {
    case 1: h1++; break;
    case 2: h2++; break;
    case 3: h3++; break;
    case 4: h4++; break;
    case 5: h5++; break;
    case 6: h6++; break;
    }
    }

    cout << “Tabla de frecuencias:” << endl;
    cout << “h(1) = “ << h1 << endl;
    cout << “h(2) = “ << h1 << endl;
    cout << “h(3) = “ << h1 << endl;
    cout << “h(4) = “ << h1 << endl;
    cout << “h(5) = “ << h1 << endl;
    cout << “h(6) = “ << h1 << endl;
    return 0;
    }

    Monografias.com
    Arreglos
    Una mejor solución consiste en declarar un arreglo, el cual consiste en un grupo de variables del mismo tipo y con el mismo nombre, pero que se distinguen mediante un subíndice entero.

    La forma de declarar un arreglo en C/C++ es:

    tipo_datos nombre_arreglo[numero_elementos];

    Monografias.com
    Arreglos
    En C/C++, los elementos de un arreglo de tamaño N están indexados a partir de cero hasta N-1.

    Para acceder a los elementos individuales de un arreglo, se escribe el nombre del arreglo seguido de el subíndice del elemento entre corchetes.

    Ejemplo:int a[3];a[0] = 5;a[1] = 8;a[2] = a[0] * a[1];

    Monografias.com
    Histograma: solución con arreglos
    int main() {
    int h[6];
    int i, x, N = 1000;
    for (i = 0; i < 6; i++) { h[i] = 0; }
    for (i = 0; i < N; i++) {
    x = rand() % 6 + 1;
    h[x – 1]++;
    }

    cout << “Tabla de frecuencias” << endl;
    for (i = 0; i < 6; i++) {
    cout << “h(“ << i+1 << “) = “ << h[i] << endl;
    }
    return 0;
    }

    Monografias.com
    Precaución
    El compilador de C/C++ no verifica que los subíndices de los elementos de un arreglo estén dentro de los límites correspondientes.

    El programador debe tener cuidado de no sobrepasar estos límites. De lo contrario, es posible que sobreescriba la memoria asignada a otras variables. Ejemplo:
    int main() { int a[10], x[10]; a[0] = 1; x[10] = 2; cout << a[0] << endl;
    return 0;}

    Monografias.com
    Arreglos como argumentos de funciones
    Es posible pasar un arreglo como argumento de una función.

    En la mayoría de los casos, es necesario también pasar como argumento el tamaño del arreglo.

    Ejemplo:float promedio(float x[], int n);

    Monografias.com
    Histograma: solución general
    void histo(float x[], int nx, int h[], float a, float b, int nbins) {
    int i, j;
    float binsize = (b – a) / nbins;
    for (i = 0; i < nbins; i++) { h[i] = 0; }
    for (i = 0; i < nx; i++) {
    j = (int)((x[i] – a) / binsize);
    if ((j >= 0) && (j < nbins)) h[j]++;
    }
    }

    int main() {
    const int N = 1000;
    float x[N];
    int i, h[6];
    for (i = 0; i < N; i++) { x[i] = rand() % 6 + 1; }
    histo(x, N, h, 1, 6.1, 6);
    for (i = 0; i < 6; i++) { cout << “h(“ << i << “) = “ << h[i] << endl;
    return 0;
    }

    Monografias.com
    Práctica
    Escriba una función llamada minmax() que tome como parámetros un arreglo de floats y su tamaño, así como cuatro variables por referencia: min, nmin, max, nmax. La función deberá encontrar el valor mínimo y máximo en el arreglo y guardarlos en min y max, respectivamente, así como los subíndices correspondientes en nmin y nmax.

    Utilizando la función anterior, escriba otra función para normalizar los datos de un arreglo al rango [0,1] mediante la siguiente transformación:

    Escriba un programa para probar las dos funciones anteriores, utilizando como datos de ejemplo un arreglo de números aleatorios entre -10 y 10.

    Monografias.com
    Ejercicios
    Escriba una función que tome tres arreglos como entrada: x[], h[], y[], junto con sus respectivos tamaños nx, nh, ny. La función debe calcular la convolución de x y h, definida como:asumiendo que h[] vale cero fuera de sus límites. Escriba un programa de prueba que calcule la convolución de las señales [3, -1, 2, 4] y [-3, 1, 3, -1], considerando ny = nx + nh – 1. Verifique la conmutatividad de la convolución.

    Escriba una función que tome como parámetros un arreglo de enteros y su tamaño. La función debe ordenar el arreglo de manera ascendente. Luego escriba otra función que utilice la anterior para encontrar la mediana de un arreglo de enteros. Escriba un programa para probar ambas funciones.

    La entropía de un arreglo X[] se puede definir como:donde pi = hi / N, hi es el i-ésimo bin de un histograma de X, n es el número de bins, y N es el tamaño de X. Escriba una función que tome como argumentos un arreglo, su tamaño, y el número de bins, y devuelva la entropía del arreglo. Utilice las funciones histo() y minmax() vistas en clase. Escriba un programa de prueba.

    Partes: 1, 2

    Página siguiente 

    Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.

    Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.

    Categorias
    Newsletter