30 - Estructura de datos tipo vector (elementos de tipo struct)


Hemos trabajado bastante con la estructura de datos tipo vector definiendo elementos de tipo int, float y char.

Ahora veremos que podemos definir vectores cuyos elementos sean de tipo registro.

Problema 1:

Se tiene la siguiente declaración de registro:

struct producto {
    int codigo;
    char descripcion[41];
    float precio;
}; 

Definir un vector de 4 elementos de tipo producto.
Implementar las funciones:

Programa: programa137.c

Ver video

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

#define TAMANO 4

struct producto {
    int codigo;
    char descripcion[41];
    float precio;
};

void cargar(struct producto vec[TAMANO])
{
    int f;
    for(f=0;f<TAMANO;f++)
    {
        printf("Ingrese el codigo del producto:");
        scanf("%i",&vec[f].codigo);
        fflush(stdin);
        printf("Ingrese la descripcion:");
        gets(vec[f].descripcion);
        printf("Ingrese el precio:");
        scanf("%f",&vec[f].precio);
    }
}

void imprimir(struct producto vec[TAMANO])
{
    int f;
    for(f=0;f<TAMANO;f++)
    {
        printf("%i %s %0.2f\n", vec[f].codigo, vec[f].descripcion, vec[f].precio);
    }
}

void precioMayor(struct producto vec[TAMANO])
{
    int f;
    int pos=0;
    for(f=1;f<TAMANO;f++)
    {
        if (vec[f].precio>vec[pos].precio)
        {
            pos=f;
        }
    }
    printf("Producto mas caro: %s",vec[pos].descripcion);
}


int main()
{
    struct producto vector[TAMANO];
    cargar(vector);
    imprimir(vector);
    precioMayor(vector);
    getch();
    return 0;
}

En la función main definimos un vector de cuatro elementos de tipo registro, llamamos a las distintas funciones y le pasamos el vector para cargarlo, imprimirlo y ver el producto más caro:

int main()
{
    struct producto vector[TAMANO];
    cargar(vector);
    imprimir(vector);
    precioMayor(vector);
    getch();
    return 0;
}

La función de carga recibe el vector (como sabemos los vectores como parámetros si son modificados luego la variable definida en la main es modificada.

void cargar(struct producto vec[TAMANO])
{
    int f;
    for(f=0;f<TAMANO;f++)
    {
        printf("Ingrese el codigo del producto:");
        scanf("%i",&vec[f].codigo);
        fflush(stdin);
        printf("Ingrese la descripcion:");
        gets(vec[f].descripcion);
        printf("Ingrese el precio:");
        scanf("%f",&vec[f].precio);
    }
}

Debemos indicar el nombre del vector, el subíndice que queremos acceder y finalmente a que campo del registro de dicha componente:

        scanf("%i",&vec[f].codigo);

La función de imprimir accedemos a cada componente del vector y a cada uno de los campos de cada componente:

void imprimir(struct producto vec[TAMANO])
{
    int f;
    for(f=0;f<TAMANO;f++)
    {
        printf("%i %s %0.2f\n", vec[f].codigo, vec[f].descripcion, vec[f].precio);
    }
}

Para obtener el nombre del producto con mayor precio procedemos a inicializar la variable pos con el valor cero suponiendo que en dicha posición se encuentra el artículo con mayor precio. Luego en cada vuelta del for verificamos el precio del artículo si supera al que hemos considerado mayor hasta ese momento, en caso afirmativo actualizamos la variable pos:

void precioMayor(struct producto vec[TAMANO])
{
    int f;
    int pos=0;
    for(f=1;f<TAMANO;f++)
    {
        if (vec[f].precio>vec[pos].precio)
        {
            pos=f;
        }
    }
    printf("Producto mas caro: %s",vec[pos].descripcion);
}

Problema propuesto

Solución
programa138.c

#include<stdio.h>
#include<conio.h>
#include<string.h>
#define TAMANO 4

struct libro{
    int codigo;
    char titulo[40];
    char autor[40];
};

void cargar(struct libro vec[TAMANO])
{
    int f;
    for(f=0;f<TAMANO;f++)
    {
        printf("Ingrese el codigo del libro:");
        scanf("%i",&vec[f].codigo);
        fflush(stdin);
        printf("Ingrese el titulo:");
        gets(vec[f].titulo);
        printf("Ingrese el autor:");
        gets(vec[f].autor);
    }
}

void imprimir(struct libro vec[TAMANO])
{
    int f;
    for(f=0;f<TAMANO;f++)
    {
        printf("%i %s %s\n", vec[f].codigo, vec[f].titulo, vec[f].autor);
    }
}

void consulta(struct libro vec[TAMANO])
{
    int f;
    int cant=0;
    char autor[40];
    printf("Ingrese el nombre del autor a consultar:");
    gets(autor);
    for(f=0;f<TAMANO;f++)
    {
        if (strcmp(autor,vec[f].autor)==0)
        {
            printf("Titulo: %s\n",vec[f].titulo);
            cant++;
        }
    }
    if (cant==0)
    {
        printf("No hay libros de este autor.");
    }
}


int main()
{
    struct libro vector[TAMANO];
    cargar(vector);
    imprimir(vector);
    consulta(vector);
    getch();
    return 0;
}


Retornar