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 :

[debutant]Avis sur exo Simple.


Sujet :

C

  1. #1
    Membre expérimenté
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Points : 1 421
    Points
    1 421
    Par défaut [debutant]Avis sur exo Simple.
    je commence avec l'ennoncé:

    Ecrire en langage C un programme permettant de saisir au clavier des fiches de notes d'etudiants et de les sauvegarder dans un fichier nommé notes.dat

    les fiches comporteront les champs suivant:
    Nom,Prenom,Matiere,Note1,Note2,Note3,Moyenne.
    Ce dernier Champ ne sera pas saisi manuellement mais calculé par le programme.

    Les fonctions utilisées sont celles de la bibliotheque standard: fopen,fread etc...
    je vous avez prevenu, c'est plutot simple
    cet excercice est extrait d'un DS (devoir surveillé pour les plus anciens ) d'informatique Industrielle de DUT GEII deuxieme année.

    j'y ai donc apporté une solution simple

    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
    #include <stdio.h>
     
    void main()
    {
    int ctrl,N1,N2,N3;
    float moy;
    char Prenom[20],Nom[20];
    FILE *fic;
    fic = fopen("notes.dat","w");
     
    do
        {
        printf("1: saisie fiche - 2: Quit\n");
        ctrl = getchar();
        if (ctrl == '1')
            {
            printf("entrez Nom Prenom Note1 Note2 Note3\n");
            scanf("%s %s %d %d %d",Nom, Prenom, &N1, &N2, &N3);
            moy = (N1 + N2 + N3)/3;
               fprintf(fic,"\t%s\t%s\t%d\t%d\t%d\t%f\n",Nom,Prenom,N1,N2,N3,moy);
            }
        fflush(stdin);
        }while(ctrl != '2');
    fclose(fic);
    }
    mes commentaires sur mon code a moi:
    -1 aurait pu utilisé un tableau pour les 3 notes, ca fait plus "propre"
    -2 aurait du verifier que le fopen se passe bien (pas d'erreur etc)
    -3 mode d'ouverture du fichier ("w") pas bon.

    je n'ai qu'une question simple a vous poser:
    ce code respecte t'il le cahier des charges? (si on oublie le mode d'ouverture pas approprié)
    click my www
    ............|___
    ...................\
    .................._|_
    ..................\ /
    ..................."

  2. #2
    Membre éclairé
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Points : 750
    Points
    750
    Par défaut
    - il m'affiche deux fois les message "1: saisie fiche..." a cause du <Entre> qu'on est obliger de mettre apres le chiffre choisi.
    - fflush(stdin) n'est pas pris en compte sur tous les compilos (tu peux regarder la FAQ pour vider le tampon d'entree: http://c.developpez.com/faq/c)

    Bon c'est pour chippoter un peu (i.e. pas forcement specifies dans l'enonce)
    - les notes pourraient etre flottantes plutot non ?
    - pas de gestion des erreurs (nombres corrects, champs manquants)
    - Pour la taille des prenons/noms, je trouve que 20 c'est un peu petit (prenom/nom composes)
    - le premier tab (\t) est a mon avis inutile
    - ne gere pas les espaces dans les noms
    - main doit renvoyer un int (int main(void).... return 0)

    sinon, utilise plutot la balise [code] plutot que citation pour garder l'indentation !

  3. #3
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: [debutant]Avis sur exo Simple.
    Citation Envoyé par Dark_Ebola
    je commence avec l'ennoncé:

    <...>
    Corrections et remarques (-ed-)
    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
     
    #include <stdio.h>
    #include <string.h>
     
    static clean (char *s, FILE *fp)
    {
        char *p = strchr (s, '\n');
     
        if (p != NULL)
        {
            *p=0;
        }
        else
        {
            int c;
     
            if((c = fgetc (fp)) != '\n' && c != EOF)
            {}
        }
    }
     
     
    /* -ed-
    void main()
     
    main() retourne int. Toujours.
     
    <a href="http://emmanuel-delahaye.developpez.com/notes.htm" target="_blank">http://emmanuel-delahaye.developpez.com/notes.htm</a>
     
    */
    int main(void)
    {
        int ctrl,N1,N2,N3;
        FILE *fic= fopen("notes.dat","w");
     
        /* -ed- ajoute controle */
        if (fic != NULL)
        {
        do
        {
        float moy;
        char Prenom[20],Nom[20];
     
            printf("1: saisie fiche - 2: Quit\n");
            /* -ed-
            ctrl = getchar();
             
            mauvais choix de fonction de lecture.
             
            <a href="http://emmanuel-delahaye.developpez.com/notes.htm" target="_blank">http://emmanuel-delahaye.developpez.com/notes.htm</a>
            <a href="http://emmanuel-delahaye.developpez.com/notes.htm" target="_blank">http://emmanuel-delahaye.developpez.com/notes.htm</a>
             
            */
            {
                char s[4];
                fgets(s, sizeof s, stdin);
                clean(s, stdin);
                ctrl = *s;
            }
     
            if (ctrl == '1')
            {
                printf("entrez Nom Prenom Note1 Note2 Note3\n");
     
                /* -ed-
                scanf("%s %s %d %d %d",Nom, Prenom, &N1, &N2, &N3);
                 
                mauvais choix de fonction de lecture.
                */
                for(;;)
                {
                    char line[128];
                    fgets(line, sizeof line, stdin);
                    clean(line, stdin);
                    {
                        int n = sscanf(line, "%s %s %d %d %d",Nom, Prenom, &N1, &N2, &N3);
     
                        if (n == 5)
                        {
                            moy = (N1 + N2 + N3)/3;
                            fprintf(fic,"\t%s\t%s\t%d\t%d\t%d\t%f\n",Nom,Prenom,N1,N2,N3,moy);
                            break;
                        }
                        else
                        {
                            printf ("input error\n");
                        }
                    }
                }
            }
            /* -ed-
            fflush(stdin);
             
            N'existe pas en C standard. fflush() ne concerne que les flux sortants.
            */
        }
        while(ctrl != '2');
     
        fclose(fic), fic=NULL;
        }
        return 0;
    }
    je n'ai qu'une question simple a vous poser:
    ce code respecte t'il le cahier des charges? (si on oublie le mode d'ouverture pas approprié)
    A peu près.
    Pas de Wi-Fi à la maison : CPL

  4. #4
    Membre expérimenté
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Points : 1 421
    Points
    1 421
    Par défaut
    merci de vos reponses.

    concernant le choix des fonctions de lecture, j'avoue avoir ete intimidé par la partie de l'ennoncé specifiant l'utilisation de la bibliotheque standard ...

    main dois renvoyer int, je le sais ... mon prof n'aurait pas forcement apprecié.
    concernant le fflush(stdin), je n'ai pas osé faire differement ... prof plutot obtu.

    concernant les autres corrections, j'en prend note

    merci pour le chipotage D[r]eadLock

    au vut de la correction de Emmanuel, je vous annonce qu'il aurait eu 0/12 pour "non respect du cahier des charges"

    A peu près.
    d'autres corrections?
    click my www
    ............|___
    ...................\
    .................._|_
    ..................\ /
    ..................."

  5. #5
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Dark_Ebola
    au vut de la correction de Emmanuel, je vous annonce qu'il aurait eu 0/12 pour "non respect du cahier des charges"
    Dans l'industrie, on a d'autres critères... La portabilité et la fiabilité en font partie. Mais le respect du cahier des charges aussi.. Quels sont les points non conformes ?
    Pas de Wi-Fi à la maison : CPL

  6. #6
    Membre expérimenté
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Points : 1 421
    Points
    1 421
    Par défaut
    je vais expliquer mon "probleme" avant de me faire tapper dessus

    vous avez sous les yeux l'ennoncé et ma production a un Devoir Surveillé.
    le prof m'as mis 0 et refuse d'en discuter. je suis plutot "dans la merde" vut que l'informatique industrielle est coeffiscient 9.

    apres examen des copies des copains, ils n'ont pas fait plus de test d'erreur ou de saisi, ce n'etait pas demandé.
    ce que j'ai pu faire dire a mon prof (pas evident, y s'ennerve vite)
    il fallait imperativement utiliser une structure (c'est dans le cahier des charges)
    il ne fallait pas sauvegarder les informations au format Ascii (cela n'etait pas dans le cahier des charges), il fallait absolument sauvegarder la structure dans un fichier binaire en utilisant fwrite.

    a travers ce post, j'essaye simplement de savoir si mon prof as raison ...
    jusque la ...

    edit: vous avez bien sur, l'ennoncé complet et integral, a la virgule pres ... sinon ce serait malhonnete ...
    click my www
    ............|___
    ...................\
    .................._|_
    ..................\ /
    ..................."

  7. #7
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Dark_Ebola
    je vais expliquer mon "probleme" avant de me faire tapper dessus

    vous avez sous les yeux l'ennoncé et ma production a un Devoir Surveillé.
    le prof m'as mis 0 et refuse d'en discuter.
    Mauvais prof...
    je suis plutot "dans la merde" vut que l'informatique industrielle est coeffiscient 9.
    Et l'orthographe, c'est combien ? -10 ? Tu as tes chances...
    apres examen des copies des copains, ils n'ont pas fait plus de test d'erreur ou de saisi, ce n'etait pas demandé.
    Normal, ça fait partie de l'état de l'art (state of art)
    ce que j'ai pu faire dire a mon prof (pas evident, y s'ennerve vite)
    il fallait imperativement utiliser une structure (c'est dans le cahier des charges)
    Ce n'est pas dans le cahier des charges. Ce qui est dans CdC, c'est que les données doivent être structurées dans le fichier. Le CdC est incomplet, il aurait du préciser le format de l'enregistrement (binaire, texte, etc.). Dans l'industrie, si on sent que c'est important, on contact le client pour complément d'information.

    Il peut notamment y avoir des problèmes de portabilité qui font que le mapping direct binaire est impensable.

    il ne fallait pas sauvegarder les informations au format Ascii (cela n'etait pas dans le cahier des charges), il fallait absolument sauvegarder la structure dans un fichier binaire en utilisant fwrite.

    a travers ce post, j'essaye simplement de savoir si mon prof as raison ...
    jusque la ...

    edit: vous avez bien sur, l'ennoncé complet et integral, a la virgule pres ... sinon ce serait malhonnete ...
    Ma réponse va être très claire. L'énoncé tel qu'il est donné ne donne quasiment pas d'indication sur l'implémentation[1], et aucune concernant la structuration des données (à part le nom des champs) ni la façon de les enregistrer dans le fichier.

    Si le prof prétend le contraire, il est soit malhonette, soit incompétant (je penche pour la deuxième option).

    -----------------------
    [1] à par C ANSI, ce que j'ai respecté et pas toi, à cause du void main() et du fflush(stdin).[quote]
    Pas de Wi-Fi à la maison : CPL

  8. #8
    Membre expérimenté
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Points : 1 421
    Points
    1 421
    Par défaut
    Et l'orthographe, c'est combien ? -10 ? Tu as tes chances...
    je savais que j'aurais du marquer "coeff" ... arf arf

    merci d'avoir ete clair. (cela rejoins mon avis, mais je le dirais pas.)
    je ne sais pas quoi faire dans l'immediat.

    si d'autres personnes ont des avis, n'hesitez pas.
    click my www
    ............|___
    ...................\
    .................._|_
    ..................\ /
    ..................."

  9. #9
    Membre éclairé
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Points : 750
    Points
    750
    Par défaut
    Citation Envoyé par Dark_Ebola
    edit: vous avez bien sur, l'ennoncé complet et integral, a la virgule pres ... sinon ce serait malhonnete ...
    Il m'a l'air suspect ce professeur, parce que je ne vois nulle part faire mention de structure et sauvegarde desdites structures. A priori on a pas besoin de pouvoir re-creer de telles structures.

    Parce que si "fiche" veut dire "structure" je trouve que c'est un peu abuser ! C'est plutot un terme abstrait qui sert plutot a l'explication de l'ennonce qu'une "regle" d'implementation.

    [deviation]
    Si tu es vraiment dans la galere, tu peux peut-etre essayer d'aller voir au-dessus ou un autre prof, en expliquant calmement ton cas.

    [note perso]
    J'ai horreur des gens qui considerent que certaines choses sont implicites...

  10. #10
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par D[r
    eadLock][note perso]
    J'ai horreur des gens qui considerent que certaines choses sont implicites...
    Pareil. J'ai même parfois du mal avec le second degré que je considère comme du 'langage tribal'...
    Pas de Wi-Fi à la maison : CPL

Discussions similaires

  1. debutant coincé sur probleme simple
    Par router_ dans le forum Linux
    Réponses: 11
    Dernier message: 11/06/2010, 20h42
  2. Votre avis sur cet algo tres simple
    Par JoloKossovar dans le forum Général Java
    Réponses: 3
    Dernier message: 10/01/2008, 18h13
  3. Avis sur un cas simple de diagramme de classe
    Par arnobidul dans le forum Diagrammes de Classes
    Réponses: 8
    Dernier message: 01/08/2007, 09h07
  4. Réponses: 2
    Dernier message: 11/04/2007, 21h59
  5. [debutant][STRUTS] avis sur un livre sur struts
    Par Snivel dans le forum Struts 1
    Réponses: 5
    Dernier message: 04/03/2006, 12h11

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