domingo, 9 de diciembre de 2012

Programa en c++ para calcular la producción total de toneladas de cereales (arroz, avena, cebada, trigo) cosechadas durante los meses del año anterior

Se tiene la producción total de toneladas de cereales (arroz, avena, cebada, trigo) cosechadas
durante cada mes del año anterior. Elaborar un programa que proporcione la siguiente información:

  •  El promedio anual de toneladas cosechadas.
  • ¿Cuantos meses tuvieron una cosecha superior al promedio anual?  
  • ¿Cuantos meses tuvieron una cosecha inferior al promedio anual?  
  • ¿Cuál fue el mes en el que se produjeron mayor numero de toneladas?

#include<iostream>
#include<cstdlib>
#include<cstring>
#include<windows.h>
using namespace std;

void ini_array(float []);
void leer(float [][4], char [][11], char [][7]);
void escribir(char [][11], float [], float &, int &, int &, int &);
float promedio_produccion(float [][4]);
void total_produccion_mes(float [][4], float []);
void meses_cosecha_sup_inf_prom(float [], float &, int &, int &);
int mes_produccion_alta(float []);

int main()
{
    int cont_sup=0, cont_inf=0, pos_mes;
    float produccion[12][4], produccion_mes[12], promedio_anual;
    char meses[12][11]={"ENERO", "FEBRERO", "MARZO", "ABRIL", "MAYO", "JUNIO", "JULIO", "AGOSTO", "SEPTIEMBRE", "OCTUBRE", "NOVIEMBRE", "DICIEMBRE"};
    char nombre_cosecha[4][7]={"ARROZ", "AVENA", "CEBADA", "TRIGO"};

    ini_array(produccion_mes);
    leer(produccion, meses, nombre_cosecha); //llama a la funcion leer()
    promedio_anual=promedio_produccion(produccion); //llama a la funcion promedio_produccion()
    total_produccion_mes(produccion, produccion_mes); //llama a la funcion total_produccion_mes()
    meses_cosecha_sup_inf_prom(produccion_mes, promedio_anual, cont_sup, cont_inf); //llama a la funcion meses_cosecha_sup_inf_prom()
    pos_mes=mes_produccion_alta(produccion_mes); //llama a la funcion mes_produccion_alta()
    escribir(meses, produccion_mes, promedio_anual, cont_sup, cont_inf, pos_mes); //llama a la funcion escribir()

    cin.get(); cin.get();
    return 0;
}

void ini_array(float produccion_mes[12]) //inicializa la produccion total del mes en 0
{
    int i;

    for(i=0; i<12; i++)
    {
        produccion_mes[i]=0;
    }
} //fin funcion ini_array()

void leer(float produccion[12][4], char meses[12][11], char nombre_cosecha[4][7])
{
    int i, j;

    for(i=0; i<12; i++)
    {
        cout<<endl<<"\t "<<"Produccion del mes de "<<meses[i]<<endl;

        for(j=0; j<4; j++)
        {
            do{
                cout<<endl<<"\t "<<"  Indique produccion total de "<<nombre_cosecha[j]<<" del mes: ";
                cin>>produccion[i][j];

                if(produccion[i][j]<0)
                {
                    cout<<endl<<"\t La produccion de total de "<<nombre_cosecha[j]<<" no puede ser menor que 0"<<endl;
                    Sleep(1500);
                    system("cls");
                }
            }while(produccion[i][j]<0); //valida que el total de la produccion del cereal no sea menor que 0
        }
        cout<<endl;
    }

    system("cls");
} //fin funcion leer()

void escribir(char meses[12][11], float produccion_mes[12], float &promedio_anual, int &cont_sup, int &cont_inf, int &pos_mes)
{
    int i;

    cout<<endl<<"\t Promedio anual de produccion: "<<promedio_anual<<" T"<<endl<<endl;

    for(i=0; i<12; i++)
    {
        cout<<"\t Produccion total del mes de "<<meses[i]<<" : "<<produccion_mes[i]<<" T"<<endl;
    }

    cout<<endl<<"\t Cantidad de meses con cosecha superior al promedio anual: "<<cont_sup<<endl<<endl;
    cout<<"\t Cantidad de meses con cosecha inferior al promedio anual: "<<cont_inf<<endl<<endl;

    cout<<"\t Mes con la produccion mas alta: "<<meses[pos_mes]<<endl;
} //fin funcion escribir()

float promedio_produccion(float produccion[12][4]) //caldula el promedio de la produccion anual
{
    int i, j;
    float promedio_anual, sum=0;

    for(i=0; i<12; i++)
    {
        for(j=0; j<4; j++)
        {
            sum+=produccion[i][j];
        }
    }

    promedio_anual=(sum/12);
    return promedio_anual;
} //fin funcion promedio_produccion()

void total_produccion_mes(float produccion[12][4], float produccion_mes[12]) //calcula la produccion total del mes
{
    int i, j;

    for(i=0; i<12; i++)
    {
        for(j=0; j<4; j++)
        {
            produccion_mes[i]+=produccion[i][j];
        }
    }
} //fin funcion total_produccion_mes()

void meses_cosecha_sup_inf_prom(float produccion_mes[12], float &promedio_anual, int &cont_sup, int &cont_inf) //cuenta la cantidad meses que tienen la produccion por encima o por debajo del promedio anual
{
    int i;

    for(i=0; i<12; i++)
    {
        if(produccion_mes[i]>promedio_anual)
        {
            cont_sup++;
        }
        else
            {
                cont_inf++;
            }
    }
} //fin funcion meses_cosecha_sup_inf_prom()

int mes_produccion_alta(float produccion_mes[12]) //determina cual es el mes con la produccion mas alta
{
    int i=0, pos_mes;
    float mayor=0;

    for(i=0; i<12; i++)
    {
        if(produccion_mes[i]>mayor)
        {
            mayor=produccion_mes[i];
            pos_mes=i;
        }
    }

    return pos_mes;
}

1 comentario:

  1. Recuerdo un problema similar en la facultad, parece que tienen modelos similares en todos lados.

    ResponderEliminar