24 - Vectores y matrices paralelas


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

matrices y vectores paralelos

Si tenemos una matriz de caracteres de 5 filas y 30 columnas en la que se almacenan los nombres de personas y un vector de 5 enteros en la que se almacenan las edades de dichas personas, decimos que la matriz nombres es paralelo al vector edades si en la componente 0 del vector y la fila 0 de la matriz se almacena información relacionada a una persona (Juan - 12 años)

Es decir hay una relación entre cada componente del vector y la fila de la matriz.

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: programa124.c

Ver video

#include<stdio.h>
#include<conio.h>

void cargar(char nombres[5][41],int edades[5])
{
    int f;
    for(f=0;f<5;f++)
    {
        printf("Ingrese nombre:");
        gets(nombres[f]);
        printf("Ingrese edad:");
        scanf("%i",&edades[f]);
        fflush(stdin);
    }
}

void mayorEdad(char nombres[5][41],int edades[5])
{
    int f;
    printf("Personas mayores de edad.\n");
    for(f=0;f<5;f++)
    {
        if (edades[f]>=18)
        {
            printf("%s\n",nombres[f]);
        }
    }
}


int main()
{
    char nombres[5][41];
    int edades[5];
    cargar(nombres,edades);
    mayorEdad(nombres,edades);
    getch();
    return 0;
}

En la main definimos la matriz y el vector paralelo (los dos tienen 5 elementos):

int main()
{
    char nombres[5][41];
    int edades[5];

Como debemos cargar 5 nombres, luego debemos indicar en el primer subíndice un 5 y un 41 para indicar la cantidad de caracteres que se reserva por nombre ocupando uno de ellos el terminador de cadena.

Mediante un for procedemos a la carga de cada fila de la matriz y cada elemento del vector edades:

void cargar(char nombres[5][41],int edades[5])
{
    int f;
    for(f=0;f<5;f++)
    {
        printf("Ingrese nombre:");
        gets(nombres[f]);
        printf("Ingrese edad:");
        scanf("%i",&edades[f]);
        fflush(stdin);
    }
}

Luego de la carga de la edad de la persona se procede a cargar otro nombre por lo que debemos llamar a la función fflush (esto debido a que en el buffer de teclado queda un enter después de cargar un entero)

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

void mayorEdad(char nombres[5][41],int edades[5])
{
    int f;
    printf("Personas mayores de edad.\n");
    for(f=0;f<5;f++)
    {
        if (edades[f]>=18)
        {
            printf("%s\n",nombres[f]);
        }
    }
}

Problemas propuestos

Solución
programa125.c

#include<stdio.h>
#include<conio.h>

void cargar(char productos[5][41],float precios[5])
{
    int f;
    for(f=0;f<5;f++)
    {
        printf("Ingrese el nombre del producto:");
        gets(productos[f]);
        printf("Ingrese su precio:");
        scanf("%f",&precios[f]);
        fflush(stdin);
    }
}

void precioMayorPrimero(float precios[5])
{
    int f;
    int cant=0;
    for(f=1;f<5;f++)
    {
        if (precios[f]>precios[0])
        {
            cant++;
        }
    }
    printf("La cantidad de productos con un precio mayor al primero ingresado son:%i",cant);
}

void imprimir(char productos[5][41],float precios[5])
{
    int f;
    for(f=0;f<5;f++)
    {
        printf("Producto: %s - Precio: %0.2f\n",productos[f],precios[f]);
    }
}

int main()
{
    char productos[5][41];
    float precios[5];
    cargar(productos,precios);
    imprimir(productos,precios);
    precioMayorPrimero(precios);
    getch();
    return 0;
}




programa126.c

#include<stdio.h>
#include<conio.h>

void cargar(char nombres[4][40],int notas[4])
{
    int f;
    for(f=0;f<4;f++)
    {
        printf("Ingrese nombre del alumno:");
        gets(nombres[f]);
        printf("Ingrese su nota:");
        scanf("%i",&notas[f]);
        fflush(stdin);
    }
}

void imprimirEstado(char nombres[4][40],int notas[4])
{
    int f;
    for(f=0;f<4;f++)
    {
        printf("%s %i ",nombres[f],notas[f]);
        if (notas[f]>=8)
        {
            printf("Muy bueno");
        }
        else
        {
            if (notas[f]>4)
            {
                printf("Bueno");
            }
            else
            {
                printf("Insuficiente");
            }
        }
        printf("\n");
    }
}

void cantidadAlumnosMuyBuenos(int notas[4])
{
    int f;
    int cant=0;
    for(f=0;f<4;f++)
    {
        if (notas[f]>=8)
        {
            cant++;
        }
    }
    printf("Cantidad de alumnos muy buenos:%i",cant);
}


int main()
{
    char nombres[4][40];
    int notas[4];
    cargar(nombres,notas);
    imprimirEstado(nombres,notas);
    cantidadAlumnosMuyBuenos(notas);
    getch();
    return 0;
}

Retornar