DUDA-Programación en C

Iniciado por mariota1, 20 Octubre 2012, 10:52 AM

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

mariota1

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!

Slava_TZD



The fact is, even if you were to stop bombing us, imprisoning us, torturing us, vilifying us, and usurping our lands, we would continue to hate you because our primary reason for hating you will not cease to exist until you embrace Islam.

mariota1

Cita de: Tzhed\ Kyperf/ en 20 Octubre 2012, 11:55 AM
r=x+y+z/3;

Orden de las operaciones

F=fopen("notas.txt","a");

Función 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.

maxim_o

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...

rir3760

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:
/* Se abre el archivo en modo "agregar" (mas lectura) */
F = fopen("notas.txt", "a+");

/* Para colocarnos al principio del archivo (Lectura) */
rewind(F);

/* Lectura de los tres valores */
fscanf(F, "%d", &x);
fscanf(F, "%d", &y);
fscanf(F, "%d", &z);

r = (x + y + z) / 3; /* Division entera (no hay decimales) */
fprintf(F, "La nota media de los tres alumnos es: %d\n", r);

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|.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language