Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Rhythmical en 2 Noviembre 2017, 23:57 pm



Título: Ayuda con esto.
Publicado por: Rhythmical en 2 Noviembre 2017, 23:57 pm
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.

Código
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5.  
  6. void ValoryProm (FILE *Archivo)
  7. {
  8. int N=0 , ent=0, suma = 0;
  9. int promed =0, other = 0;
  10. float promedio = 0.0;
  11.  
  12. printf("Ingrese la cantidad de valores que desea ingresar: \n");scanf("%d", &N);
  13.  
  14. for(int i=0; i<N;i++)
  15. {
  16.  
  17. printf("Ingrese valores enteros entre 10-130: \n");
  18. scanf("%d", &ent);
  19. fwrite(&ent, sizeof(int), 1, Archivo);
  20.  
  21. if(ent >= 12 && ent <= 15 || ent >=50 && ent<=111)
  22. {
  23. promed ++;
  24. }
  25. else
  26. {
  27. other++;
  28. }
  29. suma+=ent;
  30. }
  31. promedio = promed*100/N;
  32. printf("El promedio es: %.2f\n", promedio);
  33. }
  34.  
  35. float Media(FILE* Archivo, int N)
  36. {
  37. float media = 0.0;int suma;
  38.  
  39. media = (float)suma/N;
  40.  
  41. return media;
  42. }
  43.  
  44. main()
  45. {
  46. FILE *Archivo;
  47. float media;
  48. float Promedio = 0.0;
  49. int N = 0;
  50.  
  51.  
  52. Archivo = fopen("numeros.DAT","w+b");
  53.  
  54.  if (Archivo == NULL)
  55.  {
  56.    printf("Error. \n");
  57.    exit(1);          
  58.  }
  59.  
  60.  ValoryProm(Archivo);
  61.  
  62.  media = Media(Archivo, N);
  63.  printf("La media de los resultados es: %.2f", media);
  64.  fclose(Archivo);
  65.  printf("\n\n");
  66.  system("pause");      
  67.  
  68. }

Espero su ayuda, saludos.


Título: Re: Ayuda con esto.
Publicado por: CalgaryCorpus en 3 Noviembre 2017, 04:12 am
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.


Título: Re: Ayuda con esto.
Publicado por: Rhythmical en 16 Noviembre 2017, 06:45 am
Ese era el problema jajaja, Muchas gracias por la ayuda!