ayuda!!! Funciones en C

Iniciado por Angellus Blood, 11 Septiembre 2018, 09:02 AM

0 Miembros y 1 Visitante están viendo este tema.

Angellus Blood

Me podrían ayudar a verificar mi código?  el error es que sólo me pide el primer dato, el número de gallinas y se cierra.Se los agradeceré infinitamente, el problema es el siguiente:
En una granja se requiere saber alguna información para determinar el precio de venta por cada kilo de huevo. Es importante determinar el promedio de calidad de las n gallinas que hay en la granja. La calidad de cada gallina se obtiene según la fórmula:

                         calidad = peso de la gallina * altura de la gallina
                                                número de huevos que pone

Finalmente, para fijar el precio del kilo de huevo, se toma como base la siguiente tabla:

PROMEDIO CALIDAD                      PRECIO POR KILO
mayor o igual que 15 ---------------  1.2 * promedio de calidad
mayor que 8 y menor que 15 --------1.00 * promedio de calidad   
menor o igual que 8 ----------------- 0.80 * promedio de calidad             
     
CODIGO:

Código (cpp) [Seleccionar]
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
#include<locale.h>

struct Gallina {

float peso;
float altura;
   int numhuevos;
   float calidad;
   float precio;
};

Gallina gallinas[100];

float ObtenerPromedioCalidad(struct Gallina gallinas[100], int numGallinas)
{    
int i;
float sumatoriaCalidad = 0;
for(i=0; i<numGallinas; i++)
{

gallinas[i].calidad=(gallinas[i].peso*gallinas[i].altura)/gallinas[i].numhuevos;
sumatoriaCalidad = sumatoriaCalidad + gallinas[i].calidad;
return sumatoriaCalidad / numGallinas;
}
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void definir_Precio(struct Gallina gallinas[100]){
int i;
   
    if(gallinas[i].calidad>=15) {
    gallinas[i].precio=(1.2*gallinas[i].calidad);
}
else if(gallinas[i].calidad>8){
  gallinas[i].precio=(1*gallinas[i].calidad);
    }
    else if(gallinas[i].calidad>=8 && gallinas[i].calidad<=15){
    gallinas[i].precio=(0.80*gallinas[i].calidad);
     }
   printf("\n\n\Costo del kilo de huevo de acuerdo a calidad: ", gallinas[i].precio);

}

int main()
{

setlocale(LC_CTYPE,"spanish");

   int numGallinas;
   int sumatoriaCalidad;
int i;      

       printf("Ingrese el número de gallinas a verificar: ");
       scanf("%d", numGallinas, "\n");
       
       for (int i=0; i<numGallinas; ++i){
       
       fflush(stdin);
       printf("Peso de la gallina: ");
       scanf("%f", gallinas[i].peso, "\n");

       printf("Altura de la gallina:");
       scanf("%f", gallinas[i].altura, "\n");

printf("Número de huevos que pone la gallina:");
       scanf("%d", gallinas[i].numhuevos, "\n");
       
}
        float ObtenerPromedioCalidad(Gallina gallinas[]);
       
        for(i=0;i<numGallinas;i++)
        {
        scanf("\n\nPromedio de calidad: ", sumatoriaCalidad);
}
       
       void definir_Precio(struct Gallina gallinas[100]);      
       
       return 0;
   }




Mod: Obligatorio el uso de etiquetas GeSHi para códigos.

Mr.Moonlight

#1
ni compila , con eso te digo todo compañero.

scanf("%d", &numGallinas); // El & no se nos puede olvidar...

Si haces un for .. es para trabajar con el

scanf("%f", &gallinas[i].peso);  // ni utilizar el [i]


for(i=0; i<numGallinas; i++)
  {
    if(gallinas[i].calidad>=15) {
       gallinas[i].precio=(1.2*gallinas[i].calidad);
   }
   else if(gallinas[i].calidad>8){
        gallinas[i].precio=(1*gallinas[i].calidad);
    }
    else if(gallinas[i].calidad<=8 && gallinas[i].calidad<=15){
      gallinas[i].precio=(0.80*gallinas[i].calidad);
     }
   printf("\n\n\Costo del kilo de huevo de acuerdo a calidad: ", gallinas[i].precio);
  }


Y otras muchas cosas...
No intentes que te den los ejercicios hechos , y menos si vienes diciendo que te da error ahí puesto que ni compila tu ejercicio.

1º aprende a usar los scanf y printf .. es básico
2º si trabajas con vectores usalos leñe
3º si una función te devuelve un dato.. asignalo a una variable , el programa no lo hace por arte de magia  :xD
4º Cuando llamas a funciones no es necesario , ni el float ni el void ni cualquier otro tipo que devuelvas , solo es necesario en la declaración de dicha función..
5º Revisa los if-else  :silbar:
6º cuando estas llamando a una función no se menciona el tipo de la variable que pasas.. solo la pasas y listo porque ya se indico cuando se declaraba..



MAFUS

Eso es porqué no ha usado las etiquetas GeSHi o code para incrustar el código, así cuando aparece algo cómo array[i], todo lo que vaya después de la i entre corcheas se convertirá en cursiva, ya que en bbcode significa texto en cursiva.

Mr.Moonlight

Cita de: MAFUS en 11 Septiembre 2018, 23:37 PM
Eso es porqué no ha usado las etiquetas GeSHi o code para incrustar el código, así cuando aparece algo cómo array[i], todo lo que vaya después de la i entre corcheas se convertirá en cursiva, ya que en bbcode significa texto en cursiva.

Touché , pero de todas formas sigue habiendo muchos errores

jca1

Coincido con Mr.Moonlight y veo que entiendes bien la logica aunque podrias mejorarlo a mi parecer en calcular precio tenga como funcion dependiente calcular calidad, entonces llamarias a calcular precio y ella misma llamararia a calcular calidad y despues precio. Y es mejor que esos datos los calcules y no lo guardes ya que dependen unicamentes de datos guardados y los podes calcular. Por ender calcular calidad devolveria el valor a calcular precio y esta retornaria el precio, sin necesidad de ocupar ese espacio en memoria. Ademas los datos se modifican y tenes que saber cuando actualizar calidad y precio por ende es mejor calcularlo en una caso mas real. Saludos, suerte!