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 :

petit probleme en C besoin d'aide!


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 11
    Par défaut petit probleme en C besoin d'aide!
    je dois ecrire un programme qui à partir de numeros de securite social entre au clavier verifie la validite,memorise les numeros dans un tableau de structure,supprime les numero dont le numero de departement de naissance est 99,tri par annee et affiche le tableau.
    j'ai ecri le programme mais j'ai un pb a l'excution le premier numero de SS entre est toujours supprime et les autres numeros sont affiche mm s'il comporte 99 comme departement de naissance.



    voici le 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
    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
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
     
    #define NBR_MAX 600
     
    typedef enum {faux,vrai} boolean;
     
     
    typedef struct {
            char sexe[2];// on ajoute un caractere pour la fin de la chaine
            char annee[3];
            char mois[3];
            char departement[3];
            char commune[4];
            char num_naissance[6];
            int cle_controle;
    }nss_personne;
     
     
    /** prototypes **/
    boolean valide(char noss[14]);
    long long transforme (char noss[14]);
    int calcule_cle (long long no);
    long long puissance (int x,int exposant);
    void memorisation (char noss[], nss_personne tab_donnee[], int i);
    void affichage (nss_personne tab_donnee[], int i);
    void suppression (nss_personne tab_donnee[],int *nbr_noss,int i);
    //void permuter(nss_personne *X,nss_personne *Y);
    //void tri(nss_personne tab_donnee[600],int nbr_noss);
     
     
    int main()
    { 
      boolean ok;
      long long no;  //numeros de SS
      char noss[14];//tableau contenant les num de SS
      int i, nbr_noss;// nombre de numero entre
      nss_personne tab_donnee[NBR_MAX];// tableau de structure
      int cle;
     
        printf("Entrez le nombre de numeros de securite sociale que vous voulez tester : ");
        scanf("%d",&nbr_noss);
        printf ("%d \n",nbr_noss);
        printf("entrer les numeros de securite sociale de 13 chiffres:\n");
        for (i=0;i<nbr_noss;i++){
            scanf("%s",noss);
            ok=valide(noss);
            if (ok==faux){
                printf("numero invalide\n");
            }
            else{
                if (ok==vrai){
                    no=transforme(noss);
                    cle=calcule_cle(no);
                    memorisation (noss,tab_donnee,i);
                }
              }
            }
            //tri(Tab_noss,nbr_noss);
            for(i=0;i<nbr_noss;i++){
              suppression (tab_donnee,&nbr_noss,i);
     
              affichage (tab_donnee,i);
     
     
            system("PAUSE");
    }
     
     
     
     
     
    /** fonction verifiant la validite du numero de securite sociale **/
     
    boolean valide(char noss[14])
      {int i;
        boolean valide=vrai;
        if ( (noss[0]!='1' && noss[0]!='2') || noss[13] !='\0' )
     
          valide=faux;
          else {
          for (i=1;i<13;i++){
              if (noss[i]<'0' || noss[i]>'9')
                  valide=faux;
                  }
                }
        return (valide);
    }
     
     
     
     
     
    /** fonction calculant une puissance **/
    long long puissance (int x,int exposant)
    {
      int i;
      long long resultat=1;
      if (exposant!=0){
          for (i=1;i<=exposant;i++){
          resultat=resultat*(long long)x;
          }
      }
          return (resultat);
    }
     
     
     
    /** fonction transformant une chaine de caractere (tableau de caractere)
    en nombre **/
    long long transforme (char noss[14])
    { int i;
      long long numero_secu=0;
      for (i=0;i<13;i++)
          numero_secu=numero_secu+(long
    long)((int)noss[i]-48)*puissance(10,12-i);
     
      return(numero_secu);
    }
     
     
     
    int calcule_cle (long long no)
     
    {long long cle;
      int cle_final;
      cle= (long long)97-(no%(long long)97);
      cle_final=(int)cle;
      return(cle_final);
    }
     
     
     
     
     
     
    void memorisation (char noss[], nss_personne * tab_donnee, int i)
     
    {
      tab_donnee[i].sexe[0] = noss[0];
      tab_donnee[i].sexe[1] = '\0';;
      tab_donnee[i].cle_controle=calcule_cle(transforme(noss));
      tab_donnee[i].annee[0]=noss[1];
      tab_donnee[i].annee[1]=noss[2];
      tab_donnee[i].annee[2]='\0';
      tab_donnee[i].mois[0]=noss[3];
      tab_donnee[i].mois[1]=noss[4];
      tab_donnee[i].mois[2]='\0';
      tab_donnee[i].departement[0]=noss[5];
      tab_donnee[i].departement[1]=noss[6];
      tab_donnee[i].departement[2]='\0';
      tab_donnee[i].commune[0]=noss[8];
      tab_donnee[i].commune[1]=noss[9];
      tab_donnee[i].commune[2]=noss[10];
      tab_donnee[i].commune[3]='\0';
      tab_donnee[i].num_naissance[0]=noss[11];
      tab_donnee[i].num_naissance[1]=noss[12];
      tab_donnee[i].num_naissance[2]=noss[13];
      tab_donnee[i].num_naissance[3]=noss[14];
    }
     
     
     
     
     
    void suppression(nss_personne tab_donnee[],int *nbr_noss,int i)
    {
    	int j;
    	if((tab_donnee[i].departement[0]='9') &&(tab_donnee[i].departement[1]='9'))
    	{
    		for(j=i;j<=*nbr_noss;j++)
    		tab_donnee[i]=tab_donnee[i+1];
    	}
    		*nbr_noss=*nbr_noss-1;
    }
     
     
     
     
        /* déclaration du sous programme tri_selection
    //void tri (nss_personne tab_donnee[600],int nbr_noss)
    //{
        // précondition: 0< n < 600
        // postcondition: les n éléments du tableau sont triés par années
    de naissance (valeurs décroissantes)
     
        int i, j, k;
        for (i=0;i< nbr_noss-1;i++) {
                k= i;
            for (j=i;j<= nbr_noss-1;j++) {
                if(tab_donnee[j].annee > tab_donnee[k].annee) {
                    k=j;
              };
        };
        permuter (&tab_donnee[i],&tab_donnee[k]);
        };
      }
     
     
      /* déclaration du sous programme permutter*/
     
      //void permuter (nss_personne *X,nss_personne *Y)
        //{
        // précondition: rien
        // postcondition: permutte les 2 éléments du tableau
        //nss_personne aux;
     
        //aux=*X;
        //*X=*Y;
        //*Y=aux;
     
        //}
     
     
     
     
    void affichage (nss_personne tab_donnee[], int i)
     
    {
     
     
    printf("%s%s%s%s%s%s%d\t",tab_donnee[i].sexe,tab_donnee[i].annee,tab_donnee[i].mois,tab_donnee[i].departement,tab_donnee
    [i].commune,tab_donnee[i].num_naissance,tab_donnee[i].cle_controle);
        if ((i+1)%3==0){
            printf("\n");}
     
     
    }
    je ne m'en sors plus svp aidez moi!!!

  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 lila1 Voir le message
    <...>
    je ne m'en sors plus svp aidez moi!!!
    On veut bien t'aider, mais il faut poster du code compilable...
    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
     
    Project   : Forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : C:\dev\forums\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c:29: warning: function declaration isn't a prototype
    main.c: In function `main':
    main.c:34: error: `NBR_MAX' undeclared (first use in this function)
    main.c:34: error: (Each undeclared identifier is reported only once
    main.c:34: error: for each function it appears in.)
    main.c:37: warning: implicit declaration of function `printf'
    main.c:38: warning: implicit declaration of function `scanf'
    main.c:62: warning: implicit declaration of function `system'
    main.c:196:3: warning: "/*" within comment
    main.c:224: error: syntax error at end of input
    main.c:34: warning: unused variable `tab_donnee'
    Process terminated with status 1 (0 minutes, 1 seconds)
    4 errors, 6 warnings

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 11
    Par défaut petit oubli
    desolee j'avais oublie de copier une partie du programme
    maintenant ca devrait marche,
    je travail avec dev C++ et je n'ai aucune erreur apars que le programme ne fais pas exactement ce que j'aimerais qu'i fasse.merci pour ton aide.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if((tab_donnee[i].departement[0]='9') &&(tab_donnee[i].departement[1]='9'))
    Attention, ne pas confondre l'opérateur d'affectation et l'opérateur de test ==
    Le code correct est bien sûr le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if((tab_donnee[i].departement[0]=='9') &&(tab_donnee[i].departement[1]=='9'))
    Ceci explique pourquoi la suppression ne fonctionnait pas.

    ++

    smilingFrog

Discussions similaires

  1. Problème avec Webalizer, besoin d'aide
    Par jojodeparis dans le forum Applications et environnements graphiques
    Réponses: 1
    Dernier message: 16/06/2006, 21h54
  2. Besoin d'aide pour un petit programme
    Par Nico35 dans le forum C
    Réponses: 13
    Dernier message: 25/05/2006, 22h21
  3. Bonjour petit débutan a besoin d'aide pour page d'accueil
    Par Gray Man dans le forum Balisage (X)HTML et validation W3C
    Réponses: 13
    Dernier message: 09/12/2005, 17h33
  4. Probleme, besoin d'aide
    Par ici dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 21/04/2005, 22h12

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