0% ont trouvé ce document utile (0 vote)
72 vues17 pages

Gestion des étudiants et notes en C

Transféré par

mohamedamine hajjem
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
72 vues17 pages

Gestion des étudiants et notes en C

Transféré par

mohamedamine hajjem
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

TD3.

Corrigé

Exercice 1

Algorithme GesEtud
Type

Etudiant : Enregistrement
Ident : Entier
Nom : chaine[30]
Prénom : chaine[20]
Fin Etudiant

TAB : Tableau de 10 Etudiant

Var
ET : TAB
n : Entier

Procédure Remplissage(m : Entier ; var T : TAB)


Var
i : Entier

Début
Pour i de 1 à m faire
Ecrire("Etudiant n°",i," :")
Ecrire("Identifiant : "),Lire(T[i].Ident)
Ecrire("Nom : "),Lire(T[i].Nom)
Ecrire("Prénom : "),Lire(T[i].Prénom)
Fin Pour
Fin

Procédure Affichage(m : Entier ; T : TAB)


Var
i : Entier

Début
Ecrire("Identifiant Nom Prénom : ")
Ecrire("-------------------------------------------------")

Pour i de 1 à m faire
Ecrire(T[i].Ident," ",T[i].Nom," ",T[i].Prénom)
Fin Pour
Fin
{Programme principal}

Début
n ←10
Remplissage(n,ET)
Affichage(n,ET)
Fin

{Programme C}

# include <stdio.h>
# include <stdlib.h>

typedef struct {

int id;
char Nom[20];
char Prenom[20];

} etudiant;

/////////////////////////////////////////////////////////////////////

void remplissage(int m, etudiant T[m]){


int i;
for(i=0; i<m;i++){
printf ("Etudiant n°%d :identifiant =",i+1);
scanf ("%d",&T[i].id);
printf ("Nom =");
scanf ("%s",T[i].Nom);
printf ("Prénom =");
scanf ("%s",T[i].Prenom);
}
}

////////////////////////////////////////////////////////////////////

void affichage(int m, etudiant T[m]){


int i;
printf ("Identifiant | Nom |Prénom");
for (i=0;i<m;i++)
printf("%d | %s | %s\n",T[i].id, T[i].Nom,T[i].Prenom);

//////////////////////////////////////////////////////////////////
void main()
{
int n =10;
etudiant Tab[n];
remplissage(n,Tab);
affichage(n,Tab);
}

Exercice 2

Algorithme GesEtud
Type
Notes : Enregistrement
noteCc : Réel
noteEx : Réel
Fin Notes

Etudiant : Enregistrement
Ident : Entier
Nom : chaine[30]
Prénom : chaine[20]
Note : Notes
Fin Etudiant

TAB : Tableau de 10 Etudiant

Var
ET : TAB
n : Entier

Procédure SaisiNotes(var E : Etudiant)


Var
noteEntrer : Réel

Début
Répéter
Ecrire("Note contrôle continu : "), Lire(noteEntrer)
Jusqu’à noteEntrer ≥ 0 ET noteEntrer ≤ 20

E.Note.NoteCc ← noteEntrer

Répéter
Ecrire("Note examen : "), Lire(noteEntrer)
Jusqu’à noteEntrer ≥ 0 ET noteEntrer ≤ 20
E.Note.NoteEx ← noteEnter
Fin
Procédure Remplissage(m : Entier ; var T : TAB)
Var
i : Entier

Début
Pour i de 1 à m faire
Ecrire("Etudiant n°",i," :")
Ecrire("Identifiant : "), Lire(T[i].Ident)
Ecrire("Nom : "), Lire(T[i].Nom)
Ecrire("Prénom : "), Lire(T[i].Prénom)
SaisiNotes(T[i])
Fin Pour
Fin

Procédure AfficheNotes(E : Etudiant)


Début
Ecrire("Note Contôle Continu Note Examen ")
Ecrire("------------------------------------")
Ecrire(E.Note.NoteCc," ",E.Note.NoteEx)
Fin

Procédure Affichage(m : Entier ; T : TAB)


Var
i : Entier

Début
Ecrire("Identifiant Nom Prénom : ")
Ecrire("-------------------------------------------------")

Pour i de 1 à n faire
Ecrire(T[i].Ident," ",T[i].Nom," ",T[i].Prénom)
AfficheNotes(T[i])
Fin Pour
Fin

Fonction MeilleureNote(m : Entier ; T : TAB) : Réel


Var
i : Entier
NoteMax : Réel
Début
NoteMax ← T[1].Note.NoteEx
Pour i de 2 à m Faire
Si T[i].Note.NoteEx > NoteMax Alors
NoteMax ← T[i].Note.NoteEx
Fin Si
Fin Pour
MeilleureNote ← NoteMax
Fin
Fonction MoyenneGénérale(m : Entier ; T : TAB) : Réel
Var
i : Entier
som : Réel

Début
som ← 0
Pour i de 1 à m Faire
som ← som + 0.3 * T[i].Note.noteCc + 0.7 * T[i].Note.noteEx
Fin Pour
MoyenneGénérale ← som / m
Fin

{Programme principal}

Début
n ← 10
Remplissage(n,ET)
Affichage(n,ET)
Ecrire("Meilleur note examen :", MeilleureNote(n,ET), " Moyenne générale de la classe :",
MoyenneGénérale(n,ET))
Fin

{Programme C}

# include <stdio.h>
# include <stdlib.h>

typedef struct{
float noteCc, noteEx;
} notes;

typedef struct {
int id;
char Nom[20];
char Prenom[20];
notes Note;
} etudiant;

/////////////////////////////////////////////////////////////////////

void saisieNotes(etudiant *E){


do{
printf ("Note controle continu : ");
scanf("%f",&E->Note.noteCc);
} while (E->Note.noteCc < 0 || E->Note.noteCc > 20);
do{
printf ("Note examen : ");
scanf("%f",&E->Note.noteEx);
} while (E->Note.noteEx < 0 || E->Note.noteEx > 20);

/////////////////////////////////////////////////////////////////////

void remplissage(int m, etudiant T[m]){


int i;
for(i=0; i<m;i++){
printf ("Etudiant n°%d :identifiant =",i+1);
scanf ("%d",&T[i].id);
printf ("Nom =");
scanf ("%s",T[i].Nom);
printf ("Prénom =");
scanf ("%s",T[i].Prenom);
saisieNotes(&T[i]);
}
}

////////////////////////////////////////////////////////////////////

void affichage(int m, etudiant T[m]){


int i;
printf ("Identifiant | Nom |Prénom |Note Controle |Note Exam\n");

for (i=0;i<m;i++)
printf("%d | %s | %s | %2.f | %2.f\n",T[i].id, T[i].Nom,T[i].Prenom, T[i].Note.noteCc,
T[i].Note.noteEx);

///////////////////////////////////////////////////////////////////

float maxNote (int m, etudiant t[]){


int i;
float max = t[0].Note.noteEx;

for (i=1;i<m;i++)
if (t[i].Note.noteEx > max)
max = t[i].Note.noteEx;

return (max);
}

//////////////////////////////////////////////////////////////////
float moyGenerale (int m, etudiant t[]){
int i;
float som = 0;

for (i=0;i<m;i++)
som=som + 0.7*t[i].Note.noteEx+0.3*t[i].Note.noteCc;

return (som/m);
}

//////////////////////////////////////////////////////////////////

void main()
{
int n =2;
etudiant Tab[n];
remplissage(n, Tab);
affichage(n, Tab);

printf ("Meilleure note examen :%.2f \n Moyenne générale de la classe :


%.2f",maxNote(n,Tab),moyGenerale(n,Tab));
}

Exercice 3

# include <stdio.h>
# include <stdlib.h>

typedef struct {

char Nom[20];
int age ;
int Soduku_init[9][9] ;
char niveau ;
int Soduku_final[9][9] ;
int temps ;

} candidat;

/////////////////////////////////////////////////////////////////////

void remplissage(int m, candidat T[m]){


int i;
for(i=0; i<m;i++){
printf ("Candidat n°%d :identifiant =",i+1);
printf ("Nom =");
scanf ("%s",T[i].Nom);
printf ("Age =");
scanf ("%d",T[i].age);
printf ("Niveau =");
scanf ("%s",T[i].niveau) ;
printf ("Temps =");
scanf ("%d",T[i].temps) ;
remplissage_soduku(initial, T[i]) ;
remplissage_soduku(final, T[i]) ;
}
}

////////////////////////////////////////////////////////////////////

void affichage(int m, candidat T[m]){


int i;
printf ("Nom | Age | Niveau | Temps \n");
for (i=0;i<m;i++)
printf("%s | %d | %s |%d \n", T[i].Nom, T[i].age, T[i].niveau, T[i].temps);

printf("Grille Initiale : \n");


affichage_soduku(initial, T[i]) ;

printf("\nGrille Finale : \n");


affichage_soduku(final, T[i]) ;

printf("\n\n");
}

/////////////////////////////////////////////////////////////////

void remplissage_soduku(char etape[20], candidat* cand) {


int i,j ;

if (etape = "initial"){
for(i=0 ; i<9 ; i++){
for(j=0 ; j<9 ; j++){
printf ("Donner l’élément de la grille initiale numéro%d ;%d", i, j) ;
scanf("%d", cand->Soduku_init[i][j]) ;
}

else if (etape = "final"){


for(i=0 ; i<9 ; i++){
for(j=0 ; j<9 ; j++){
printf ("Donner l’élément de la grille finale numéro%d ;%d", i, j) ;
scanf("%d", cand->Soduku_final[i][j]) ;
}

else printf ("erreur choix étape \n") ;

//////////////////////////////////////////////////////////////////

void affichage_soduku(char etape[20], candidat* cand) {

if (etape = "initial"){
for(i=0 ; i<9 ; i++){
for(j=0 ; j<9 ; j++){
printf ("%d", cand->Soduku_initial[i][j]) ;

}
printf("\n") ;
}

else if (etape = "final"){


for(i=0 ; i<9 ; i++){
for(j=0 ; j<9 ; j++){
printf ("%d", cand->Soduku_final[i][j]) ;

}
printf("\n") ;
}

else printf ("erreur choix étape \n") ;

//////////////////////////////////////////////////////////////////
void main() {
int x ;
printf("Donnez le nombre de candidats") ;
scanf("%d", &x)
candidat Tab[x];
remplissage(x,Tab);
affichage(x,Tab);
}
Partie B : Les listes chaînées

Exercice 1

1)

Type

Cellule : Enregistrement
val: Entier
suiv : Liste
Fin Cellule

Liste : ^cellule

2)

Var
L : Liste

3)

Procédure CréerListe(n : Entier ; var L : Liste)


Var
Tete, p : Liste
i : Entier

Début
Allouer(Tete)
Ecrire("Entrer élément Tête :")
Lire(Tete^.val)
Tete^.suiv ← nil
L ← Tete

Pour i de 2 à n faire
Allouer(p)
Ecrire("Entrer élément n° :",i)
Lire(p^.val)
p^.suiv ← nil
L^.suiv ← p
L←p
Fin Pour

L ← Tete // pointer sur la tête de la liste

Fin
4)

Procédure AffichageIter(L : Liste)


Var
p : Liste

Début
p←L
Tant que p ≠ nil Faire
Ecrire(p^.val)
p ← p^.suiv
Fin Tant que
Fin

Procédure AffichageRecu(L : Liste)


Début
Si L ≠ nil Alors
Ecrire(L^.val)
AffichageRecu(L^.suiv)
Fin Si
Fin

5)

Version itérative
Fonction Recherche(x : Entier ; L : Liste) : Booléen
Var
p : Liste

Début
p←L

Tant que ((p ≠ nil) ET (p^.val ≠ x)) Faire


p ← p^.suiv
Fin Tant que

Si (p = nil) Alors
Recherche← Faux
Sinon
Recherche← Vrai
Fin Si
Fin
Version récursive
Fonction Recherche(x : Entier ; L : Liste) : Booléen
Début
Si L = nil Alors
Recherche← Faux
Sinon
Si L^.val = x Alors
Recherche ← Vrai
Sinon
Recherche ← Recherche(x, L^.suiv)
Fin Si
Fin Si
Fin

6)

Procédure AjouterTete(x : Entier ; var L : Liste)


Var
Tete : Liste

Début
Allouer(Tete)
Tete^.val ← x
Tete^.suiv ← L
L←Tete
Fin

7)

Version itérative
Procédure Supprimer(x : Entier ; var L : Liste)
Var
P,Q : Liste

Début
Si L = nil Alors
Ecrire("Liste vide, impossible de supprimer ",x)
Sinon
Si L^.val = x Alors
P←L //mémorisation de l’élément à supprimer
L ← L^.suiv
Sinon
P ← L^.suiv
Tant que ((P ≠ nil) ET (P^.val ≠ x)) Faire
Q←P
P ← P^.suiv
Fin Tant que

Si P ≠ nil Alors
Q^.suiv ← P^.suiv

Fin Si

Fin Si
Libérer(P)
Fin Si
Fin

Version récursive
Procédure Supprimer(x : Entier ; var L : Liste)
Var
P : Liste

Début
Si L ≠ nil Alors
Si L^.val = x Alors
P ←L
L ← L^.suiv
Libérer(P)
Sinon
Supprimer(x, L^.Suiv)
FinSi
FinSi
Fin

Exercice 2

Procédure Inverse (var L : Liste)


Var
P=Old_First,Q=New_First : Liste

Début
Old_First ←nil
Tant que L ≠ nil Faire
New_First ← L^.suiv
L^.suiv ← Old_First
Old_First ← L
L ← New_First
Fin Tant que
Fin
Exercice 3

Procédure Tri_Bulle( L : Liste)


Var
P : Liste
Temp : Entier
Trié : Booleen

Début
Si L = nil OU L^.suiv = nil Alors
Ecrire ("La liste est vide ou contient un seul élément : rien à trier !")
Sinon
Trié = Faux
P←L

Répéter
Trié← Vrai
P←L // pointeur sur le premier élément

Tant que P^.suivant ≠ nil Faire


Si P^.val > P^.suiv^.val Alors
Temp ← P^.val
P^.val ← P^.suiv^.val // Permutation
P^.suiv^.val ← Temp
Trié ← Faux
Fin Si

P ← P^.suiv
Fin tant que

Jusqu’à Trié = Vrai

Fin Si
Fin

Exercice 4

Procédure Concatener(L1, L2 : Liste)


var
L3 : Liste

Début
Si L1 = nil ET L2 = nil Alors
L3 ← nil
Sinon Si L1 ≠ nil ET L2 = nil Alors
L3 ← L1
Sinon Si L1 = nil ET L2 ≠ nil Alors
L3 ← L2
Sinon
//affectation de la première liste L1
L3 ← L1
// pointer sur le dernier élément de L3
Tant que L3^.suiv ≠ nil Faire
L3 ← L3^.suiv
Fin Tant que
//affectation de la liste L2 à la fin de L3
L3^.suiv ← L2

Fin Si
Fin

Exercice 5

Procédure Fusion( var L1 :Liste ; L2 : Liste ; var L3 : Liste)


Var
Tete, P, Q, S : Liste

Début
Si L1 = nil Alors // L1 est vide
L1 ← L2
Sinon
Si L2 ≠ nil Alors

P ←L1 //mémorisation de L1

Q ←L2 //mémorisation de L2

Si L1^.val < L2^.val Alors


L3^.val ← L1^.val
L1 ← L1^.suiv
Sinon
L3^.val ← L2^.val
L2 ← L2^.suiv
FinSi

S ← L3
L3 ← L3^.suiv

Tant que L1 ≠ nil ET L2 ≠ nil Faire


Si L1^.val < L2^.val Alors
L3^.val← L1^.val
L1← L1^.suiv
L3 ← L3^.suiv
Sinon
L3^.val← L2^.val
L2← L2^.suiv
L3 ← L3^.suiv
Fin Si
Fin Tant que

Si L1 ≠ nil Alors
//continuer avec L1
Tant que L1 ≠ nil Faire
L3^.val← L1^.val
L1← L1^.suiv
L3 ← L3^.suiv
Sinon Si L2 ≠ nil Alors
//continuer avec L2
Tant que L1 ≠ nil Faire
L3^.val← L2^.val
L2← L2^.suiv
L3 ← L3^.suiv
Fin Tant que
Fin Si

L1 ← S //pointer L1 à la tête de la liste

Fin Si
Fin Si
Fin

Exercice 7

Fonction Palindrome(L : Liste) :Booléen


Var
Stop : Booléen
Deb, Fin, Q : Liste

Début
Deb← L // Pointeur sur le premier élément
Fin←L// Pointeur sur le dernier élément

Si Deb = nil Alors


Palindrome← Faux
Sinon

Tant que Fin^.suiv ≠ nil Faire // Récupérer le pointeur sur le dernier élément de la liste
Fin ← Fin^.suiv
Fin Tant que

Tant que Deb^.val = Fin^.val ≠ nil ET Deb ≠ Fin Faire


Deb ← Deb^.suiv
Q ← Deb
Tant que Q^.suiv ≠ Fin Faire
Q ← Q^.suiv
Fin Tant que

Fin ← Q
Fin Tant que

Si Deb ≠ Fin Alors


Palindrome← Faux
Sinon
Palindrome← Vrai
Fin Si
Fin Si
Fin

Vous aimerez peut-être aussi