IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Calcul de moyenne à partir d'un fichier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 21
    Par défaut Calcul de moyenne à partir d'un fichier
    Bonsoir,
    J'ai cet exercice à faire "Supposons qu’on a un fichier « nombre.txt » contenant des nombres (séparés par des espaces ou des sauts de ligne). Ecrire un programme permettant de lire ces nombres, de calculer et d’afficher leur moyenne." .J'ai écrit mon programme mais après exécution rien ne se passe
    Nom : Sans titre1.png
Affichages : 3492
Taille : 92,1 Ko
    Je vous donne l'exemple du fichier sur le quel j'ai travaillé
    Nom : Sans titre.png
Affichages : 4534
Taille : 102,2 Ko
    et le code de mon programme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    int x(FILE *f,int *a)//retourne la somme des nombres et met dans a le nombre des nombres.
    {
     
        int n=0;
     
        int s=0;
        while (n!=EOF)
        {
            n=getc(f);
            (*a)++;
            int j=0;
            while ((n!=' ')&&(n!='\n'))
            {
               j++;
               n=getc(f);
            }
            if(j!=0)
            {
             fseek(f,-(j+1),SEEK_CUR);
               n=getc(f);
               for(int i=j;i>0;i--)
               {
                   s=s+n*pow(10,i-1);
                   n=getc(f);
               }
            }
     
     
        }
        return s;
    }
    int main()
    {
       int r=0;
       int a=-1;
       FILE *f1=NULL;
       f1=fopen("nombre.txt","r");
       if (f1==NULL)
       {
           printf("probleme d'ouverture");
       }
       else
       {
     
               r=x(f1,&a);
               printf("la moyenen est %f",(float)r/a);
       }
       fclose(f1);
    }
    Pourriez vous m'aider à trouver le problème et merci.
    ps: j'ai essayé d'exécuter l'algorithme sur papier avec des exemples et tout me semble correct .

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 21
    Par défaut
    J'ai une question à propos de la ligne 26 en écrivant s=s+n*pow(10,i-1) est ce que n est considéré comme un entier ou comme le code ASCII de l'entier écrit dans le fichier si c'est le cas comment le transformer en entier.

  3. #3
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 315
    Billets dans le blog
    5
    Par défaut
    Bonjour.

    Tu utilises certaines techniques du C que tu as l’air de maîtriser" c’est un bon point .

    Je trouve par contre que côté algorithmie, c’est un peu confus.

    La lecture de ton fichier est bien compliqué !

    Voilà ce que je ferais pour simplifier tout ce petit monde :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    total égale zéro 
    Compteur égale zéro 
    Tant que la fin du fichier n’est pas atteint
      Lire un caractère c
      Si c est différent de espace et différent de retour à la ligne alors faire 
        Ajouter c à total 
        Incrémenter compteur de un
      Fin si
    Fin tant que
    Renvoyer c divisé par compteur

  4. #4
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Pourquoi donc fseek ? Qu'est-ce qui justifie que tu ne désérialises pas les données séquentiellement ?

    Ton fichier est formaté, c'est donc un job pour *scanf (comme scan formatted) ; probablement fscanf.

    Même si tu tiens à lire le flux octet par octet, utilise autant que possible les fonctionnalités de la bibliothèque standard : isspace, isdigit, strtol, etc..

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 21
    Par défaut
    Gerald3d l'algorithme que vous proposez ne fonctionne pas car le fichier peut contenir des nombres >à 9 et lire à partir d'un fichier lit les caractères 1 à 1.
    Par exemple à la place d'ajouter 62 au total il va ajouter 6 puis il va ajouter 2.

    Matt_houston je ne comprend pas le fonctionnement de fscanf est ce que c'est possible de lire tout les éléments d'un fichier en utilisant un fscanf et comment le faire.
    J'ai utilisé fseek apres avoir calculé le nombres de digits dans les nombres pour revenir en arrière et ajouter le nombre qui peut être >9 à la somme avec la formule dans la ligne 26.

  6. #6
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    fscanf est la généralisation de scanf - qui lit depuis stdin - pour tous les flux. Outre la démonstration incluse en bas de la page de cppreference.com que j'ai précédemment mentionnée, tu devrais assez aisément trouver des exemples d'utilisation de scanf. L'idée est de réaliser en quelque sorte l'opération inverse d'un printf : plutôt que de produire un message formaté en sortie, on récupère les informations issues de la décomposition d'un message formaté en entrée.

    Tu n'as donc pas besoin de fseek. Laisse la bibliothèque standard s'occuper des conversions chaîne -> nombre.

  7. #7
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 315
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par kerrons Voir le message
    Gerald3d l'algorithme que vous proposez ne fonctionne pas car le fichier peut contenir des nombres >à 9 et lire à partir d'un fichier lit les caractères 1 à 1.
    Par exemple à la place d'ajouter 62 au total il va ajouter 6 puis il va ajouter 2.
    Oui tu as raison. Au passage le tutoiement est de rigueur .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 01/06/2014, 11h17
  2. Calculer une moyenne à partir de plusieurs facteurs
    Par clairemoro87 dans le forum R
    Réponses: 3
    Dernier message: 27/04/2014, 14h42
  3. [Débutante] Calcul de moyenne à partir de plusieurs fichiers
    Par clèmence rahma dans le forum Fortran
    Réponses: 2
    Dernier message: 08/04/2009, 14h35
  4. calculs à partir d'un fichier texte
    Par flora806 dans le forum Langage
    Réponses: 16
    Dernier message: 14/05/2007, 14h36
  5. [Tableaux] Calcul d'une moyenne à partir d'un tableau
    Par Mordanus dans le forum Langage
    Réponses: 13
    Dernier message: 09/05/2007, 18h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo