12 - Estructura de datos tipo vector (elementos int y float)


Hemos empleado variables numéricas de distinto tipo para el almacenamiento de datos (variables int y float) En este concepto veremos otros tipos de variables que permiten almacenar un conjunto de datos en una única variable.

Un vector en el lenguaje C 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 en lenguaje C

Programa: programa57.c

#include<stdio.h>

int main()
{
    int f;
    int sueldos[5];
    //Carga del vector
    for (f=0; f<5; f++)
    {
        printf("Ingrese valor del sueldo:");
        scanf("%i",&sueldos[f]);
    }
    printf("Listado de sueldos.");
    printf("\n");
    //impresion del vector
    for(f=0; f<5; f++)
    {
        printf("%i",sueldos[f]);
        printf("\n");
    }
    getch();
    return 0;
}

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];

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

    for (f=0; f<5; f++)
    {
        printf("Ingrese valor del sueldo:");
        scanf("%i",&sueldos[f]);
    }

Para definir un comentario en nuestro programa en C debemos anteceder dos caracteres //
Todo lo que dispongamos después de estos caracteres el compilador no lo tiene en cuenta y solo le es útil al programador para recordar el objetivo de esa parte del algoritmo:

    //Carga del vector

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):

        scanf("%i",&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:

    printf("Ingrese valor de la componente:");
    scanf("%i",&sueldos[0]);
    printf("Ingrese valor de la componente:");
    scanf("%i",&sueldos[1]);
    printf("Ingrese valor de la componente:");
    scanf("%i",&sueldos[2]);
    printf("Ingrese valor de la componente:");
    scanf("%i",&sueldos[3]);
    printf("Ingrese valor de la componente:");
    scanf("%i",&sueldos[4]);

La impresión de las componentes del vector lo hacemos en otro for:

    for(f=0; f<5; f++)
    {
        printf("%i",sueldos[f]);
        printf("\n");
    }

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

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

#include<stdio.h>

int main()
{
    int f,may,men;
    float alturas[5];
    float suma,promedio;

    for (f=0; f<5; f++)
    {
        printf("Ingrese la altura de la persona:");
        scanf("%f",&alturas[f]);
    }

    for(f=0; f<5; f++)
    {
        suma=suma+alturas[f];
    }
    promedio=suma/5;
    printf("Promedio de alturas:");
    printf("%0.2f",promedio);
    printf("\n");

    may=0;
    men=0;
    for(f=0; f<5; f++)
    {
        if (alturas[f] > promedio)
        {
            may++;
        }
        else
        {
            if (alturas[f] < promedio)
            {
                men++;
            }
        }
    }
    printf("Cantidad de personas mayores al promedio:");
    printf("%i",may);
    printf("\n");
    printf("Cantidad de personas menores al promedio:");
    printf("%i",men);
    getch();
    return 0;
}

Si ejecutamos el programa tenemos un resultado similar a esto:

vector en lenguaje C

Definimos un vector donde almacenaremos las cinco alturas con valores reales (con parte decimal):

    float alturas[5];

En la primer parte del algoritmo procedemos a ingresar por teclado las 5 alturas de personas::

    for (f=0; f<5; f++)
    {
        printf("Ingrese la altura de la persona:");
        scanf("%f",&alturas[f]);
    }

Luego procedemos a sumar todas sus componentes y obtener el promedio:

    for(f=0; f<5; f++)
    {
        suma=suma+alturas[f];
    }
    promedio=suma/5;
    printf("Promedio de alturas:");
    printf("%0.2f",promedio);
    printf("\n");

Para mostrar solo dos decimales antecedemos un 0.2 a la f en la cadena de formato de la función printf:

    printf("%0.2f",promedio);

Por último comparamos cada componente del vector con la variable promedio, si el valor almacenado supera al promedio incrementamos un contador en caso que sea menor al promedio incrementamos otro contador:

    may=0;
    men=0;
    for(f=0; f<5; f++)
    {
        if (alturas[f] > promedio)
        {
            may++;
        }
        else
        {
            if (alturas[f] < promedio)
            {
                men++;
            }
        }
    }
    printf("Cantidad de personas mayores al promedio:");
    printf("%i",may);
    printf("\n");
    printf("Cantidad de personas menores al promedio:");
    printf("%i",men);

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 (definir los dos vectores con componentes de tipo float)
Imprimir los gastos en sueldos de cada turno.

Programa: programa59.c

#include<stdio.h>

int main()
{
    float turnoMan[4];
    float turnoTar[4];
    int f;
    float man,tar;

    printf("Sueldos de empleados del turno de la mañana.");
    printf("\n");
    for(f=0; f<4; f++)
    {
        printf("Ingrese sueldo:");
        scanf("%f",&turnoMan[f]);
    }
    printf("Sueldos de empleados del turno de la tarde.");
    printf("\n");
    for(f=0; f<4; f++)
    {
        printf("Ingrese sueldo:");
        scanf("%f",&turnoTar[f]);
    }

    man=0;
    tar=0;
    for(f=0; f<4; f++)
    {
        man=man+turnoMan[f];
        tar=tar+turnoTar[f];
    }
    printf("Total de gastos del turno de la mañana:");
    printf("%0.2f",man);
    printf("\n");
    printf("Total de gastos del turno de la tarde:");
    printf("%0.2f",tar);
    getch();
    return 0;
}

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

    float turnoMan[4];
    float turnoTar[4];

Mediante dos estructuras repetitivas procedemos a cargar cada vector:

    printf("Sueldos de empleados del turno de la mañana.");
    printf("\n");
    for(f=0; f<4; f++)
    {
        printf("Ingrese sueldo:");
        scanf("%f",&turnoMan[f]);
    }
    printf("Sueldos de empleados del turno de la tarde.");
    printf("\n");
    for(f=0; f<4; f++)
    {
        printf("Ingrese sueldo:");
        scanf("%f",&turnoTar[f]);
    }

Luego procedemos a sumar las componentes de cada vector y mostrar dichos acumuladores:

    man=0;
    tar=0;
    for(f=0; f<4; f++)
    {
        man=man+turnoMan[f];
        tar=tar+turnoTar[f];
    }
    printf("Total de gastos del turno de la mañana:");
    printf("%0.2f",man);
    printf("\n");
    printf("Total de gastos del turno de la tarde:");
    printf("%0.2f",tar);

Problemas propuestos

Solución
programa60.c

#include<stdio.h>

int main()
{
    int vec[8];
    int f;
    int suma;
    int sumaMayor36;
    int cant;

    for(f=0; f<8; f++)
    {
        printf("Ingrese elemento:");
        scanf("%i",&vec[f]);
    }

    suma=0;
    for(f=0; f<8; f++)
    {
        suma=suma+vec[f];
    }
    printf("La suma de los 8 elementos es:");
    printf("%i",suma);
    printf("\n");

    sumaMayor36=0;
    for(f=0; f<8; f++)
    {
        if (vec[f] > 36)
        {
            sumaMayor36=sumaMayor36+vec[f];
        }
    }
    printf("La suma de valores mayores a 36 es:");
    printf("%i",sumaMayor36);
    printf("\n");

    cant=0;
    for(f=0; f<8; f++)
    {
        if (vec[f] > 50)
        {
            cant++;
        }
    }
    printf("La cantidad de valores mayores a 50 es:");
    printf("%i",cant);
    printf("\n");
    getch();
    return 0;
}




programa61.c

#include<stdio.h>

int main()
{
    int vec1[4];
    int vec2[4];
    int vecSuma[4];
    int f;

    printf("Carga del primer vector.");
    printf("\n");
    for(f=0; f<4; f++)
    {
        printf("Ingrese elemento:");
        scanf("%i",&vec1[f]);
    }
    printf("Carga del segundo vector.");
    printf("\n");
    for(f=0; f<4; f++)
    {
        printf("Ingrese elemento:");
        scanf("%i",&vec2[f]);
    }

    for(f=0; f<4; f++)
    {
        vecSuma[f]=vec1[f]+vec2[f];
    }
    printf("Vector resultante.");
    printf("\n");
    for(f=0; f<4; f++)
    {
        printf("%i",vecSuma[f]);
        printf("\n");
    }
    getch();
    return 0;
}




programa62.c

#include<stdio.h>

int main()
{
    int cursoa[5];
    int cursob[5];
    int f;
    int suma1;
    int suma2;
    int promedioa;
    int promediob;

    printf("Carga de notas del curso A");
    printf("\n");
    for(f=0; f<5; f++)
    {
        printf("Ingrese nota:");
        scanf("%i",&cursoa[f]);
    }
    printf("Carga del notas del curso B");
    printf("\n");
    for(f=0; f<5; f++)
    {
        printf("Ingrese nota:");
        scanf("%i",&cursob[f]);
    }

    suma1=0;
    suma2=0;
    for(f=0; f<5; f++)
    {
        suma1=suma1+cursoa[f];
        suma2=suma2+cursob[f];
    }
    promedioa=suma1/5;
    promediob=suma2/5;
    printf("Promedio curso A:");
    printf("%i",promedioa);
    printf("\n");
    printf("Promedio curso B:");
    printf("%i",promediob);
    printf("\n");
    if (promedioa>promediob)
    {
        printf("El curso A tiene un promedio mayor.");
    }
    else
    {
        printf("El curso B tiene un promedio mayor.");
    }
    getch();
    return 0;
}




programa63.c

#include<stdio.h>

int main()
{
    int vec[10];
    int f;
    int orden;

    for(f=0; f<10; f++)
    {
        printf("Ingrese elemento:");
        scanf("%i",&vec[f]);
    }

    orden=1;
    for(f=0; f<9; f++)
    {
        if (vec[f+1] < vec[f])
        {
            orden=0;
        }
    }
    if (orden==1)
    {
        printf("Esta ordenado de menor a mayor");
    }
    else
    {
        printf("No esta ordenado de menor a mayor");
    }
    getch();
    return 0;
}

Retornar