0% ont trouvé ce document utile (0 vote)
55 vues5 pages

Correction EF1

Transféré par

obtachanelle
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)
55 vues5 pages

Correction EF1

Transféré par

obtachanelle
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

Correction Devoir semestriel (S3)

Module : Informatique

Exercice 1

1. La fonction dupliquer :

element * dupliquer(element * debut){


element * tmp, * nouv;

tmp = debut;
while(tmp!=NULL){
if(tmp->donnee % 2 == 0){
nouv = (element *) malloc(sizeof(element));
nouv->donnee = tmp-> donnee;
nouv->suivant = tmp->suivant;
tmp->suivant = nouv;
tmp = nouv->suivant;
}
else
tmp = tmp->suivant;
}
return debut;
}

2. La fonction incluse :

int incluse(element * A, element * B){


element * tmp, * ptr;

tmp = B;
while(tmp!=NULL){
ptr=A;
while(ptr != NULL){
if(ptr->donnee == tmp->donnee){
ptr = ptr->suivant;
tmp = tmp->suivant;
}
else
break;
}
if(ptr == NULL)
return 1;
else
if(tmp->donnee != A->donnee)
tmp = tmp->suivant;
}
return 0;
}

1
3. La fonction transferer :

file transferer2(file * F){


file Q;
pile * P;
int x;

Q.tete = NULL;
P = NULL;
while(est_vide(*F)==0){
x = defiler(F);
if(x%2 == 0)
P = empiler(P, x);
else
Q = enfiler(Q, x);
}
while(est_vide(P) == 0){
x = depiler(&P);
*F = enfiler(*F, x);
}
while(est_vide(Q) == 0){
x = defiler(&Q);
P = empiler(P, x);
}
while(est_vide(P) == 0){
x = depiler(&P);
Q = enfiler(Q, x);
}
return Q;
}

Exercice 2

Soit la liste des valeurs suivantes :

26 20 32 38 53 10 29 34 23 6 15 72

1. L’arbre binaire de recherche (ABR) correspondant à cette liste:

26

20 32

10 23 29 38

6 15 34 53

72

2
2. L’ordre des nœuds visités selon le parcours préfixé de l’arbre :
26 20 10 6 15 23 32 29 38 34 53 72

3. L’ABR obtenu après ajout successive des valeurs 17, 27 et 33:

26

20 32

10 23 29 38

6 15 27 34 53

17 33 72

4. L’ABR obtenu après suppression successive des valeurs 32, 23 et 20:

26

10 29

6 27 38

15 34 53

17 33 72

5. Une fonction nommée afficher_feuilles qui permet d’afficher les points doubles d’un arbre
binaire :

void afficher_feuilles(noeud * racine){


if(racine != NULL){
if(racine->gauche == NULL && racine->droit == NULL)
printf("%d\t", racine->donnee);
else{
afficher_feuilles(racine->gauche);
afficher_feuilles(racine->droit);
}
}

3
}

6. Une fonction hauteur qui permet de calculer le nombre de nœuds d’un arbre binaire :

int max(int a, int b){

if (a > b)
return a;
else
return b;
}

int hauteur(noeud * racine){

if (racine != NULL){
return 1 + max(hauteur(racine->gauche), hauteur(racine->droit));
}
else
return -1;
}

7. Ecrire une fonction récursive P_equilibre qui permet de vérifier si un arbre binaire est
parfaitement équilibré :

int AVL(noeud * racine){


if(racine != NULL)
if(abs(hauteur(racine->gauche)-hauteur(racine->droit))<=1)
if(AVL(racine->gauche) == 1 && AVL(racine->droit) == 1)
return 1;
else
return 0;
else
return 0;
else
return 1;
}

Exercice 3

1. La liste obtenue après exécution de la fonction operation contient les éléments suivants :

<12, 8, 11, 6, 5>

2. La pile obtenue après exécution de la fonction mystere :

P = [8, 6, 10, 11, 15], 15 est le sommet de la pile.

4
Exercice 4

1. Le graphe correspondant à la représentation :

3 5
A C E
11
8
1 2
S
4
13
6 12
B D F

2. L’ordre des sommets visités selon le parcours en profondeur du graphe :


S A B D E F C

3. Le plus court chemin depuis S jusqu’à F :

Ensemble des Choix du S A B C D E F


sommets sommet
0 ∞ ∞ ∞ ∞ ∞ ∞
SABCDE F S - 11(S) 13(S) - - - -
ABCDE F A - - 12(A) 14(A) - - -
BCDE F B - - - - 18(B) - -
CDE F C - - - - - 19(C) -
DE F D - - - - - - 30(D)
E F E - - - - - - 21(E)
F F - - - - - - -

Nous avons utilisé l’algorithme de Dijkstra puisque le graphe contient un circuit et des poids
positifs sur les arcs, le plus court chemin du sommet S au sommet F est : S A C E F, sa
longueur est de 21.

4. Si la valeur de l’arc (B, D) devient -6, nous utilisons l’algorithme de Ford BELLMAN
pour l’obtention du plus court chemin.

Vous aimerez peut-être aussi