jueves, 29 de octubre de 2009

Aprende a programar: 6 - Vectores y Matrices

Hasta ahora las variables usaban un valor simple como un entero, un carácter, un booleano, etc... a medida que se maneja mayor número de datos y de variables, se incrementa la dificultad de comprender los programas y el tamaño de éstos. Gracias a las estructuras de datos podemos tener esas variables mejor organizadas, en una estructura, de forma que sea sencillo acceder a ellas.
Hay muchos tipos de estructuras de datos, en esta unidad didáctica sólo haremos un primer acercamiento explicando los vectores y las matrices.

Imaginemos que tenemos que almacenar las notas de 10 alumnos en nuestro programa, según lo que sabemos hasta ahora, tendríamos que crear 10 variables diferentes para tenerlas todas disponibles en nuestro programa. Quizá sea algo viable, pero... ¿y si queremos almacenar 500 notas?, ¡¡sería bastante engorroso tener que crear 500 variables!!... una solución bastante común y recurrida a este tipo de problema son los vectores.

VECTORES

Un vector es un conjunto finito y ordenado de elementos del mismo tipo, el hecho de estar ordenado significa que cada elemento es identificable por la posición que ocupa dentro del vector, lo que permite acceder de forma directa a cualquiera delos elementos que forman ese conjunto finito de datos, para ello habrá que indicar la posición que ocupa el elemento.
Para definir un vector necesitamos saber cuál será su tamaño, es decir, cuántos elementos podrá almacenar como máximo.

Definición de un vector:
tipoDato nombreVector[tamaño];

Algunos lenguajes, como C++, tienen la peculiaridad de que comienzan por la posición 0, y terminan por la posición tamaño-1;
Por ejemplo, si definimos int vector[10];, el primer elemento sería vector[0] mientras que el último sería vector[9]. Si intentamos acceder a vector[10] obtendríamos un error de ejecución.

Podemos usar cualquier elemento del vector como si se tratase de una variable de su tipo. Si tenemos un vector de números enteros, podemos sumar, restar elementos de los vectores: vector[2]+vector[5],etc...

Ejemplo de uso de un vector:

#include <iostream>
using namespace std;

int main()
{
    int ktam=10;
    float notas[ktam];
    int i;

    //Vamos a almacenar las notas
    for (i=0;i<ktam;i++)
    {
        cout << "Introduce la nota del alumno " << i+1 << endl;
        cin >> notas[i];
    }

    //Ahora mostramos las notas
    for (i=0;i<ktam;i++)
        cout<< "La nota del alumno " << i+1 << " es de " << notas[i] << endl;

    system("pause");
}

Para usar vectores como parámetros de una función, simplemente tenemos que incluir los corchetes en la declaración de la función para indicar que el parámetro es un vector. Ejemplo:
#include < iostream >
using namespace std;

void LeerNotas(float vector[],int tamanyo)
{
    int i;
    for (i=0;i<tamanyo;i++)
    {
        cout << "Introduce la nota del alumno " << i+1 << endl;
        cin >> vector[i];
    }
}

int main()
{
    const int ktam=10;
    float notas[ktam];
    int i;

    //Vamos a almacenar las notas
    LeerNotas(notas,ktam);

    //Ahora mostramos las notas
    for (i=0;i<ktam;i++)
        cout<< "La nota del alumno " << i+1 << " es de " << notas[i] << endl;

    system("pause");
}

Un vector siempre se pasa a una función como parámetro POR REFERENCIA.

MATRICES (VECTORES MULTIDIMENSIONALES)

En ocasiones, para representar un conjunto de datos del mismo tipo puede no ser del todo cómodo utilizar vectores de una sola dimensión. En el ejemplo anteror, se almacenaba una nota para cada alumno, pero ¿y si se quiseran guardar 10 notas de cada alumno?, ¡volvemos a tener el mismo problema que con las variables!. La solución a esto es crear vectores multidimensionales, donde cada posición del vector tiene otras tantas posiciones. Por tanto, si declaramos una matriz de 10x10 elementos, en total son 100 elementos.

Veamos ahora como se aplicaría el uso de matrices al nuevo problema:
#include <iostream>
using namespace std;

const int kalumnos=3;
const int knotas=3;

void LeerNotas(float matriz[][knotas],int alumnos,int notas)
{
    int i,j;
    for (i=0;i<alumnos;i++)
        for (j=0;j<notas;j++)
        {
            cout << "Introduce la nota "<< j+1 <<" del alumno " << i+1 << endl;
            cin >> matriz[i][j];
        }
}

int main()
{
    float notas[kalumnos][knotas];
    //notas[i][j] sería la nota j del alumno i
    int i,j;

    //Vamos a almacenar las notas
    LeerNotas(notas,kalumnos,knotas);

    //Ahora mostramos las notas
    for (i=0;i<kalumnos;i++)
        for (j=0;j<knotas;j++)
            cout<< "La nota "<< j+1 <<" del alumno " << i+1 << " es de " << notas[i][j] << endl;

    system("pause");
}


Para que una función reciba como parámetro un vector multidimensional, se ha de especificar el tamaño de todas las dimensiones excepto la primera.

¡FIN!

y ahora.... ¿por donde sigo?... Bueno, si has terminado este manual, te aconsejo que empieces con la programación orientada a objetos. ¡Suerte! ;)

No hay comentarios:

Publicar un comentario