elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Vectores
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Vectores  (Leído 1,416 veces)
ashtag

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Vectores
« en: 16 Enero 2019, 01:23 am »

Hola, necesito ayuda en la parte de incremento hasta un 50% no se como usar otros vectores y ademas consejos con mi codigo si hay como mejorarlo. Gracias
Este es el ejercicio
En una hacienda hay un hato que se compone de N vacas. Diseñe un programa que guarde en un vector la producción de leche diaria (en litros) de cada una de las vacas, además que calcule la producción total del hato diario y cual es la ubicación de la vaca que dio más leche en el día.

Si consideramos como producción normal 25 litros diarios y ninguna vaca puede producir más de 40 litros por día, cree un nuevo vector en el que se clasifique la producción según el siguiente criterio, si la producción está entre 20 y 25 litros etiqueta “PRODUCCION MEDIA”, si supera los 25 litros visualizar “ALTA PRODUCCION”, contabilice cuantas vacas tienen producción media y cuantas altas. Calcule también el promedio de la producción de las vacas.

Para incrementar la producción hasta un 50% de leche nos aconsejan implementar 2 medidas:

Realizar 3 ordeños al día, cuyo incremento hasta del 30%, con posibles valores (1,2,3) que equivalen 1=0%; 2=15% y 3=30% de incremento
Tener una dieta balanceada, hasta 20% de incremento (1,2,3) que equivalen 1=0%; 2=10% y 3=20% de incremento
Cargue los vectores de ordeños y dieta, calcule los incrementos, sume los dos incrementos y calcule el incremento proyectado de producción de leche para cada vaca y el incremento total de la hacienda ganadera.
Este es mi codigo hasta el momento
#include <iostream>

using namespace std;
int cargarvector (int N, int vector[]);
int ubicacion (int N,int vector[],int *casilla);
void produccionvector(int N,int vector[],float prom);


int main()
{
  int vacas,v[20],posicion,ubica,sum;
  float ord[100];

  cout<<"Ingrese el numero de vacas: "<<endl;
  cin>>vacas;
  while (vacas<=0)
  {
      cout<<"Error ingrese otro numero: "<<endl;
      cin>>vacas;
  }
  sum=cargarvector(vacas,v);
  cout<<"La produccion total de leche es: "<<sum<<endl;
  ubica=ubicacion (vacas,v,&posicion);
  cout<<"La mayor produccion dada por una vaca es: "<<ubica<<endl;
  cout<<"ubicada en la posicion: "<<posicion<<endl;
  produccionvector(vacas,v,sum);


}
int cargarvector(int N,int vector [])
{
    int i,suma=0;
    for (i=1;i<=N;i++)
    {
     cout<<"Ingrese la produccion de la vaca: "<<i<<endl;
     cin>>vector;
     while (vector<=0 || vector>40)
     {
         cout<<"Error en la preoduccion, ingrese otro valor: "<<endl;
         cin>>vector;
     }
     suma=suma+vector;
    }
    return suma;
}
int ubicacion (int N,int vector[],int *casilla)
{
    int i,ma=vector[1];
    *casilla=1;
    for(i=1;i<=N;i++)
    {
      if (vector>ma)
      {
      ma=vector;
      *casilla=i;
      }
    }
    return ma;
}
void produccionvector(int N,int vector[],float prom )
{
    int i,media=0,alta=0;
    float prome=0;
     for(i=1;i<=N;i++)
     {
       if (vector >20 && vector<25)
       {
           media=media+1;
       }
       if (vector >=25)
       {
           alta=alta+1;
       }
     }
     cout<<"Total de vacas con produccion media: "<<media<<endl;
     cout<<"Total de vacas con produccion alta: "<<alta<<endl;
     prome=(prom/N);
     cout<<"el promedio de produccion es: "<<prome<<endl;
}


En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Vectores
« Respuesta #1 en: 16 Enero 2019, 16:06 pm »

Te comento algunos errores que tienes en ese código y después te doy mi punto de vista con los incrementos en la producción. Bueno lo primero, el código ponlo entre etiquetas GeSHi (se seleccionan encima del cuadro de texto) porque sino el código se hace ilegible, puedes comprobarlo tú mismo, que la letra i entre corchetes desaparece.

Te recomiendo que pongas mejores nombres ya que luego para hacer cálculos y para revisar el programa te será más sencillo. Yo usaría algo así:
Código
  1. const int MAX_VACAS = 20; // cantidad maxima de vacas (variable global)
  2. const int NUM_VECES = 3; // numero de veces que se toma leche de cada vaca (variable global)
  3. const int NUM_DIETAS = 3; // numero de dietas que se puede aplicar a cada vaca (variable global)
  4. int numero_vacas; // cantidad de vacas que vas a contabilizar
  5. int max_posicion; // posicion de la vaca que mas produce
  6. double max_produccion; // cantidad producida por la vaca que mas produce
  7. double suma_leche, promedio_leche; // total producido y promedio por vaca
  8. int produccion_media, produccion_alta; // contador de producciones altas y medias
  9. double leche_vacas[MAX_VACAS] = {0}; // array para guardar la produccion de cada vaca
  10. double veces[NUM_VECES] = {0, 0.15, 0.3}; // array con los incrementos de cada vez que tomamos leche
  11. double dieta[NUM_DIETAS] = {0, 0.1, 0.2}; // array con los incrementos segun la dieta de cada vaca
Con estas variables puedes hacer todo el programa, pero algunas de estas tienes que declararlas globales (antes del <main>); otras, en el <main> y otras es mejor que las declares dentro de una función especifica (en el último punto especifico esto).

Código
  1. cout<<"Ingrese el numero de vacas: "<<endl;
  2. cin>>vacas;
  3. while (vacas<=0){
  4.    cout<<"Error ingrese otro numero: "<<endl;
  5.    cin>>vacas;
  6. }
Primero tienes este trozo de código. Ese <while> es un filtro de toda la vida. Los filtros se suelen hacer con <do while>:
Código
  1. const int MAX_VACAS = 20;
  2. double leche_vaca[MAX_VACAS] = {0};
  3. do{
  4.    cout << "Ingrese el numero de vacas (1," << MAX_VACAS << "): "<<endl;
  5.    cin >> numero_vacas;
  6. }  while(numero_vacas <= 0 || numero_vacas > MAX_VACAS);
Ahí tienes lo mismo, pero creo que se ve mejor. Además si tienes un vector estático, controla que no se introducen más vacas que el máximo (que lo puedes controlar con esa constante MAX_VACAS). A partir de aquí usas la variable <numero_vacas> para recorrer el array, ya que si vas a introducir 5 vacas, no tiene sentido recorrer el array entero que son 20 (eso ya lo haces con la variable <vacas>).

En C/C++ los arrays empiezan en el elemento 0. Por lo que los <for> que estás usando en las funciones que inicializas la i siempre a 1, es más correcto hacerlo a 0 (y si quieres que salga un 1 por pantalla pues muestras (i+1) en vez de i). Además en la función <ubicacion()> tienes que empezar a contar en el elemento 0. Tal y como lo estás haciendo te estás saliendo siempre del array y estás accediendo a memoria que puede estar reservada para otra cosa. Eso tienes que corregirlo (no es opcional).

La función <ubicacion()> es más correcto que devuelva la posición del máximo (que para algo se llama <ubicacion()>) y si quieres por referencia puedes guardar el valor de ese máximo. Sino pues haces que se llame <produccionMaxima()> y haces que devuelva la producción máxima y por referencia guardas la posición si quieres. Es más fácil de ver para el resto de personas.

Los valores que calculas en la última función es mejor guardarlos en variables sin mostrar nada y mostrarlo en el programa principal (imagina que en un punto del programa quieres calcular el promedio porque lo necesitas pero no quieres mostrarlo); pues lo calculas con la función y luego ya lo usas como tú quieras o lo muestras o lo usas para hacer más cálculos sin mostrarlo.

El tema de los porcentajes, no sé si tienes que hacerlo aleatoriamente o no. Lo que yo entiendo es que por cada vaca tienes que pedir <NUM_VECES> valores de leche tomada y cada valor se multiplica por (1+veces[m]+dieta[n]). Yo entiendo algo así:
Código
  1. double calcularSuma(double leche_vacas, int numero_vacas){
  2.    // aqui creamos los arrays veces y dietas ya que no se usan mas veces en el main
  3.    double toma_actual, suma = 0;
  4.    for(int i = 0; i < numero_vacas; i++){
  5.        for(int j = 0; j < NUM_VECES; j++){
  6.            // puedes hacer el filtro para asegurar cantidades de leche validas
  7.            cout << "Leche tomada de la vaca " << i+1 << "(" << j+1 << "/" << NUM_VECES << "): ";
  8.            cin >> toma_actual;
  9.            leche_vacas[i] += toma_actual * (1+veces[j]+dieta[j]); // dieta[j] u otro valor aleatorio o no
  10.        }
  11.        // haces la suma de cada vaca
  12.    }
  13.    return suma;
  14. }
Algo así entiendo yo. Faltaría terminar esa función (aunque te la he dejado mascada ya...) y adaptarla al resto del programa ya que habría que cambiar más cosas para que quede bien adaptado. Suerte :-X


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
vectores
Programación C/C++
tartagal 1 2,894 Último mensaje 7 Diciembre 2010, 17:16 pm
por Littlehorse
Vectores c++
Programación C/C++
Stakewinner00 8 4,342 Último mensaje 14 Julio 2012, 20:55 pm
por DickGumshoe
C++ Mas iteradores, con vectores de vectores ¡ juerga !
Programación C/C++
Orubatosu 1 2,364 Último mensaje 4 Diciembre 2014, 17:18 pm
por Eternal Idol
vectores C++
Programación C/C++
Erius 1 1,580 Último mensaje 4 Diciembre 2017, 16:56 pm
por do-while
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines