Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Série de TD N°4
Exercice 1:
Le tri à bulles est un algorithme de tri qui consiste à comparer deux éléments
consécutifs dans le tableau T. S'ils sont en ordre croissant ils restent à leur place,
sinon ils sont échangés. Puis on recommence avec les éléments suivants.
Implémenter une fonction Tri_a_bulles qui prend en argument un tableau T et sa
taille et qui renvoie un nouveau tableau trié contenant les éléments de T.
Calculer la complexité temporelle de cette fonction.
Réponse 1 :
Procédure Tri_a_bullees(T:tableau[] d’entiers, Taille:
Entier)
Variable i,j,Temp : Entier
DébutProcédure
Pour i allant de Taille-1 jusqu’à 1 (Pas :-1) Faire
Pour j allant de 0 jusqu’à i-1 Faire
Si (T[j]> T[j+1]) Alors
Temp=T[j]
T[j]=T[j+1]
T[j+1] =Temp
FinSi
FinPour
FinPour
FinProcédure
La complexité est quadratique.
Réponse 2 :
Question 1
1
Fonction Max_Tab(T : tableau[ ] d’entiers, n:
Entier) : Entier
Variable max,i :Entier
DébutFonction
max ← T[0]
Pour i allant de 1 à n-1 Faire
Si (T[i]>max) Alors
max ← T[i]
FinSi
FinPour
Retourner max
FinFonction
Question 2
Fonction Occurence(T:tableau[]d’entiers, n:Entier, x:
Entier ): Entier
Variable nb,i :Entier
DébutFonction
nb ← 0
Pour i allant de 0 à n-1 Faire
Si (T[i]=x) Alors
nb ← nb+1
FinSi
FinPour
Retourner nb
FinFonction
Procédure Remplir(E:tableau[]d’entiers,
T:tableau[]d’entiers, n:Entier, m:Entier)
Variable i : Entier
DébutProcédure
Pour i allant de 0 à m Faire
E[i] ← Occurence(T,n,i)
FinPour
FinProcédure
Procédure Tri_dénombrement(T:tableau[]d’entiers,
n:Entier)
Variable i,max,k,j : Entier
E : tableau[ 0..1000] d’entiers
DébutFonction
max ← Max_Tab(T, n)
Remplir(E,T,n,max)
k ← 0
Pour i allant de 0 à max Faire
Si (E[i]<>0) Alors
Pour j allant de 1 à E[i] Faire
T[k] ← i
k←
← k+1
FinPour
FinSi
FinPour
FinProcédure
Algorithme Tri_par_Dénombrement
2
Constante N ← 3
Variable
i : Entier
T : tableau[ 0..N-1] d’entiers
Début
Pour i allant de 0 à N-1 Faire
Lire (T[i])
FinPour
Tri_dénombrement(T,N)
Pour i allant de 0 à N-1 Faire
Afficher (T[i])
FinPour
Fin
Question 3
Donc la complexité de cet algorithme est linéaire (O(N)+O(max)).
Exercice 3 :
On s'intéresse à l'évaluation d'une fonction polynôme P de degré n en un point x.
On suppose P représenté par le tableau a[0..n] de ses coefficients ; il s'agit donc
de calculer la somme
a0+a1*x+…+an*xn.
Réponse 3 :
Question 1
Fonction Puissance( x : Réel, i : Entier) : Réel
Variable
p : Réel
j : Entier
DébutFonction
Si (i=0) Alors Retourner 1 FinSi
p ← 1
Pour j allant de 1 à i Faire
p←← p*x
FinPour
Retourner p
FinFonction
3
Fonction Evaluation(a:tableau[]de Réels, N:Entier, x :
Réel) : Réel
Variable
P : Réel
i : Entier
DébutFonction
P ← 0
Pour i allant de 0 à N Faire
P ← P+a[i]*Puissance(x,i)
FinPour
Retourner P
FinFonction
Algorithme Evaluation_de_P
Constante n ← 3
Variable
x, P : Réel i : Entier
a : tableau[ 0..n] de Réels
Début
Pour i allant de 0 à n Faire
Lire(a[i])
FinPour
Lire(x)
P ← Evaluation(a,n,x)
Afficher(P)
Fin
Question 2
0
x = 1;
i i/2 i/2
x = x * x , si i est pair;
i i/2 i/2
x = x*x * x si i est impair (i/2=i div 2)
Fonction Puissance2(x : Réel, i : Entier) : Réel
Variable p :Réel
DébutFonction
Si (i=0) Alors Retourner 1 FinSi
p ← Puissance2(x,i/2)
p ← p*p
Si (i%2==0) Alors
Retourner p
Sinon
Retourner x*p
FinSi
FinFonction
Question 3 :
Donc la complexité de cet algorithme est en n*log(n).
Question 4 :
Fonction Evaluation1(a:tableau[]de Réels, N:Entier, x :
Réel) : Réel
4
Variable
P,S : Réel
i : Entier
DébutFonction
S ← 0
P ← 1
Pour i allant de 0 à N Faire
S ← S+a[i]*P
P ← x*P
FinPour
Retourner S
FinFonction
Exercice 4 :
Pour représenter un nombre complexe définir un type de structure qui contient
deux flottants, la partie réelle et la partie imaginaire.
1. Écrire une fonction permettant de saisir un complexe passé en paramètre.
2. Écrire une fonction permettant d'afficher un complexe passé en
paramètre.
3. Écrire une fonction d'addition qui reçoit en paramètre deux complexes,
qui fait la somme des deux et range le résultat dans la première structure.
4. Écrire un algorithme principal qui :
• saisit deux complexe c1 et c2.
• ajoute c1 à c2.
• affiche c1 après ajout.
Réponse 4 :
5
Algorithme Exercice4
Type
Structure complexe
reel : Réel
imag : Réel
FinStructure
Fonction Saisir(x : complexe) : complexe
DébutFonction
Afficher (" Partite réelle ? ")
Lire (x.reel)
Afficher (" Partie imaginaire ? ")
Lire (x.imag)
Retourner x
FinFonction
Réponse 5 :
Algorithme Exercice 5
Constante N ← 6
Type
Structure pers
6
NOM: Chaîne de caractères
AGE: Entier
NOTES: Tableau[0..3] de Réels
FinStructure
Variable
TAB: Tableau[0..N-1] de pers
i,j : Entier
Début
Pour i allant de 0 jusqu’à N-1 Faire
Afficher("NOM :") Lire(TAB[i].NOM)
Afficher("AGE :") Lire(TAB[i].AGE)
Pour j allant de 0 jusqu’à 3 Faire
Lire (TAB[i].NOTES[j])
FinPour
FinPour
i ← 0
Tantque (i<N)) Faire
Si ((TAB[i].NOM[0]='A') et(TAB[i].AGE>18)) Alors
Afficher ("indice : " , i)
Afficher ("Nom : ", TAB[i].NOM)
Afficher ("AGE : ", TAB[i].AGE)
Pour j allant de 0 jusqu’à 3 Faire
Afficher (TAB[i].NOTES[j])
FinPour
FinSi
i ← i+1
FinTantque
Fin
Exercice 6 :
Supposons qu’on a un fichier nommé DONNEES qui contient des entiers relatifs.
On veut créer un fichier nommé PAIRS_NEGATIFS à partir du fichier DONNEES.
Ecrire un programme qui permet de lire les entiers à partir du fichier DONNEES,
s’il trouve un entier pair et négatif alors il va insérer cet entier dans le fichier
PAIRS_NEGATIFS.
Réponse 6 :
Algorithme Exercice6
Variable
don,res : fichier séquentiel
m : entier
Début
Ouvrir " DONNEES.txt" dans don en Lecture
Ouvrir " PAIRS_NEGATIFS " dans res en Ajout
Tantque NonFinFichier(don) Faire
Lire(don,m)
Si((m%2 = 0)et(m<=0))
Ecrire(res,m)
FinSi
FinTantque
Afficher("Terminer")
Fin