bonsoir a tous je crée cette discution autour du sujet suivant:
on se propose d'ecrire un programme pour gerer les notes de langage C a l'aide d'une liste chainée.

a) definir un type ELEVE caractérisé par un note et son nom(le type doit pouvoir permettre egalement de gerer une liste chainée)


b)Ecrire une fonction qui saisit un eleve:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
ELEVE Creer(char *nom,float note)
c)ecrire une fonction qui ajoute un eleve a une liste d'eleves
Code : Sélectionner tout - Visualiser dans une fenêtre à part
ELEVE ajouter(ELEVE *liste, ELEVE nouveau)
d)ecrire une fonction qui affiche le contenu de la liste
Code : Sélectionner tout - Visualiser dans une fenêtre à part
void afficher(ELEVE* liste)
e)ecrire une fonction qui retourne la moyenne des notes contenues dans une liste d'eleve
Code : Sélectionner tout - Visualiser dans une fenêtre à part
float moyenne(ELEVE* liste)
voici ce que j'ai fait:

a)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
typedef struct eleve
{
     char* nom;
     float note;
     struct eleve *s;
     struct eleve *p;
}ELEVE;
b)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
ELEVE Creer( char* nom , float note )
{
      ELEVE *e=(ELEVE*) malloc(1*sizeof(ELEVE)); 
      strcpy(e->nom,nom);  // on recopie son nom et sa note
      e->note=note;
      //on ne s'occupe pas des pointeurs suivants et precedents pour le moment
      return *e;  //on retourne l'objet lui meme et non son adresse
}
c)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
ELEVE* Ajouter(ELEVE *tete,ELEVE nouveau)
{
     nouveau.s=tete;             
     nouveau.p=NULL;
     if (tete != NULL)
     {
          tete->p = &nouveau;
          nouveau.p=NULL;
     }
     return &nouveau;
}
d)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void Afficher(ELEVE *tete)
{
     if (tete != NULL)
     {
           while(tete != NULL)
           {
                   printf("Nom de l'eleve: %s\n" , tete->nom); 
                   printf("Note de l'eleve: %d\n\n" , tete->note); 
                   tete=tete->s;
           }
     }
     else printf("la liste d'eleves est vide\n");
     system("pause");
}
pour la question e) on verra plus tard....

mais pour le moment la fonction Creer ne marche pas, pourtant
je l'ai testé seule avec le main ci dessous

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
int main(void)
{
     ELEVE *nouveau;
     nouveau = &Creer("name",10);
     printf("nom : %s\n",nouveau->nom);
     printf("note : %f\n",nouveau->note);
     system("pause");
     return 0;
}
malgré le system("pause") la fenetre se ferme avant ke je n'ai pu voir si tout est ok...

quelqu'un aurait il la solution a mon pb?