Test Foro de elhacker.net SMF 2.1

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
r=x+y+z/3;

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

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
Cita de: Tzhed\ Kyperf/ en 20 Octubre 2012, 11:55 AM
r=x+y+z/3;

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

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:
/* 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| (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html).

Un saludo