Ayuda con esto.

Iniciado por Rhythmical, 2 Noviembre 2017, 23:57 PM

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

Rhythmical

Buenas a todos! Pues mi problema con el C es el tema de archivos, en el ejercicio que tengo me piden que halle la media de los numeros ingresados pero al compilar me da el resultado 0.
Este es el código.

#include <stdlib.h>
#include <stdio.h>
#include <string.h>


void ValoryProm (FILE *Archivo)
{
int N=0 , ent=0, suma = 0;
int promed =0, other = 0;
float promedio = 0.0;

printf("Ingrese la cantidad de valores que desea ingresar: \n");scanf("%d", &N);

for(int i=0; i<N;i++)
{

printf("Ingrese valores enteros entre 10-130: \n");
scanf("%d", &ent);
fwrite(&ent, sizeof(int), 1, Archivo);

if(ent >= 12 && ent <= 15 || ent >=50 && ent<=111)
{
promed ++;
}
else
{
other++;
}
suma+=ent;
}
promedio = promed*100/N;
printf("El promedio es: %.2f\n", promedio);
}

float Media(FILE* Archivo, int N)
{
float media = 0.0;int suma;

media = (float)suma/N;

return media;
}

main()
{
FILE *Archivo;
float media;
float Promedio = 0.0;
int N = 0;
 

Archivo = fopen("numeros.DAT","w+b");

 if (Archivo == NULL)
 {
   printf("Error. \n");
   exit(1);          
 }
     
 ValoryProm(Archivo);
 
 media = Media(Archivo, N);
 printf("La media de los resultados es: %.2f", media);
 fclose(Archivo);
 printf("\n\n");
 system("pause");      

}


Espero su ayuda, saludos.

CalgaryCorpus

Creo que el problema que tienes esta en los tipos de datos que usas.

En C hay clausura de tipos.
Si operas 2 tipos int, el resultado es int.

por ejemplo, 5 /3 es 1, no es 1.66666
otro ejemplo  2/4 es 0, no es 0.5

puedes forzar que se operen numeros float a pesar de tener int haciendo un cast hacia ese tipo asi:

(float) 2 / (float) 4

Existe otra regla respecto a operar tipos distinto, no es exactamente asi, pero para entenderlo, el tipo mas chico se convierte en el tipo mas grande

float operado con int, el compilador hace el cast por ti, entonces

(float) 2 / (float) 4 es igual a  (float) 2 / 4 y es igual a 2 / (float) 4.

reemplaza 2 y 4 por variables de tipo int y tendras algo mas generico.
Aqui mi perfil en LinkedIn, invitame un cafe aqui

Rhythmical

Ese era el problema jajaja, Muchas gracias por la ayuda!