El Objetivo de este TP es practicar y resolver ejercicios vinculados al tema STRUCTS. Para poder resolverlos es necesario tener claro algunos conceptos:

• Librerías
• Variables
• Tipos de datos
• Estructuras de control
• Structs
• Vectores

En la programación de soluciones para algunos problemas vamos a necesitar agrupar datos de diferente tipo o de manejar datos que serian muy difícil de describir en los tipos de datos primitivos, en esta situación debemos aprovecharnos de las características que hacen al lenguaje C, o sea el uso de estructuras, uniones y punteros.

Una estructura contiene varios datos. La forma de definir una estructura es haciendo uso de la palabra clave struct. Aquí hay ejemplo de la declaración de una estructura:

struct estructuraDemo
{
    int soyentero;
    double soydoble;
    char soychar[25];
} variable;

Para poner en practica estructuras vamos a basarnos un ejemplo de la vida real y escribir el programa base paso a paso.

Escribiendo el programa base

Nuestro cliente se llama Alexander, dueño de un depósito de mercadería. Su negocio consiste en recibir cajas de los mayoristas y luego distribuirlas a los minoristas.

El primer pedido que nos hace, consiste en desarrollar un sistema que le permita inventariar las cajas que le ingresan a su depósito. Generalmente las cajas son muy parecidas y solo varían en su tamaño y el cliente; Por tanto cada caja tiene como atributos:

• Cliente (50 caracteres)
• Ancho (en cm)
• Alto (en cm)
• Peso (en gramos)

Image

Inicio

Debemos hacer un programa, que permita ingresar al menos 3 cajas con sus atributos y luego imprimirlos en pantalla.

  • La cantidad de cajas a ingresar se define mediante una constante
  • Solo se puede usar tipos de datos específicos (long, short, chat, etc)
  • Debemos usar una estructura para contener todos los atributos de una caja
#include<stdio.h>
#define cantidad 3

// Declaramos la estructura con sus atributos y la llamamos "caja"
struct caja
{
    char cliente[50]; // tipo char de 50 posiciones.
    short alto;
    short ancho;
    short peso;
};

int main(void)
{
    struct caja cajas[cantidad]; // Inicializamos un vector que se llamara "cajas" y sera del tipo "caja"
    short i=0;

    printf("Bienvenido al sistema *Cajita IN/OUT* \n"); // printf: nos permite mostrar texto en la consola

    for (i=0;i<cantidad;i++)
    {
        printf("Carga de datos para el cliente %hd: \n",i+1); // Porque i+1? Porque queremos mostrar el orden del cliente que cargamos... la variable I al inicio esta en cero.
        printf(" > Ingrese el nombre del cliente: ");
        scanf("%s", cajas[i].cliente);  // scanf: nos permite obtener texto desde la consola
                                        // &cajas[i].cliente: guardamos lo que obtenemos desde la consola en la posicion "i" del vector de cajas y dentro el atributo cliente
        printf(" > Ingrese el alto de la caja: ");
        scanf("%hd", &cajas[i].alto);
        printf(" > Ingrese el ancho de la caja: ");
        scanf("%hd", &cajas[i].ancho);
        printf(" > Ingrese el peso de la caja: ");
        scanf("%hd", &cajas[i].peso);
        printf(" \n"); // Salto de linea para separar el texto del próximo cliente

        i = i++; // Sumamos 1 al contador de posición del vector
    }

    // Imprimimos el listado de las cajas que se cargaron:

    printf("*** Listado de cajas: ***\n\n");

    for (i=0;i<cantidad;i++)
    {
        printf(" > Cliente %s \n", cajas[i].cliente);
        printf("   Alto Caja %d \n", cajas[i].alto);
        printf("   Ancho Caja %d \n", cajas[i].ancho);
        printf("   Peso Caja %d \n", cajas[i].peso);
        printf(" \n");
    }

    // Finalizamos la función.
    return(0);
}

Calcular promedios y porcentajes

Modifiquemos el programa anterior para que nos permita lo siguiente:

  • Que me permita ingresar 10 cajas.
  • Calcular el promedio del peso y mostrarlo en la impresion final.
  • Calcular el porcentaje de cajas que superan la longitud de 480cm.

Material:

“The GNU tutorial”, páginas 19-22.

Aprendiendo Structs en c++

Tipos de datos en c++