16 - Vectores paralelos


Este concepto se da cuando hay una relación entre las componentes de igual subíndice (misma posición) de un vector y otro.

vectores paralelos

Si tenemos dos vectores de 5 elementos cada uno. En uno se almacenan los nombres de personas en el otro las edades de dichas personas.
Decimos que el vector nombres es paralelo al vector edades si en la componente 0 de cada vector se almacena información relacionada a una persona (Juan - 12 años)
Es decir hay una relación entre cada componente de los dos vectores.

Esta relación la conoce únicamente el programador y se hace para facilitar el desarrollo de algoritmos que procesen los datos almacenados en las estructuras de datos.

Problema 1:

Desarrollar un programa que permita cargar 5 nombres de personas y sus edades respectivas. Luego de realizar la carga por teclado de todos los datos imprimir los nombres de las personas mayores de edad (mayores o iguales a 18 años)

Programa:

#include<iostream>

using namespace std;

class PersonasEdades {
private:
    char nombres[5][40];
    int edades[5];
public:
    void cargar();
    void mayoresEdad();
};

void PersonasEdades::cargar()
{
    for(int f=0;f < 5;f++) 
    {
        cout <<"Ingrese nombre:";
        cin.getline(nombres[f],40);
        cout <<"Ingrese edad:";
        cin >>edades[f];
        cin.get();
    }
}

void PersonasEdades::mayoresEdad()
{
    cout <<"Personas mayores de edad.";
    cout <<"\n";
    for(int f=0;f < 5;f++) 
    {
        if (edades[f] >= 18) 
        {
            cout <<nombres[f];
            cout <<"\n";
        }
    }
    cin.get();
}

int main()
{
    PersonasEdades pe;
    pe.cargar();
    pe.mayoresEdad();
    return 0;
}

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

Definimos los dos vectores:

private:
    char nombres[5][40];
    int edades[5];

Como debemos cargar 5 nombres, luego debemos indicar en el primer subíndice un 5 y un 40 para indicar la cantidad de caracteres por nombre (tener en cuenta que las cadenas de caracteres se almacenan en forma distinta a los int y float).

Mediante un for procedemos a la carga de los elementos de los vectores:

    for(int f=0;f < 5;f++) 
    {
        cout <<"Ingrese nombre:";
        cin.getline(nombres[f],40);
        cout <<"Ingrese edad:";
        cin >>edades[f];
        cin.get();
    }

Luego de la carga de la edad de la persona se procede a cargar otro nombre por lo que debemos llamar al método get del objeto cin (esto debido a que en el buffer de teclado queda un enter)

Para imprimir los nombres de las personas mayores de edad verificamos cada componente del vector de edades, en caso que sea igual o mayor o 18 procedemos a mostrar el elemento de la misma posición del otro vector:

void PersonasEdades::mayoresEdad()
{
    cout <<"Personas mayores de edad.";
    cout <<"\n";
    for(int f=0;f < 5;f++) 
    {
        if (edades[f] >= 18) 
        {
            cout <<nombres[f];
            cout <<"\n";
        }
    }
    cin.get();
}

En la main creamos un objeto de la clase PersonasEdades y llamamos a sus dos métodos:

int main()
{
    PersonasEdades pe;
    pe.cargar();
    pe.mayoresEdad();
    return 0;
}

Problemas propuestos

  1. Crear una clase que permita ingresar el nombre de 5 productos y sus respectivos precios. Definir dos vectores paralelos. Mostrar cuantos productos tienen un precio mayor al primer producto ingresado.
  2. En un curso de 4 alumnos se registraron las notas de sus exámenes y se deben procesar de acuerdo a lo siguiente:
    a) Ingresar Nombre y Nota de cada alumno (almacenar los datos en dos vectores paralelos)
    b) Realizar un listado que muestre los nombres, notas y condición del alumno. En la condición, colocar "Muy Bueno" si la nota es mayor o igual a 8, "Bueno" si la nota está entre 4 y 7, y colocar "Insuficiente" si la nota es inferior a 4.
    c) Imprimir cuantos alumnos tienen la leyenda “Muy Bueno”.
Solución
#include<iostream>

using namespace std;

class ProductoPrecio {
private:
    char nombres[5][40];
    float precios[5];
public:
    void cargar();
    void precioMayorPrimero();
};

void ProductoPrecio::cargar()
{
    for (int f = 0; f < 5; f++)
    {
        cout << "Ingrese el nombre del producto:";
        cin.getline(nombres[f], 40);
        cout << "Ingrese el precio:";
        cin >> precios[f];
        cin.get();
    }
}

void ProductoPrecio::precioMayorPrimero()
{
    int cantidad = 0;
    for (int f = 0; f < 5; f++)
    {
        if (precios[f]>precios[0])
        {
            cantidad++;
        }
    }
    cout << "Cantidad de productos con un precio mayor al primero:";
    cout << cantidad;
    cin.get();
}

int main()
{
    ProductoPrecio productoprecio1;
    productoprecio1.cargar();
    productoprecio1.precioMayorPrimero();
    return 0;
}

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

#include<iostream> using namespace std; class NotasAlumnos { private: char nombres[4][40]; int notas[4]; public: void cargar(); void imprimirEstado(); void cantidadAlumnosMuyBueno(); }; void NotasAlumnos::cargar() { for (int f = 0; f < 4; f++) { cout << "Ingrese el nombre del alumno:"; cin.getline(nombres[f], 40); cout << "Ingrese la nota:"; cin >> notas[f]; cin.get(); } } void NotasAlumnos::imprimirEstado() { for (int f = 0; f < 4; f++) { cout << nombres[f]; cout << "-"; cout << notas[f]; cout << "-"; if (notas[f] >= 8) { cout << "Muy bueno"; } else { if (notas[f] >= 4) { cout << "Bueno"; } else { cout << "Insuficiente"; } } cout << "\n"; } } void NotasAlumnos::cantidadAlumnosMuyBueno() { int cantidad = 0; for (int f = 0; f < 4; f++) { if (notas[f] >= 8) { cantidad++; } } cout << "Cantidad de alumnos muy buenos:"; cout << cantidad; } int main() { NotasAlumnos notaslumnos1; notaslumnos1.cargar(); notaslumnos1.imprimirEstado(); notaslumnos1.cantidadAlumnosMuyBueno(); return 0; }

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

Retornar