15 - Estructura de datos tipo vector en C++


Hemos empleado variables de distinto tipo para el almacenamiento de datos (variables int, float, cadenas de caracteres) En esta sección veremos otros tipos de variables que permiten almacenar un conjunto de datos en una única variable.

Un vector es una estructura de datos que permite almacenar un CONJUNTO de datos del MISMO tipo.
Con un único nombre se define un vector y por medio de un subíndice hacemos referencia a cada elemento del mismo (componente)

Problema 1:

Se desea guardar los sueldos de 5 operarios.
Según lo conocido deberíamos definir 5 variables si queremos tener en un cierto momento los 5 sueldos almacenados en memoria.
Empleando un vector solo se requiere definir un único nombre y accedemos a cada elemento por medio del subíndice.

vector

Programa:

#include<iostream>

using namespace std;

class PruebaVector1 {
private:
    int sueldos[5];
public:
    void cargar();
    void imprimir();
};

void PruebaVector1::cargar()
{
    for (int f = 0; f < 5; f++)
    {
        cout <<"Ingrese valor del sueldo:";
        cin >>sueldos[f];
    }
}

void PruebaVector1::imprimir()
{
    cout <<"Listado de sueldos.";
    cout <<"\n";
    for(int f = 0; f < 5; f++) 
    {
        cout <<sueldos[f];
        cout <<"\n";
    }
    cin.get();
    cin.get();
}

int main()
{
    PruebaVector1 pv1;
    pv1.cargar();
    pv1.imprimir();
    return 0;
}

Este proyecto lo puede descargar en un zip desde este enlace : Vector1

Para la declaración de un vector le agregamos corchetes abiertos y cerrados con un valor que indica la cantidad de sueldos que podrá almacenar (en este ejemplo reservamos espacio para cinco sueldos):

    int sueldos[5];

Lo definimos como atributo de la clase ya que lo utilizaremos en los dos métodos y además lo ubicamos en la zona private para no poder accederlo fuera de la clase.

Para cargar cada componente debemos indicar entre corchetes que elemento del vector estamos accediendo:

void PruebaVector1::cargar()
{
    for (int f = 0; f < 5; f++)
    {
        cout <<"Ingrese valor del sueldo:";
        cin >>sueldos[f];
    }
}

La estructura de programación que más se adapta para cargar en forma completa las componentes de un vector es un for, ya que sabemos de antemano la cantidad de valores a cargar, de todos modos no es obligatorio tener que utilizar un for.

Cuando f vale cero estamos accediendo a la primer componente del vector (en nuestro caso sería):

        cin >>sueldos[f];

Lo mas común es utilizar una estructura repetitiva for para recorrer cada componente del vector.

Utilizar el for nos reduce la cantidad de código, si no utilizo un for debería en forma secuencial implementar el siguiente código:

    cout <<"Ingrese valor de la componente:";
    cin >>sueldos[0];
    cout <<"Ingrese valor de la componente:";
    cin >>sueldos[1];
    cout <<"Ingrese valor de la componente:";
    cin >>sueldos[2];
    cout <<"Ingrese valor de la componente:";
    cin >>sueldos[3];
    cout <<"Ingrese valor de la componente:";
    cin >>sueldos[4];          

La impresión de las componentes del vector lo hacemos en el otro método:

void PruebaVector1::imprimir()
{
    cout <<"Listado de sueldos.";
    cout <<"\n";
    for(int f = 0; f < 5; f++) 
    {
        cout <<sueldos[f];
        cout <<"\n";
    }
    cin.get();
    cin.get();
}

Siempre que queremos acceder a una componente del vector debemos indicar entre corchetes la componente, dicho valor comienza a numerarse en cero y continua hasta un número menos del tamaño del vector, en nuestro caso creamos el vector con 5 elementos

Por último en este programa creamos un objeto en la main y llamamos a lo métodos de cargar e imprimir el vector:

int main()
{
    PruebaVector1 pv1;
    pv1.cargar();
    pv1.imprimir();
    return 0;
}

Problema 2:

Definir un vector de 5 componentes de tipo float que representen las alturas de 5 personas.
Obtener el promedio de las mismas. Contar cuántas personas son más altas que el promedio y cuántas más bajas.

Programa:

#include<iostream>

using namespace std;

class PruebaVector2 {
private:
    float alturas[5];
    float promedio;
public:
    void cargar();
    void calcularPromedio();
    void mayoresMenores();
};

void PruebaVector2::cargar()
{
    for (int f = 0; f < 5; f++)
    {
        cout <<"Ingrese la altura de la persona:";
        cin >>alturas[f];
    }
}

void PruebaVector2::calcularPromedio()
{
    float suma;
    suma=0;
    for(int f=0; f < 5; f++) 
    {
        suma=suma+alturas[f];
    }
    promedio=suma/5;
    cout <<"Promedio de alturas:";
    cout <<promedio;
    cout <<"\n";
}

void PruebaVector2::mayoresMenores()
{
    int may,men;
    may=0;
    men=0;
    for(int f = 0; f < 5; f++) 
    {
        if (alturas[f] > promedio) 
        {
            may++;
        }
        else
        {
            if (alturas[f] < promedio) 
            {
                men++;
            }
        }
    }
    cout <<"Cantidad de personas mayores al promedio:";
    cout <<may;
    cout <<"\n";
    cout <<"Cantidad de personas menores al promedio:";
    cout <<men;
    cin.get();
    cin.get();
}

int main()
{
    PruebaVector2 pv2;
    pv2.cargar();
    pv2.calcularPromedio();
    pv2.mayoresMenores();
    return 0;
}

Este proyecto lo puede descargar en un zip desde este enlace : Vector2

Definimos como atributo un vector donde almacenaremos las cinco alturas:

    float alturas[5];

En el método cargar procedemos a ingresar por teclado las 5 alturas de personas::

    for (int f = 0; f < 5; f++)
    {
        cout <<"Ingrese la altura de la persona:";
        cin >>alturas[f];
    }

En otro método procedemos a sumar todas sus componentes y obtener el promedio. El promedio lo almacenamos en un atributo de la clase ya que lo necesitamos en otro método:

void PruebaVector2::calcularPromedio()
{
    float suma;
    suma=0;
    for(int f=0; f < 5; f++) 
    {
        suma=suma+alturas[f];
    }
    promedio=suma/5;
    cout <<"Promedio de alturas:";
    cout <<promedio;
    cout <<"\n";
}

Por último en un tercer método comparamos cada componente del vector con el atributo promedio, si el valor almacenado supera al promedio incrementamos un contador en caso que sea menor al promedio incrementamos otro contador:

void PruebaVector2::mayoresMenores()
{
    int may,men;
    may=0;
    men=0;
    for(int f = 0; f < 5; f++) 
    {
        if (alturas[f] > promedio) 
        {
            may++;
        }
        else
        {
            if (alturas[f] < promedio) 
            {
                men++;
            }
        }
    }
    cout <<"Cantidad de personas mayores al promedio:";
    cout <<may;
    cout <<"\n";
    cout <<"Cantidad de personas menores al promedio:";
    cout <<men;
    cin.get();
    cin.get();
}

En la main creamos un objeto de la clase PruebaVector2 y procedemos a llamar a sus métodos:

int main()
{
    PruebaVector2 pv2;
    pv2.cargar();
    pv2.calcularPromedio();
    pv2.mayoresMenores();
    return 0;
}

Importante:

En este problema podemos observar una ventaja de tener almacenadas todas las alturas de las personas. Si no conociéramos los vectores tenemos que cargar otra vez las alturas por teclado para compararlas con el promedio.
Mientras el programa está en ejecución tenemos el vector alturas a nuestra disposición. Es importante tener en cuenta que cuando finaliza la ejecución del programa se pierde el contenido de todas las variables (simples y vectores)

Problema 3:

Una empresa tiene dos turnos (mañana y tarde) en los que trabajan 8 empleados (4 por la mañana y 4 por la tarde)
Confeccionar un programa que permita almacenar los sueldos de los empleados agrupados por turno.
Imprimir los gastos en sueldos de cada turno.

Programa:

#include<iostream>

using namespace std;

class PruebaVector3{
private:
    float turnoMan[4];
    float turnoTar[4];
public:
    void cargar();
    void calcularGastos();
};

void PruebaVector3::cargar()
{
    cout <<"Sueldos de empleados del turno de la mañana.";
    cout <<"\n";
    for(int f = 0; f < 4; f++) 
    {
        cout <<"Ingrese sueldo:";
        cin >>turnoMan[f];
    }
    cout <<"Sueldos de empleados del turno de la tarde.";
    cout <<"\n";
    for(int f = 0; f < 4; f++) 
    {
        cout <<"Ingrese sueldo:";
        cin >>turnoTar[f];
    }
}

void PruebaVector3::calcularGastos()
{
    float man=0;
    float tar=0;
    for(int f = 0; f < 4; f++)
    {
        man=man+turnoMan[f];
        tar=tar+turnoTar[f];
    }
    cout <<"Total de gastos del turno de la mañana:";
    cout <<man;
    cout <<"\n";
    cout <<"Total de gastos del turno de la tarde:";
    cout <<tar;
    cin.get();
    cin.get();
}

int main()
{
    PruebaVector3 pv3;
    pv3.cargar();
    pv3.calcularGastos();
    return 0;
}

Este proyecto lo puede descargar en un zip desde este enlace : Vector3

Definimos dos atributos de tipo vector donde almacenaremos los sueldos de los empleados de cada turno:

class PruebaVector3{
private:
    float turnoMan[4];
    float turnoTar[4];
public:
    void cargar();
    void calcularGastos();
};

Mediante dos estructuras repetitivas procedemos a cargar cada vector:

void PruebaVector3::cargar()
{
    cout <<"Sueldos de empleados del turno de la mañana.";
    cout <<"\n";
    for(int f = 0; f < 4; f++) 
    {
        cout <<"Ingrese sueldo:";
        cin >>turnoMan[f];
    }
    cout <<"Sueldos de empleados del turno de la tarde.";
    cout <<"\n";
    for(int f = 0; f < 4; f++) 
    {
        cout <<"Ingrese sueldo:";
        cin >>turnoTar[f];
    }
}

En otro método procedemos a sumar las componentes de cada vector y mostrar dichos acumuladores:

void PruebaVector3::calcularGastos()
{
    float man=0;
    float tar=0;
    for(int f = 0; f < 4; f++)
    {
        man=man+turnoMan[f];
        tar=tar+turnoTar[f];
    }
    cout <<"Total de gastos del turno de la mañana:";
    cout <<man;
    cout <<"\n";
    cout <<"Total de gastos del turno de la tarde:";
    cout <<tar;
    cin.get();
    cin.get();
}

Problemas propuestos

  1. Desarrollar un programa que permita ingresar un vector de 8 elementos, e informe:
    El valor acumulado de todos los elementos del vector.
    El valor acumulado de los elementos del vector que sean mayores a 36.
    Cantidad de valores mayores a 50.
  2. Realizar un programa que pida la carga de dos vectores numéricos enteros de 4 elementos. Obtener la suma de los dos vectores, dicho resultado guardarlo en un tercer vector del mismo tamaño. Sumar componente a componente.
  3. Se tienen las notas del primer parcial de los alumnos de dos cursos, el curso A y el curso B, cada curso cuenta con 5 alumnos.
    Realizar un programa que muestre el curso que obtuvo el mayor promedio general.
  4. Cargar un vector de 10 elementos y verificar posteriormente si el mismo está ordenado de menor a mayor.
Solución
#include<iostream>

using namespace std;

class PruebaVector4{
private:
    int vec[8];
public:
    void cargar();
    void acumularElementos();
    void acumularMayores36();
    void CantidadMayores50();
};

void PruebaVector4::cargar()
{
    for(int f = 0; f < 8; f++) 
    {
        cout <<"Ingrese elemento:";
        cin >>vec[f];
    }
}

void PruebaVector4::acumularElementos()
{
    int suma=0;
    for(int f = 0; f < 8; f++) 
    {
        suma=suma+vec[f];
    }
    cout <<"La suma de los 8 elementos es:";
    cout <<suma;
    cout <<"\n";
}

void PruebaVector4::acumularMayores36()
{
    int suma=0;
    for(int f = 0; f < 8; f++) 
    {
        if (vec[f] > 36) 
        {
            suma=suma+vec[f];
        }
    }
    cout <<"La suma de los elementos mayores a 36 es:";
    cout <<suma;
    cout <<"\n";
}

void PruebaVector4::CantidadMayores50()
{
    int cant=0;
    for(int f = 0; f < 8; f++) 
    {
        if (vec[f] > 50) 
        {
            cant++;
        }    
    }
    cout <<"La cantidad de valores mayores a 50 es:";
    cout <<cant;
    cout <<"\n";
    cin.get();
    cin.get();
}

int main()
{
    PruebaVector4 pv4;
    pv4.cargar();
    pv4.acumularElementos();
    pv4.acumularMayores36();
    pv4.CantidadMayores50();
    return 0;
}

Este proyecto lo puede descargar en un zip desde este enlace :Vector4

#include<iostream> using namespace std; class PruebaVector5 { private: int vec1[4]; int vec2[4]; int vecSuma[4]; public: void cargar(); void sumarizarVectores(); }; void PruebaVector5::cargar() { cout <<"Carga del primer vector."; cout <<"\n"; for(int f = 0;f < 4; f++) { cout <<"Ingrese elemento:"; cin >>vec1[f]; } cout <<"Carga del segundo vector."; cout <<"\n"; for(int f = 0; f < 4; f++) { cout <<"Ingrese elemento:"; cin >>vec2[f]; } } void PruebaVector5::sumarizarVectores() { for(int f = 0;f < 4; f++) { vecSuma[f]=vec1[f]+vec2[f]; } cout <<"Vector resultante."; cout <<"\n"; for(int f = 0; f < 4; f++) { cout <<vecSuma[f]; cout <<"\n"; } cin.get(); cin.get(); } int main() { PruebaVector5 pv5; pv5.cargar(); pv5.sumarizarVectores(); return 0; }

Este proyecto lo puede descargar en un zip desde este enlace :Vector5

#include<iostream> using namespace std; class PruebaVector6 { private: int cursoa[5]; int cursob[5]; public: void cargar(); void calcularPromedios(); }; void PruebaVector6::cargar() { cout <<"Carga de notas del curso A"; cout <<"\n"; for(int f = 0; f < 5; f++) { cout <<"Ingrese nota:"; cin >>cursoa[f]; } cout <<"Carga del notas del curso B"; cout <<"\n"; for(int f = 0; f < 5; f++) { cout <<"Ingrese nota:"; cin >>cursob[f]; } } void PruebaVector6::calcularPromedios() { int suma1=0; int suma2=0; for(int f=0;f<5;f++) { suma1=suma1+cursoa[f]; suma2=suma2+cursob[f]; } int promedioa=suma1/5; int promediob=suma2/5; if (promedioa>promediob) { cout <<"El curso A tiene un promedio mayor."; } else { cout <<"El curso B tiene un promedio mayor."; } cin.get(); cin.get(); } int main() { PruebaVector6 pv6; pv6.cargar(); pv6.calcularPromedios(); return 0; }

Este proyecto lo puede descargar en un zip desde este enlace :Vector6

#include<iostream> using namespace std; class PruebaVector7 { private: int vec[10]; public: void cargar(); void verificarOrdenado(); }; void PruebaVector7::cargar() { for(int f = 0; f < 10; f++) { cout <<"Ingrese elemento:"; cin >>vec[f]; } } void PruebaVector7::verificarOrdenado() { int orden=1; for(int f = 0; f < 9; f++) { if (vec[f+1] < vec[f]) { orden=0; } } if (orden==1) { cout <<"Esta ordenado de menor a mayor"; } else { cout <<"No esta ordenado de menor a mayor"; } cin.get(); cin.get(); } int main() { PruebaVector7 pv7; pv7.cargar(); pv7.verificarOrdenado(); return 0; }

Este proyecto lo puede descargar en un zip desde este enlace :Vector7

Retornar