Examen 2022

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 5

Université Mohamed Khider-Biskra

Faculté des Sciences Exactes et Sciences de la Nature et de la Vie


Département d’informatique

2ème année LMD Algorithmique et structures de données 3


30 Jan 2022 08:00-09:00, Amphis K,H

Examen

Exercice 1 Listes linéaires chaı̂nées (1 + 2 + 1 + 2 + 3 + 4)


La représentation des nombres entiers dans les langages de programmation est toujours limitée à
quelques octets. On souhaite surmonter ce problème en proposant une représentation des entiers
quelque soit leur taille en utilisant les listes linéaires chainées. Un nombre entier est représenté par
une liste linéaire chaı̂née où chaque chiffre du nombre est représentée par un maillon de la liste. Le
chiffre du poids faible est rangé à la tête.

Exemple : Le nombre 236799 est représenté par la liste linéaire chaı̂née suivante :

Nil ←− [2] ←− [3] ←− [6] ←− [7] ←− [9] ←− [9] ←− Tete

1. Donner la déclaration permettant de représenter en mémoire de telles listes.


2. Soit la procédure f suivante :

Procédure f (var L : Poniteur(TMaillon));


var p : Poniteur(TMaillon) ;
Début
Si (L=Nil) Alors
Allouer(p) ;
Aff val(p,1) ;
Aff adr(p, L) ;
L ← p;
Sinon
Si (Valeur(L)=9) Alors
Aff val(L,0) ;
f (Suivant(L)) ;
Sinon
Aff val(L,Valeur(L)+1) ;
Fin Si;
Fin Si;
Fin;

(a) Donner la liste de l’exemple ci-dessus après l’appel de la procédure f (Tete).


(b) Que fait la procédure f sur un nombre entier représenté par une liste linéaire chaı̂née ?
(c) Calculer la complexité de la procédure f en fonction de la longueur n de la liste passée en
paramètre.
3. Écrire la procédure Div10 suivante :
Procédure Div10( var L : pointeur(TMaillon)) ;
permettant de diviser le nombre représenté dans L par 10.

Page 1 de 5
4. Écrire la fonction récursive Multi3 suivante :
Fonction Multi3(L : pointeur(TMaillon)) :booléen ;
permettant de retourner vrai si le nombre représenté par L est un multiple de 3, sachant qu’un
nombre entier est multiple de 3 si la somme des chiffres le représentant est un multiple de 3. Par
exemple, le nombre 236799 de l’exemple précédent est un multiple de 3 puisque 2 + 3 + 6 + 7
+ 9 + 9 = 36 et 36 est un multiple de 3.

Exercice 2 Arbres (2 + 2 + 2 + 1)
Soit les nombre entiers suivants donnés dans l’ordre :

13, 22, 6, 15, 4, 2, 11, 17

1. Donner l’arbre binaire de recherche obtenu en insérant ces nombres dans l’ordre.
2. Soit la procédure g suivante :

Procédure g( N : Poniteur(TNoeud));
Début
Si (N =Nil) Alors
Ecrire(”l’arbre est vide”) ;
Sinon
Tant que (FG(N )6= Nil ) faire
N ←FG(N ) ;
Fin TQ;
Ecrire(Valeur(N )) ;
Fin Si;
Fin;

Qu’affiche cette procédure en l’executant sur la racine de l’arbre binaire précédent ?


3. Donner le tas dynamique construit en insérant dans l’ordre ces nombre.
4. En déduire le tas statique.

FFF Bonne chance FFF

Page 2 de 5
Corrigé type
Exercice 1 Listes linéaires chaı̂nées (1 + 2 + 1 + 2 + 3 + 4)
1. Déclarations permettant d’utiliser de telles listes.

Type TMaillon = Structure


Valeur : entier ;
Suivant : Pointeur(TMaillon) ; 1 pt
Fin ;
Var Tete : Pointeur(TMaillon ;

2. Procédure
(a) Liste de l’exemple ci-dessus après l’appel de la procédure f (Tete).
Nil ←− [2] ←− [3] ←− [6] ←− [8] ←− [0] ←− [0] ←− Tete
2 pts
(b) La procédure f ajoute 1 au nombre représenté pal la liste. 1 pt
(c) Le temps T(n) d’exécution de la fonction :

 a si n = 0 (L = N il)
T (n) = b si V aleur(L) 6= 9
T (n − 1) + c sinon

– La constante a englobe le temps du test (n 6= N il) et le temps des instructions :


– Allouer(p) ;
– Aff val(p,1) ;
– Aff adr(p, L) ;
– L ← p;
– La constante b le temps du test (n 6= N il), le temps de test (Valeur(L)=9) et le temps
de l’instruction Aff val(L,0) ;
– La constante c le temps du test (n 6= N il), le temps de test (Valeur(L)=9) et le temps
de l’instruction Aff val(L,Valeur(L)+1) ;

T (n) = T (n − 1) + b
= [b + T (n − 2)] + b
= T (n − 2) + 2b
= [b + T (n − 3)] + 2b
= ...
= T (n − i) + ib
= ...
= T (0) + nb = a + nb
T (n) = nb + (aouc)
Et puisque a > c on prends le pire des cas c’est à dire a,
Donc la complexité est en O(nb + a)= O(n) car a et b sont des constantes positives. 2 pts
3. Pocédure Div10 : pour diviser un nombre sur 10, on supprime le premier maillon c’est dire la
position des unités

Page 3 de 5
Procédure Div10(var L : Poniteur(TMaillon));
var p : Poniteur(TMaillon) ;
Début
Si (L 6=Nil) Alors
p ← L;
L ← Suivant(L) ;
Libérer(p) ;
Fin Si;
Fin;

3 pts
4. Écrire la fonction récursive Multi3 suivante :

Fonction M ult3( L : Poniteur(TMaillon)) : booléen;


Procédure LibererListe(var L : Poniteur(TMaillon)); ;
var q : Poniteur(TMaillon) ;
Début
Tant que (L 6= N ) faire
p ← L;
L ← Suivant(L) ;
Libérer(p) ;
Fin TQ;
Fin;
var ListeSomme : Poniteur(TMaillon) ;
Début
ListeSomme ← N il ;
p ← L;
Tant que (p 6= N il) faire
Pour i de 1 à Valeur(p) faire
P(ListeSomme) ;
Fin Pour; 4
Fin TQ;
Si (ListeSomme=Nil) Alors
M ult3 ← V rai ;
Sinon
Si (Suivant(ListeSomme)=Nil) Alors
Si (Valeur(ListeSomme) mod 3 = 0) Alors
M ult3 ← Vrai ;
Sinon
M ult3 ←Faux ;
Fin Si;
Sinon
M ult3 ← M ult3(ListeSomme) ;
LibererListe(ListeSomme)
Fin Si;
Fin Si;
Fin;

Page 4 de 5
pts

Exercice 2 Arbres (2 + 2 + 2 + 1)
Soit les nombre entiers suivants donnés dans l’ordre :

13, 22, 6, 15, 4, 2, 11, 17

1. l’arbre binaire de recherche obtenu en insérant ces nombres dans l’ordre :

2 pts
2. La procédure affiche : 2 2 pts
3. Donner le tas dynamique construit en insérant dans l’ordre ces nombre.

2 pts
4. Le tas statique.
22 17 11 15 4 2 6 13
1 pt

Page 5 de 5

Vous aimerez peut-être aussi

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy