Correction TD Serie 3
Correction TD Serie 3
Correction TD Serie 3
Série de TD N°3
Exercice 1:
Écrire un sous-algorithme qui teste si un nombre passé en paramètre est
premier et qui retourne vrai s'il l'est et faux sinon. Calculer sa complexité.
Réponse 1 :
Fonction Test_premier( n : Entier) : Booléen
Variable
i : Entier
DébutFonction
Pour i allant de 2 à sqrt(n) Faire
Si (n mod i=0) Alors
Retourner Faux
FinSi
FinPour
Retourner Vrai
FinFonction
Exercice 2:
Écrire un algorithme qui permet de trier un tableau en utilisant le tri par
sélection puis calculer sa complexité. Le tri par sélection est très simple : il
consiste à sélectionner dans le tableau la plus petite valeur et de la permuter
avec le premier élément du tableau, puis la deuxième plus petite valeur (hors
premier élément) et de la permuter avec le deuxième élément du tableau et ainsi
de suite, et cela pour tous les éléments du tableau.
Réponse 2 :
Fonction indice_val_min (T:tableau[ ] d’entiers, taille
: Entier, k : Entier) : Entier
Variable
i, imin, min : Entier
DébutFonction
min ← T[k]
imin ← k
Pour i allant de k+1 à taille-1 Faire
Si ( T[i]<min) Alors
min ← T[i]
imin ← i
FinSi
1
FinPour
Retourne imin
FinFonction
FinProcédure
Algorithme Programme_Pricipal
Constante n ← 6
Variable
i: Entier
T : tableau[ 0..n-1] d’entiers
Début
Pour i allant de 0 à n-1 Faire
DébutPour
Lire (T[i])
FinPour
Tri_croissant (T,n)
Pour i allant de 0 à n-1 Faire
Afficher (T[i])
FinPour
Fin
Exercice 3 :
En utilisant la définition suivante :
x0 = 1;
xn = xn/2 * xn/2, si n est pair;
xn = x*xn/2 * xn/2 si n est impair (n/2=n div 2).
Ecrire un sous-algorithme qui calcule xn, avec x est un nombre réel et n est un
entier.
Réponse 3 :
Fonction Puissance2(x : Réel, n : Entier) : Réel
Variable p : Réel
DébutFonction
Si (n=0) Alors Retourner 1 FinSi
p ← Puissance2(x,n/2)
p ← p*p
Si (n%2==0) Alors
Retourner p
2
Sinon
Retourner x*p
FinSi
FinFonction
Donc la complexité de cette méthode est en O(log2(n)).
Exercice 4 :
On désire calculer 2n, en utilisant, 2n =2n-1 +2n-1 , avec n est un entier.
Écrire une fonction qui traduit cet algorithme.
Donner la complexité en temps de cet algorithme.
Réponse 4 :
Fonction Puissance2n(n : Entier) : Entier
DébutFonction
Variable
p : Entier
DébutFonction
Si (n=0) Alors Retourner 1 FinSi
p ← Puissance2n(n-1)
Retourne p+p
FinFonction
Exercice 5 :
En utilisant la boucle "Pour", écrire un sous-algorithme qui permet de calculer
la suite de Fibonacci. Calculer sa complexité.
Réponse 5 :
Fonction Fib_iter ( n : Entier ) : Entier
Variable a, b, c, i : Entier
DébutFonction
Si ( n = 0) ou ( n = 1) Alors
Retourne 1
FinSi
a ← 1
b ← 1
Pour i allant de 2 jusqu’à n Faire
c ← a+b
a ← b
b ← c
FinPour
Retourne c
FinFonction
Exercice 6 :
Écrivez un algorithme récursif naïf calculant la suite de Fibonacci.
3
Écrire un autre algorithme récursif terminal qui calcule la suite de
Fibonacci , pour n > 0, dont sa complexité est linéaire.
Réponse 6 :
Sinon
Retourne Fib(n-1)+Fib(n-2)
Finsi
FinFonction