Está en la página 1de 4

VECTORES

Imaginar que queremos implementar un programa que lee 1000 nmeros reales y se quiere calcular la media de dichos nmeros. Como vimos anteriormente podemos utilizar un bucle for y hacer la suma acumulada. Pero, qu pasara si yo necesito guardar en variables esos datos?... Declaro 100 variables double con 1000 nombres distintos?, hago 100 cin? En los temas de bucles, vimos que los algoritmos se pueden complicar. Ahora vemos que no solo los algoritmos se complican, sino tambin los datos. Para poder guardar un tamao grande de datos del mismo tipo, C++ ofrece el uso de vectores. Un vector es un grupo de uno o ms elementos de un tipo base que se almacenan en posiciones consecutivas de memoria. Para acceder a cada uno de los elementos se utiliza un nico nombre (nombre del vector) y un ndice que indica la posicin del elemento en el vector. Para referenciar cada uno de los elementos del vector, seguido del ndice entre corchetes. En C++, los ndices comienzan en cero, es decir, es un valor que va desde cero hasta el tamao menos uno. Declaracin de un vector Tipo_base nombre_de_vector [tamao]; Ejemplos: char cadena[10]; //se reservan 10 caracteres seguidos int datos[100]; //se reservan 100 enteros seguidos Por ejemplo, para imprimir el primer carcter de cadena hacemos lo siguiente: cout << el primer carcter es: << cadena[0] << endl; Pongamos todo esto en prctica: Leer 100 datos reales desde la entrada estndar, y que se escriban en orden inverso al introducido. #include <iostream> using namespace std; int main () { double v[100]; for (int i=0; i < 100; i++) cin >> v[i]; for (int i=99; i>=0; i--) cout << v[i] << endl; } Espacio de cultura El gora Pgina 1

Al igual que para los tipos simples, podemos inicializar el vector en el momento de la declaracin: double datos[3] = { 0.2, 0.3, 0.5 }; No se podra hacer double datos = { 0.2, 0.3, 0.5 }, ya que hay que decirle al compilar que es un vector. Tambin podramos hacer double datos[] = { 0.2, 0.3, 0.5 } sin indicarle el tamao, ya que el compilador sabe que es un vector, cuenta los datos y reserva memoria. Ejemplo Supongamos que se conoce el nmero de alumnos de una clase. Se desea un programa que pida tantas notas como alumnos, y escriba la media. #include <iostream> using namespace std; int main () { const int ALUMNOS = 100; int alumnos [ALUMNOS]; cout << Introduce las notas de los alumnos: << endl; for (int i=0; i < ALUMNOS; i++) { cout << La nota del alumno: << I << endl; cin >> alumnos[i]; } double media=0; for (int i=0; i<ALUMNOS; i++) media += alumnos[i]; media /= ALUMNOS; cout << La media es: << media << endl; } Vectores de constantes Un vector puede almacenar valores que no pueden modificarse (constantes). Para ello, slo tenemos que especificar que el tipo base es constante por medio de la palabra reservada const. const int DIAS_MES[12] = {31,28,31,30,31,30,31,31,30,31,30,31};

Espacio de cultura El gora

Pgina 2

Nota importante Hay que tener mucho cuidado con los lmites de un vector, es decir, si el tamao del vector es n, el lmite del vector es [0,n-1]. Si hacemos un programa que no sabemos cuantos datos vamos a tener, tomaremos la tctica de declarar un vector suficientemente grande, por ejemplo 1000 (suponiendo que a estas alturas de programacin no vamos a tener entradas tan grandes). Paso de vectores a funciones El paso de vectores a funciones se hace declarando un parmetro formal con el mismo tipo. void Escribir (char vec[]) { for (int i=0; i<5; i++) cout << vec[i]; } Como podis observar se declara el vector sin tamao, ya que el tamao es solo para reservar memoria. Ahora bien, pensar que no siempre sabemos el tamao del vector (i<5), que vectores de distinto tamao pueden llamar a nuestra funcin. Normalmente haremos funciones de este tipo: void Escribir (char vec[], int n) { for (int i=0; i<n; i++) cout << vec[i]; } Nota Es importante indicar que la funcin no comprueba nada sobre el tamao del vector. As es responsabilidad del que llama que los tamaos sean correctos. Adems hay que saber que cuando pasamos como parmetro de una funcin un vector, no se hace copia, es decir, aunque no indicamos referencia, lo vectores por defecto trabajan sobre el mismo vector (si modificamos el vector en una funcin, cuando regresamos al main, el valor del vector ha sido modificado).

Espacio de cultura El gora

Pgina 3

Ejercicios

1. Implementar un programa que escribe en la salida estndar un vector de char, cambia los valores (invierte) el vector, y lo vuelve a escribir. NOTA: hacer tres funciones para simplificar el programa: a) void Intercambiar (char &v1, char &v2) b) void Escribir (char vect[], int n) c) void DarLaVuelta (char vec[], int n) 2. Implemente una funcin que reciba un vector de double, un valor mnimo y un valor mximo. Como resultado, modificar el vector de forma que todos los valores mayores que el mximo, y todos los menores que el mnimo, se modificaran con ste. 3. Implemente una funcin Compactar que reciba un vector de enteros, y que lo modifique para que no aparezcan valores consecutivos repetidos. Para ello, eliminar todos los elementos consecutivos. Por ejemplo, si recibe el vector {1,2,2,2,3,7,3,3,3,4} de tamao 10, debe modificarlo para que valga {1,2,3,7,3,4} de tamao 6. NOTA: la cabecera de la funcin es: void Compactar (int v[], int &n)

Espacio de cultura El gora

Pgina 4

También podría gustarte