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 :

modification d un programme C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 17
    Par défaut modification d un programme C
    salut les amis ,
    j ai un petit programme et je dois le modifier afin d ajouter la suppression et la modification !!
    merci d avance...
    eh il me reste 2 erreurs que j arrive pas a resoudre merci
    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
    #include<conio.h>
    #include<stdio.h>
    struct etudiant
    {int ni;
    char nm[10];
    float mg;}et;
    etudiant tab[10];
    int i,j;
    char rep;
    void saisie();
    void affichage();
    void recherche();
    void tri();
     
    void saisie()
    {int k;
      for (i=0;i<=9;i++)
       {clrscr();
    gotoxy(40,9);puts("etudiant n° : ");
    gotoxy(30,11);puts("Ni : ");
    gotoxy(30,12);puts("Nom : ");
    gotoxy(30,13);puts("MG : ");
    gotoxy(30,14);puts("Decision : ");
    k=i+1;
    gotoxy(70,9);printf("%d",k);
    gotoxy(60,11);scanf("%d",&tab[i].ni);
    gotoxy(60,12);scanf("%s",&tab[i].nm);
    gotoxy(60,13);scanf("%f",&tab[i].mg);
    if (tab[i].mg >=10)
    {gotoxy(60,14);puts("Admis");}
    else
    {gotoxy (60,14);puts("Echec");}
    gotoxy (30,16);puts("une touche pour.....");
    getch();
    }
    void affichage()
    {
    gotoxy(20,7);puts("Ni : ");
    gotoxy(30,7);puts("Nom : ");
    gotoxy(40,13);puts("MG : ");
    gotoxy(50,14);puts("Decision : ");
    for (i=9;i<19;i++)
    {gotoxy (20,1);printf("%d",tab[i-9].ni);
    gotoxy (30,1);printf("%s",tab[i-9].nm);
    gotoxy (40,1);printf("%f",tab[i-9].mg);
    if (tab[i-9].mg>=10)
    {gotoxy (50,1)puts("Admis")}
    else
    {gotoxy (50,1)puts("Admis")}
    }
    }
    void tri ()
    {etudiant z;
     for (i=0;i<=8;i++)
     { for (j=i+1;i<=9;j++)
      {if (tab[i].mg>=tab[j].mg)
       {z=tab[i];
      tab[i]=tab[j];
      tab[j]=z;
      }
     }
    }
    }
    void recherche ()
    {int rech;
    int tr;
    tr=0;
    i=0;
    gotoxy (30,9);puts("rentrer le ni :")
    gotoxy (50,9);scanf("%d",& rech);
    do
    {if (tab[i].ni==rech)
     [tr=1;}
     else {i++;}
    }
    while ((tab[i].ni!=rech)&&(i<=9));
    if (tr==1)
    {printf ("%d",tab[i].ni);
    printf ("%f",tab[i].mg);
    printf ("%s",tab[i].nm);}
    else
    {puts ("etudiant introuvable");}
     
    }

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Eic2004
    j ai un petit programme et je dois le modifier afin d ajouter la suppression et la modification !!
    merci d avance...
    eh il me reste 2 erreurs que j arrive pas a resoudre merci
    Et on doit deviner lesquelles ? Qu'est-ce qu'on gagne ?
    Project : Forums
    Compiler : GNU GCC Compiler (called directly)
    Directory : C:\dev\forums\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c:7: error: syntax error before "tab"
    main.c:7: warning: type defaults to `int' in declaration of `tab'
    main.c:7: warning: data definition has no type or storage class
    main.c:10: warning: function declaration isn't a prototype
    main.c:11: warning: function declaration isn't a prototype
    main.c:12: warning: function declaration isn't a prototype
    main.c:13: warning: function declaration isn't a prototype
    main.c:16: warning: function declaration isn't a prototype
    main.c: In function `saisie':
    main.c:18: warning: implicit declaration of function `clrscr'
    main.c:19: warning: implicit declaration of function `gotoxy'
    main.c:26: error: request for member `ni' in something not a structure or union
    main.c:27: error: request for member `nm' in something not a structure or union
    main.c:28: error: request for member `mg' in something not a structure or union
    main.c:29: error: request for member `mg' in something not a structure or union
    main.c:37: warning: function declaration isn't a prototype
    main.c: In function `affichage':
    main.c:43: error: request for member `ni' in something not a structure or union
    main.c:44: error: request for member `nm' in something not a structure or union
    main.c:45: error: request for member `mg' in something not a structure or union
    main.c:46: error: request for member `mg' in something not a structure or union
    main.c:47: error: syntax error before "puts"
    main.c:49: error: syntax error before "puts"
    main.c: In function `saisie':
    main.c:53: warning: function declaration isn't a prototype
    main.c: In function `tri':
    main.c:53: error: `etudiant' undeclared (first use in this function)
    main.c:53: error: (Each undeclared identifier is reported only once
    main.c:53: error: for each function it appears in.)
    main.c:53: error: syntax error before "z"
    main.c:56: error: request for member `mg' in something not a structure or union
    main.c:56: error: request for member `mg' in something not a structure or union
    main.c:57: error: `z' undeclared (first use in this function)
    main.c: In function `saisie':
    main.c:65: warning: function declaration isn't a prototype
    main.c: In function `recherche':
    main.c:70: error: syntax error before "gotoxy"
    main.c:72: error: request for member `ni' in something not a structure or union
    main.c:73: error: syntax error before '[' token
    main.c:72: warning: empty body in an if-statement
    main.c: At top level:
    main.c:76: error: syntax error before "while"
    main.c:79: error: syntax error before string constant
    main.c:79: warning: type defaults to `int' in declaration of `printf'
    main.c:79: warning: function declaration isn't a prototype
    main.c:79: error: conflicting types for 'printf'
    main.c:79: note: a parameter list with an ellipsis can't match an empty parameter name list declaration
    main.c:79: error: conflicting types for 'printf'
    main.c:79: note: a parameter list with an ellipsis can't match an empty parameter name list declaration
    main.c:79: warning: data definition has no type or storage class
    main.c:80: error: syntax error before string constant
    main.c:80: warning: type defaults to `int' in declaration of `printf'
    main.c:80: warning: function declaration isn't a prototype
    main.c:80: warning: data definition has no type or storage class
    Process terminated with status 1 (0 minutes, 3 seconds)
    28 errors, 19 warnings
    OK. 2 erreurs, mais lesquelles ?

    Si tu définies une structure avec un 'tag' (struct <tag>), il faut ensuite utiliser la dénomination complète struct <tag>, et non <tag> tout court.

    Donc , c'est pas
    mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    struct etudiant tab[10];
    Quand aux erreurs avant 'puts()', elles sont dues à l'oubli d'un certain nombre de ';' (avant et après). Un peu élémentaire comme erreur, non ?

    Il y a aussi un '[' à la place d'un '{' (nous déranger pour ça, franchement...)

    Il manque un '}' à la fin de la fonction saisie().
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          scanf ("%s", &tab[i].nm);
    scanf() avec "%s" attend l'adresse d'un char, pas l'adresse d'un tableau de char... Il faut retirer ce '&'.


    Enfin, il n'y a pas de main(), ce code est donc incomplet.

  3. #3
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 17
    Par défaut
    merci !!!
    mais les erreur que t a la sont dues qu a la copier coller ctt !!
    mais mon probleme c est de modifier le programe afin de permettre a l utulisateur de modifier let supprimer

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Eic2004
    merci !!!
    mais les erreur que t a la sont dues qu a la copier coller ctt !!
    mais mon probleme c est de modifier le programe afin de permettre a l utulisateur de modifier let supprimer
    Il y a un problème général de conception lié à l'utilisation d'un tableau (ici, fixe) de structures.

    Tu définis un tableau de 10 étudiants. OK. Mais, en dehors du fait que la taille est fixe, ce qui est un manque de souplesse évident, il faut considérer que la taille est une limite, et non une obligation.

    Il faut donc pouvoir déterminer combien il y a réellement d'étudiants dans le tableau. Pour ça, 2 méthodes :

    1 - le tableau n'est pas initialisé au départ, mais un compteur est initialisé à 0.

    Lors de la saisie, on demande à la fin de chaque saisie si on veut continuer. Si c'est oui, on incrémente le compteur, si c'est non on quitte. Classique, et simple.

    L'affichage, le tri et la recherche portent sur les n premiers éléments.

    Par contre, un problème se pose si on veut 'supprimer' un étudiant. En effet,
    vu qu'on utilise un compteur, les étudiants doivent être consécutifs dans le tableau.

    a, b, c, d, e

    Supprimer un étudiant (par exemple c), revient à déplacer les étudiants d et e de 1 case en arrière, ce qui est une opération lourde de copie) et à diminuer le compteur de 1. Ce n'est pas insurmontable, mais c'est pas très efficace.

    2 - Autre solution, ajouter un indicateur dans la structure qui indique que la place est libre ou non.

    Ca peut être un champ supplémentaire, ce qui rend cette fonctionnalité indépendante des données, ou, un champs existant, comme un numéro interdit (0, -1, 9999 etc.) ou le fait qu'un champ texte soit vide ('""), comme le nom. par exemple. Peu importe... aller au plus simple et au moins couteux...

    On doit donc commencer par initialiser le tableau de façon à ce que l'état de chaque élément soit indiscutablement 'vide', puis on remplit au fur et à mesure, en cherchant une place libre. on peut gérer un compteur, mais ce n'est pas obligatoire.

    L'affichage, le tri et la recherche porte sur les éléments non 'vide'.

    Pour supprimer, il suffit de modifier le champ qui va bien à 'vide'. (Il n'est pas nécessaire de modifier les autres champs).

    La saisie suivante trouvera le 'trou' et le comblera...

    Rien de tout cela n'a à voir avec le langage C. C'est de la conception pure (structures de données : tableaux de structures).

  5. #5
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 17
    Par défaut merci
    bon voila ce que j ai fait
    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
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    #include<stdio.h>
    #include<conio.h>
     
    int i,j;
    float rep,mg;
    struct etudiant
    {
    int ni;
    char nom[10],dec[8];
    float mg;
    }et; 
    etudiant tab[10];
    void saisi();
    void affichage();
    void recherche(); 
    void tri();
    void modification();
    void suppresion();
    void tableau(); 
     
     
    //la saisie
     
    void saisi()
    {
    for(i=0;i<10;i++)
    { 
     scanf("%d",&tab[i].ni);
     scanf("%s",&tab[i].nom);
     scanf("%f",&tab[i].mg);
    if(mg<10){printf("REFUSE");} 
    else{printf("ADMIS");}
     printf("%s",tab[i].dec);
    }
    }
    //l affichage
    void affichage()
    {
    for(i=0;i<10;i++) 
    {
     printf("%d",tab[i].ni);
     printf("%s",tab[i].nom);
     printf("%f",tab[i].mg); 
    if(mg<10){printf("REFUSE");}
    else{printf("ADMIS");}
    }
    } 
    //la recherche
    void recherche(float rech,int tr)
    {
    printf("Veuillez entrer le numero d inscription a rechercher"); 
    scanf("%f",&rech);
    tr=0;
    while((i<10)||(tr==1))
    { 
    if(tab[i].ni==rech)
    {tr=1;}
    else
    {i++;} 
    }
    if(tr==1)
    {
    printf("%d",tab[i].ni); 
    printf("%s",tab[i].nom);
    printf("%f",tab[i].mg);
    if(mg<10){printf("REFUSE");}
    else{printf("ADMIS");} 
     printf("%s",tab[i].dec);
    } 
    else
    {
    printf("Ce numero d'inscription de figure pas dans notre registre");
    } 
    }
     
     
    //le tri
    void tri(etudiant z)
    { 
    for(i=0;i<9;i++)
    { 
    for(i=i+1;i<10;i++)
    { 
    if(tab[j].mg>tab[i].mg)
    {
    z=tab[j];
    tab[j]=tab[i];
    tab[i]=z;
    }
    }
    }
    }
    //modification
    void modification(float rech)
    {
    printf("Veuillez entrer le numero d inscription a rechercher");
    scanf("%f",&rech);
    recherche();
     scanf("%s",tab[i].nom);
     scanf("%f",tab[i].mg);
    if(mg<10){printf("REFUSE");}
    else{printf("ADMIS");}
     printf("%s",tab[i].dec);
    }
    //la suppresion
    void suppression(float rech)
    {
    printf("Veuillez entrer le numero d inscription a rechercher");
    scanf("%f",&rech);
    recherche();
    for(j=i;j<10;j++)
    { 
    tab[i]=tab[i+1];
    }
    i--;
    }
     
    // le menu
     void main()
     
     {do {clrscr();
     gotoxy(20,5);puts("1-SAISIE");
     gotoxy(20,6);puts("2-AFFICHAGE");
     gotoxy(20,7);puts("3-RECHERCHE");
     gotoxy(20,8);puts("4-CLASSEMENT");
     gotoxy(20,9);puts("5-MODIFICATION");
    gotoxy(20,10);puts("6-QUITTER");
     gotoxy(30,10);puts("VOTRE CHOIX?");
     scanf("%d",&rep);
     rep=getch();
     switch(rep)
    { case 1:{saisi();getch();} break;
     case 2:{affichage();getch();} break;
     case 3:{recherche();getch();} break;
     case 4:{tri();getch();} break;
     
     case 5:{modification();getch();}break;
     case 6:{suppression();getch();}break;
     case 7:break;
     default:{puts("VOUS DEVEZ ENTRER UN NOMBRE ENTRE 1 ET 7");}
     }
     }
     while(rep!=6);
     
     }

    j ai encore les 2 erreurs :

    programme.cpp(131,13) : switch selection expression must be of integral type
    programme.cpp(138,23) : too few parameters in call to suppression (flaot)

    et SVP je voudrais avoir un bonne présentation de ce programme. Si possible modification de celui ci afin de le rendre plus court.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Mars 2006
    Messages : 80
    Par défaut
    Salut je n'ai pas examiné ton programme en entier, mais je pense que tu peu tout seul résoudre les erreurs non?
    voyons par exemple ta premiere erreur :
    programme.cpp(131,13) : switch selection expression must be of integral type
    Dans ton switch tu compare le résultat de getch (un int que tu stock dans un float pourquoi?) avec des case qui sont de types entier, essaye de changer le type de ta variable rep, au lieu de
    float rep; ---> int rep;

    La deuxiéme erreur :
    programme.cpp(138,23) : too few parameters in call to suppression (flaot)
    ta fonction suppression(float ) prend en parametre un type float, toi dans ton code tu l'a appelé sans parametre c'est pour ça que le compilateur te génere cette erreur.

    Voila tout ce que je peu faire pour toi pour le moment, bonne continuation

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Eic2004
    bon voila ce que j ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include<stdio.h>
    #include<conio.h>
     
    int i,j;
    float rep,mg;
    struct etudiant
    {
    int ni;
    char nom[10],dec[8];
    float mg;
    }et; 
    etudiant tab[10];
    J'ai modifié les informations de ce lien. Je te conseille de suivre attentivement ce qui est écrit.

    http://emmanuel-delahaye.developpez....tm#cfg_compilo

    (faire un refresh ou F5 pour être sûr d'avoir la dernière version (06/05/2007 11:24 ou plus)

    programme.cpp(131,13) : switch selection expression must be of integral type
    Tu ne comprends pas l'anglais ? "Le type du sélecteur d'un switch-case doit être de type entier" (la norme dit 'int').

    Le tien est de type float. Curieuse idée, non ?

    programme.cpp(138,23) : too few parameters in call to suppression (flaot)
    Tu définis des fonctions avec des paramètes, mais tu les appeles sans paramètre. C'est pas un peu absurde ?

    En fit, il y a un défaut de conce^ption dans ces fonctions. Le 'paramètre' en question est en réalité une variable locale est devtait être définie comme tlle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void f (void)
    {
       T var;
     
    }
    et SVP je voudrais avoir un bonne présentation de ce programme. Si possible modification de celui ci afin de le rendre plus court.
    Concernant la présentation :

    http://emmanuel-delahaye.developpez....tm#indentation

    Tu peux aussi utiliser l'IDE Code::Blocks qui a un indenteur (Astyle) intégré.

    Quand à "rendre plus court", c'est le cadet de tes soucis pour le moment...

Discussions similaires

  1. Modification position par programme
    Par TERRIBLE dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 08/08/2010, 14h00
  2. [Toutes versions] modifer un TDC programmé pour excel2007 pour pouvoir marcher sur excel2003
    Par karlakir dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/06/2009, 01h48
  3. effectuer des modification sur un programme conçue par vb6
    Par tatidodo dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 29/04/2009, 18h16
  4. Réponses: 7
    Dernier message: 28/11/2008, 15h49

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