Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: mariota1 en 20 Octubre 2012, 10:52 am



Título: DUDA-Programación en C
Publicado por: mariota1 en 20 Octubre 2012, 10:52 am
ENUNCIADO: Escribir un programa en C que calcule la nota media de tres alumnos. Las notas se encuentran en el fichero notas.txt. El resultado se debe añadir al final del mismo fichero con la siguiente frase:"La nota media de los tres alumnos es..."

El codigo que yo escribo es el siguiente:

#include <stdio.h>

main()
{

      FILE *F;
      int x,y,z,r;
     
     
   
     
      F=fopen("notas.txt","a");
     
      fscanf(F,"%d",&x);
      fscanf(F,"%d",&y); 
      fscanf(F,"%d",&z);
     
      r=x+y+z/3;
     
      fprintf(F,"\nLa nota media de los tres alumnos es: %d",r);
     
      fclose(F);
     
      getch();
     
}


Y el resultado en el fichero de notas.txt es:

4 9 8
La nota media de los tres alumnos es: 2865719



No entiendo porque me da ese resultado, supuestamente la media de los 3 es: 7.

Si alguien sabe cual es mi error porfavor que me lo haga saber cuanto antes. ¡Mil gracias!


Título: Re: DUDA-Programación en C
Publicado por: Slava_TZD en 20 Octubre 2012, 11:55 am
Código
  1. r=x+y+z/3;

Orden de las operaciones (http://es.wikipedia.org/wiki/%C3%81lgebra_elemental#Orden_de_las_operaciones)

Código
  1. F=fopen("notas.txt","a");

Función fopen (http://c.conclase.net/librerias/?ansifun=fopen)

Saludos


Título: Re: DUDA-Programación en C
Publicado por: mariota1 en 20 Octubre 2012, 12:04 pm
Código
  1. r=x+y+z/3;

Orden de las operaciones (http://es.wikipedia.org/wiki/%C3%81lgebra_elemental#Orden_de_las_operaciones)

Código
  1. F=fopen("notas.txt","a");

Función fopen (http://c.conclase.net/librerias/?ansifun=fopen)

Saludos


Lo siento, pero me has dejado nada claro... soy principiante en esto y si no me ofreces una respuesta mas directa, no soy capaz de entender lo que me quieres decir. Aun así gracias por las molestias.


Título: Re: DUDA-Programación en C
Publicado por: maxim_o en 20 Octubre 2012, 13:19 pm
r=(x+y+z)/3;

y lo de la abertura del fichero te ha remitido a una pagina donde te explica un poco los ficheros... Una vez lo abres antes de hacer nada y de leer del fichero tendras que ver si se ha abierto bien , etc...


Título: Re: DUDA-Programación en C
Publicado por: rir3760 en 21 Octubre 2012, 03:03 am
Como solucionar el calculo del promedio ya lo respondió maxim_o (faltaban los paréntesis).

En cuanto a la apertura del archivo te piden que realices dos operaciones: lectura de los tres números y escritura del promedio. Eso no lo puedes hacer con el modo "a" ya que este es un modo de escritura.

Debes utilizar el modo "a+" ya que este permite realizar operaciones de escritura (siempre al final del archivo) y de lectura (siempre indicando primero la posición desde donde se lee). Eso en detalle en el vinculo que te indicaron.

Parte de las modificaciones a tu programa:
Código
  1. /* Se abre el archivo en modo "agregar" (mas lectura) */
  2. F = fopen("notas.txt", "a+");
  3.  
  4. /* Para colocarnos al principio del archivo (Lectura) */
  5. rewind(F);
  6.  
  7. /* Lectura de los tres valores */
  8. fscanf(F, "%d", &x);
  9. fscanf(F, "%d", &y);
  10. fscanf(F, "%d", &z);
  11.  
  12. r = (x + y + z) / 3; /* Division entera (no hay decimales) */
  13. fprintf(F, "La nota media de los tres alumnos es: %d\n", r);
  14.  
  15. fclose(F);

También debes evitar el uso de funciones de la biblioteca conio de Borland como "getch", mas información sobre ello en el tema |Lo que no hay que hacer en C/C++. Nivel basico| (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html).

Un saludo