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 :

Fonction probleme divers


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 6
    Par défaut Fonction probleme divers
    Salut;
    Bein voila l'exercice consiste à déclarer une structure qui identifie un étudiant(Nom,Prénom,sexe) après écrire :

    1)une fonction qui affiche les étudiants inscrit .
    2)une fonction qui inscrit l'étudiant et enregistre ces informations dans un tableau .
    3)une fonction qui trie le tableau T par ordre alphabétique du Nom (tri bulle).
    4)une fonction qui cherche dichotomique si un étudiant de nom x est bien inscrit dans le tableau T si oui on retourne vrai sinon on retourne non
    5)une fonction qui retourne le nombre de filles inscrites ds l'école.
    Apres en exploitent ces fonctions en appelant un menu .
    bon voila le code :
    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
    #include<stdio.h>
    #define N 100
    #include<string.h>
     
    struct etudiant {
    	               char nom[12];
    	               char pren[12];
    	               char sexe;
    };
    typedef struct etudiant etd;
    int i=0,n;
    etd T[N];
     
    void etud_regist(etd T[N])
    {
     
     
         	printf("Donner le nbr d eleves      :");
    	    scanf("%d",&n);
    		while(i<n)
    		{
    		printf("Donnez le nom d eleve %d   : ",i+1);
    		scanf("%s",T[i].nom);
    		printf("Donnez Son prenom d eleve   : ");
    		scanf("%s",T[i].pren);
    		printf("Donner Son sexe             :");
    		scanf("%s",&T[i].sexe);
    		i++;
    		}
    }
    void affiche(etd T[N])
    {
        for(i=0;i<n;i++)
    	{
    		printf("%s\n",T[i].nom);
    	    printf("%s\n",T[i].pren);
    		printf("%s\n",T[i].sexe);
    	}
    }
     
     
    void tri(etd T[N])
    {
    	char a[12];
      for(i=0;i<n;i++)
      {
    	  if(strcmp(T[i].nom,T[i+1].nom)==1)
    	  {
    		  strcpy(a,T[i].nom);
    	  strcpy(T[i].nom,T[i+1].nom);
    	  strcpy(T[i+1].nom,a);
    	  }
      }
      printf("Le trie par ordre alphabetique est : ");
      for(i=0;i<n;i++)
      { printf("|%s|",T[i].nom);
      }
    }
     
    char recherche(etd T[N])
    {   int INF,SUP,POS,MIL;
    	char val[12];char oui=0,non=0;
    	 INF=0;
     SUP=N-1;
     POS=-1;
     printf("entrer le nom :");scanf("%s",val);
     while ((INF<=SUP) && (POS==-1))
            {
             MIL=(SUP+INF)/2;
             if (strcmp(val,T[MIL].nom)==1)
                   SUP=MIL-1;
             else if (strcmp(val , T[MIL].nom)==-1)
                   INF=MIL+1;
             else
                   POS=MIL;
            }
     
     if (POS==-1) return oui;
     else  return non;
    }
    int main()
    {
    	int choix;
    	printf("************************INSCRIPTION***************************\n");
    	etud_regist(T);
    	printf("***************************Menu*******************************\n");
    	printf("*Tapez 1 pour pour triee les eleves par ordre alphabetique   *\n");
    	printf("*Tapez 2 pour rechercher l'eleve que vous voulez             *\n");
    	printf("*Tapez 3 pour Afficher les eleves inscrits                   *\n");
    	printf("**************************************************************\n");
    	scanf("%d",&choix);
     
    	switch(choix)
    	{
    	case 1: tri(T);break;
    	case 2: recherche(T);break;
    	case 3: affiche(T);break;
    	default: break;
    	}
    	return 0;
    }
    bein j'ai encore des problèmes je pense que j'ai des fautes ds le trie et la recherche dichotomique et l'affichage ainsi j'ai pas arriver à faire la 5 eme question de l'exercice qui retourne le nombre des filles inscrites .
    si quelqu'un peut m'aider à réaliser ce programme et Merci .

  2. #2
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 084
    Par défaut
    Bonsoir,

    Il y a déjà des variable global. Cependant, vous faite l'effort de les passer par argument aux fonctions.

    Je vous conseille de ne plus les declarer en global.

    La saisie des information n'est absolument pas securiser :

    Vous dite que "sexe" est un char, cependant vous le saisissez comme etant une chaine de caractere !
    Vous dite que la limite du nom et prenom et 12 char, donc 11 char pour les carctere plus un pour le '\0' mais aucune verification est faite !

    Dans un premier temps, il faut donc securiser la saisie car on ne peut pas batire une maison sur des sable mouvant.

    Je vous invite a regarder la FAQ ou a poser vos question ici.

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 6
    Par défaut
    voila j'ai modifier le code mais j'arrive pas à bien écrire la recherche dichotomique pour cherche un caractère
    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
    #include<stdio.h>
    #define N 100
    #include<string.h>
     
    struct etudiant {
    	               char nom[12];
    	               char pren[12];
    	               char sexe;
    };
    typedef struct etudiant etd;
    int i=0,n;
    etd T[N];
     
    void etud_regist(etd T[N])
    {
     
     
         	printf("Donner le nbr d eleves      :");
    	    scanf("%d",&n);
    		while(i<n)
    		{
    		printf("Donnez le nom d eleve %d   : ",i+1);
    		scanf("%s",T[i].nom);
    		printf("Donnez Son prenom d eleve   : ");
    		scanf("%s",T[i].pren);
    		printf("Donner Son sexe             :");
    		scanf("%s",&T[i].sexe);
    		i++;
    		}
    }
    void affiche(etd T[N])
    {
        for(i=0;i<n;i++)
    	{
    		printf("%s\n",T[i].nom);
    	    printf("%s\n",T[i].pren);
    		printf("%s\n",T[i].sexe);
    	}
    }
     
     
    void tri(etd T[N])
    {
    	char a[12];
      for(i=0;i<n;i++)
      {
    	  if(strcmp(T[i].nom,T[i+1].nom)==1)
    	  {
    		  strcpy(a,T[i].nom);
    	  strcpy(T[i].nom,T[i+1].nom);
    	  strcpy(T[i+1].nom,a);
    	  }
      }
      printf("Le trie par ordre alphabetique est : ");
      for(i=0;i<n;i++)
      { printf("|%s|",T[i].nom);
      }
    }
     
    char recherche(etd T[N])
    {   int INF,SUP,POS,MIL;
    	char val[12];char oui=0,non=0;
    	 INF=0;
     SUP=N-1;
     POS=-1;
     printf("entrer le nom :");scanf("%s",val);
     while ((INF<=SUP) && (POS==-1))
            {
             MIL=(SUP+INF)/2;
             if (strcmp(val,T[MIL].nom)==1)
                   SUP=MIL-1;
             else if (strcmp(val , T[MIL].nom)==-1)
                   INF=MIL+1;
             else
                   POS=MIL;
            }
     
     if (POS==-1) return oui;
     else  return non;
    }
    int main()
    {
    	int choix;
    	printf("************************INSCRIPTION***************************\n");
    	etud_regist(T);
    	printf("***************************Menu*******************************\n");
    	printf("*Tapez 1 pour pour triee les eleves par ordre alphabetique   *\n");
    	printf("*Tapez 2 pour rechercher l'eleve que vous voulez             *\n");
    	printf("*Tapez 3 pour Afficher les eleves inscrits                   *\n");
    	printf("**************************************************************\n");
    	scanf("%d",&choix);
     
    	switch(choix)
    	{
    	case 1: tri(T);break;
    	case 2: recherche(T);break;
    	case 3: affiche(T);break;
    	default: break;
    	}
    	return 0;
    }
    Si quelqun'un peut m'aider!!

  4. #4
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 084
    Par défaut
    Le code que vous nous avez fourni est exactement le meme que l'ancien.

  5. #5
    Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 6
    Par défaut
    ah oui desoler voici le code je viens de resolue mon probleme mais il reste encore un soucis je veux retourner oui si le nom existe et non quand le nom existe pas ds la recherche dichotomique
    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
    #include<stdio.h>
    #include<string.h>
    #define N 50
    typedef struct Etudiant { char nom[15];
                              char pren[15];
    						  char sexe[15];
    }Etd;
    Etd T[N];
    int i=0,n;
    int inscrit(Etd T[N])
    {   printf("***********************Inscription des eleves ***************************\n");
    	printf("<<<<<<<<<<<<<<<<<<<<Entrez le Nombre des eleves>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
    	scanf("%d",&n);
    	for(i=0;i<n;i++)
    	{   printf("<<<<<<<<<Etudiant %d>>>>>>>>>>>>>\n",i+1);
    		printf("Entrez son nom              :");
    		scanf("%s",T[i].nom);
    		printf("Entrez son Prenom           :");
    		scanf("%s",T[i].pren);
    		printf("Entrez son sexe mas ou fem  :");
    		scanf("%s",T[i].sexe);
    	}
     
    return n;}
    void affiche(Etd T[N])
    {
    	for(i=0;i<n;i++)
    	{
    		printf("<<<<<<<<<Eleve %d >>>>>>>>>\n",i+1);
    		printf("***************************\n");
    		printf("Son Nom est : %s",T[i].nom);
    		printf("\n");
    		printf("Son Prenom est : %s",T[i].pren);
    		printf("\n");
    		printf("Son Sexe est : %s",T[i].sexe);
    		printf("\n");
    		printf("***************************\n");
     
    	}
    }
    void trie(Etd T[N])
    {
    	int desordre = 1;
        char x[15];
        while ( desordre !=0 )
        {
            desordre = 0;
            for (i=0;i<n-1;i++)
            {
                if ( strcmp(T[i].nom, T[i+1].nom)==1 )
                {
                    strcpy (x,T[i+1].nom) ;
                    strcpy (T[i+1].nom,T[i].nom);
                    strcpy (T[i].nom, x);
     
                    desordre = 1;
    			}
    		}
    	}
     
     
    }
    void cherche(Etd T[N],int n)
    {
    	 int INF,SUP,MIL;
    	 char NOMR[15];
     
    	 printf("**********Recherche d'un Eleve************\n");
    	 printf("Entrez Le nom a chercher : \n");
    	 scanf("%s",NOMR);
     
    	 INF=0;
         SUP=n-1;
     while (INF<=SUP)
            {
             MIL=(SUP+INF)/2;
             if (strcmp(NOMR,T[MIL].nom)==-1)
                   SUP=MIL-1;
             else 
                     INF=MIL+1;
     
     }
     
     if (strcmp(NOMR,T[MIL].nom)==0)
         printf("L'Etudiant<<<%s>>> est Inscrit \n",NOMR);
     else
         printf("L'Etudiant <<<%s>>> n' est pas Inscrit \n",NOMR);
     
    }
    int Nombrefille(Etd T[N])
    {
    	int F=0;
    	for(i=0;i<n;i++)
    	{
    		if(strcmp(T[i].sexe,"fem")==0)
    			F++;
    	}
    	printf("Le Nombre des filles est %d \n",F);
    	return F;
    }
    int main()
    {
    	int choix,n;
    	n=inscrit(T);
    	do
          {
     
    	printf("********************************Menu***************************************\n");
    	printf("* Tapez 1 si vous voulez Afficher les eleves incrits                      *\n");
    	printf("* Tapez 2 si vous voulez Trier les eleves par ordre alphabetique          *\n");
    	printf("* Tapez 3 si vous voulez Recherche si un eleve est inscrit                *\n");
    	printf("* Tapez 4 si vous voulez Savoir combien de filles existent dans la classe *\n");
        printf("* Tapez 5 si vous voulez Quitter                                          *\n");
    	printf("***************************************************************************\n");
    	scanf("%d",&choix);
    	switch(choix)
    	{
    	case 1:affiche(T);break;
    	case 2:trie(T);break;
    	case 3:cherche(T,n);break;
    	case 4:Nombrefille(T);affiche(T);break;
    	case 5: default:break;
    	}
    	  }
           while (choix!=5);
    	return 0;
    }
    et pour le Trie à bulle le resultat est juste pour les Noms mais les prenoms reste enregistrer par exemple :
    Avant le trie :
    Nom 1 : bbbbb
    prenom:zizou
    Nom 1 :aaaa
    prenom: moi
    Apres le trie:
    Nom 1 : aaaa
    prenom: zizou
    Nom 2: bbbbb
    prenom moi
    ><
    et Merci pour l'aide

  6. #6
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 084
    Par défaut
    C'est un peu normal, car tu n'inverse que les nom.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                    strcpy (x,T[i+1].nom) ;
                    strcpy (T[i+1].nom,T[i].nom);
                    strcpy (T[i].nom, x);
    Je te propose plutot de faire comme ceci :

    Tu garde ta structure "Etudiant".
    Tu creer une autre structure (on pourrait la nommer GestionEtudiant) :

    Dans cette structure tu mets
    -> Ton tableau d'etudiant
    -> Le nombre d'etudiant

    Tu modifier le code afin d'integrer cette structure. Normalement, les variable global disparaissent. En fait, non, il FAUT que les variable global disparaisse.

    C'est une tres mauvaise habitude en C que de faire des variable global si on en a pas vraiment besoins (c'est a dire dans a peu pres 92% des cas).

    Ensuite, pour ton tri a bulle, je te propose d'inverser deux case de ton tableau, et non juste les information.

Discussions similaires

  1. Updater un champ en fonction de divers critères.
    Par SANY56 dans le forum VBA Access
    Réponses: 10
    Dernier message: 24/12/2008, 15h26
  2. Petits problems divers sur Debian Etch/Lenny
    Par Clorish dans le forum Debian
    Réponses: 4
    Dernier message: 26/03/2008, 15h39
  3. Fonction avec divers return possibles
    Par inddzen dans le forum C++
    Réponses: 11
    Dernier message: 28/02/2007, 23h08
  4. Réponses: 2
    Dernier message: 27/02/2007, 18h17

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