Ch4 - Structures Iteratives
Ch4 - Structures Iteratives
données
Elaboré par Mme Elkamel Hager
[email protected]
Plan du cours
• Chapitre 1 : Introduction à l’algorithmique
• Chapitre 2 : Types de données, constantes, Variables
• Chapitre 3 : Structures conditionnelles
• Chapitre 4 : Structures itératives
• Chapitre 5 : Procédures et fonctions
• Chapitre 6 : Les tableaux
• Chapitre 7 : La Récursivité
• Chapitre 8 : Les algorithmes de recherche
• Chapitre 9 : Les algorithmes de Tri
• Chapitre 10 : Les enregistrements
• Chapitre 11 : Les pointeurs
1
Chapitre 4 : Structures de
contrôle itératives
sommaire
1. Introduction
2. Les structures de contrôles itératives
3. Enumération des éléments d’une séquence
4. Le forme des structures de contrôle itératives
5. La structure de contrôle itérative complète
5.1 pour .. Faire
5.2 le parcours descendant
5.3 Cas général
6. Les itérations complètes récurrentes
7. La structure de contrôle itérative à condition d’arrêt répéter ..
Jusqu’à
8. La structure de contrôle itérative à condition d’arrêt tantque ..
faire
ASD1 – 2020 – S1 H. Jamoussi Elkamel , FSM 4
2
Introduction
Le langage algorithmique est un langage qui reprend les
concepts des langages impératifs ils offrent
– des entités typées possédant des identifiants
– une suite d’actions (instruction) modifiant l’état
d’un algorithme, on trouve les structures
• Séquentielles
• Conditionnelles
• Itératives
déterministes
indéterministes
3
Les structures de contrôle itératives
• On raisonne donc sur une séquence d’éléments, c’est-à-dire une
suite d’éléments de même type, et de valeurs différentes
• Exemples de séquences d’éléments:
– chaines de caractères,
– fichiers,
– tableaux,
– suite mathématique,
– suite des valeurs etc.
• Un algorithme itératif consiste à énumérer les éléments d’une
séquence en utilisant une boucle.
4
Les formes de structures de contrôle itératives
5
La structure de contrôle itérative complète :
Pour … faire
Exemple
écrire un algorithme qui lit à partir du clavier n entiers et affiche les
entiers pairs strictement positifs.
Spécification
Problème NombrePair
entrées : - n : entier : nombre des entiers à lire
- une séquence des entiers xi à lire à partir du clavier
sortie : affichage des entiers pairs et strictement positifs
6
La structure de contrôle itérative complète
Le parcours descendant
séquence d’instruction A
Pour compteur De n à 1 pas -1
Faire
séquence d’instructions B
FinPour
séquence d’instruction C
Problème IverserChaine
entrées : - ch : une chaine des caractères
sortie : affichage de ch dans l’ordre inverse.
7
La structure de contrôle itérative complète
Le parcours descendant
Algorithme inverserChaine Algorithme inverserChaine
Variable i, L : entier Variable i, L : entier
ch: chaine ch: chaine
Debut & ch1
Ecrire("donner chaine ") Debut &
Lire(ch) Ecrire("donner chaine ")
L ← longueur(ch) Lire(ch)
pour i de L à 1 pas -1 ch1 ←""
faire L ← longueur(ch)
ecrire( ch[i] ). pour i de L à 1 pas -1
Finpour faire
Fin ch1 ← ch1 & ch[i]
Finpour
ecrire(ch1).
ASD1 – 2020 – S1
Fin , FSM
H. Jamoussi Elkamel 15
8
La structure itérative complète : Cas général
séquence d’instruction A
Pour compteur De valInitiale à valFinale pas p
Faire
séquence d’instructions B
FinPour
séquence d’instruction C
• Si p est positif, le parcours est ascendant , si p est négatif le parcours est
descendant.
• Le compteur de parcours de l’itération est automatiquement incrémenté (resp.
décrémenté) de la valeur p à chaque itération
• Le nombre de répétition est n = E ( (valFinale–valInitiale+1) /p)
• l’action B n’est jamais exécutée si l’indice de fin est atteint dès le départ :
si p >0 et valInitiale > valFinale
Si p < 0 et valInitiale < valFinale
H. Jamoussi Elkamel , FSM 17
ASD1 – 2020 – S1
Spécification
Problème transformerChaine
entrées : - ch : une chaine des caractères
sortie : affichage de la chaine ch après transformation
9
La structure itérative complète : Cas général
Algorithme transformerChaine
Variable i, L : entier
ch: chaine
Debut &
Ecrire("donner chaine ")
Lire(ch)
L ← longueur(ch)
pour i de 3 à L pas 3
faire
ch[i] ← ‘*’
Finpour
ecrire(ch)
Fin
H. Jamoussi Elkamel , FSM 19
ASD1 – 2020 – S1
10
Les itérations complètes récurrentes
Exemple :
suite récurrente d’ordre 1 : Un = f (Un-1 )
U0 =0
Un = 5Un-1 + 10 pour (n > 0)
Spécification
Problème somme
Entrées : n est un entier à lire à partir du clavier
une séquence de n entiers à lire du clavier
préconditions : ( n ≥ 0) n
11
Les itérations complètes récurrentes
Analyse S= (1+2+3+..+n)
• L’addition étant associative on peut écrire S=((..(((1+2)+3)+4)+…)+n)
On a (n-1) additions à faire
• On change rien en ajoutant 0 à l’expression S=((..((((0+1)+2)+3)+4)+…)+n)
on a maintenant n additions à faire
Le calcul de la somme est défini par récurrence
S0=0 La valeur initiale S0 est égale à 0
S1=S0 + 1
S2=S1 + 2
..
Si=Si-1 + i Récurrence linéaire d’ordre 1
la somme à l’étape i Si = la somme à l’étape (i-1)
S(i-1) en lui ajoutant i
..
Sn=Sn-1 + n La valeur finale Sn est égale à S
12
La structure itérative à condition d’arrêt
13
La structure itérative à condition d’arrêt
Répeter .. Jusqu’à
• Exemple
Calculer la moyenne arithmétique d’une suite de réels strictement
positifs qui se termine par la valeur -1
Spécification
Problème multiplication
Entrées : une suite des réels
Sortie : moy = S / nb
Analyse
S = somme de la séquence
Nb = nombre des élément de la séquence
condition d’arrêt x= 0
Initialisation
Nb0 = 0
S0 = 0
Itération
Lire(xi)
Si (xi > = 0)
Si = Si-1 + xi pour (xi > 0)
Nbi = Nbi-1 + 1
À la fin de la boucle
Moy
ASD1 = –SS1/ Nb si Nb <> 0H. Jamoussi Elkamel , FSM
– 2020 28
14
La structure itérative à condition d’arrêt
Répeter .. Jusqu’à
Algorithme multiplication
si ( NB > 0)
Variable NB : entier
Alors Moy ← S / NB Sinon
x, S : réel
Moy ← 0
Debut
FinSi
S←0
NB ← 0
Ecrire (" moyenne = ", moy )
repeter
Fin
Ecrire ("x = ")
Lire(x )
si ( x > 0)
alors
S← S + x
Nb ← Nb + 1
Finsi
jusqu’à ( x = -1 )
• Exemple
multiplier deux entiers positifs a et b, le deuxième n’étant pas nul, en
utilisant uniquement les additions.
Spécification
Problème multiplication
Entrées : a et b entiers positifs
précondition : (a ≥ 0) et (b> 0)
Sortie : affichage de P = a * b
15
La structure itérative à condition d’arrêt
Répeter .. Jusqu’à
Filtrage des données ou lecture conditionnée
Il s’agit d’obliger l’utilisateur de l’algorithme à fournir des données
vérifiant certaines contraintes du domaine.
On peut utiliser la primitive répéter, puisqu’on sait qu’au moins
une valeur sera donnée.
Dans notre cas on a (a ≥ 0) et (b> 0) condition d’arrêt
repeter
Ecrire ("donner deux entiers a ≥ 0 et b> 0 :")
Lire(a , b )
jusqu’à ( a > = 0) et (b> 0)
Analyse
a*b = a + a + a + .. + a
b fois
a*b =(..(( (0+a)+a ) + a )+ ..+a)
S0 = 0 i= 0
Si = Si-1 + a pour (i > 0)
16
La structure itérative à condition d’arrêt
Répeter .. Jusqu’à
Algorithme multiplication
Variable a, b , i : entier
Debut
repeter
Ecrire ("donner deux entiers a ≥ 0 et b> 0 :")
Lire(a , b )
jusqu’à ( ( a > = 0) et (b> 0) )
S←0
i ←0
repeter
S← S + a
i ←i+1
jusqu’à ( i = b )
Ecrire (S)
Fin
17
La structure itérative à condition d’arrêt
Tant que .. Faire
• Exemple
multiplier deux entiers a et b positifs ou nuls, en utilisant uniquement
des additions. (maintenant b peut être nul )
Spécification
Problème multiplication
Entrées : a et b entiers positifs
précondition : (a ≥ 0) et (b ≥ 0)
Sortie : affichage de S = a * b
Analyse
L’utilisation de répéter .. Jusqu’à tombe alors en défaut puisque
(S← S + a) est exécuté au moins une fois on ne pourra avoir le résultat 0
dans S lorsque (a ≥ 0) et (b = 0)
H. Jamoussi Elkamel , FSM 35
ASD1 – 2020 – S1
Debut
repeter
Ecrire ("donner deux entiers a ≥ 0 et b> = 0 :")
Lire(a , b )
jusqu’à ( ( a > = 0) et (b > = 0) )
S←0
i ←0
Tantque (i <> b) faire
S← S + a
i ←i+1
fintantque
Ecrire (S)
Fin
Si b = 0 on n’entre pas dans la boucle et S = 0
18
La structure itérative à condition d’arrêt
Tant que .. Faire
• Exemple
Calculer le Plus Grand Diviseur Commun PGCD de deux entiers
naturels a et b.
Spécification
Problème multiplication
Entrées : a et b entiers positifs
précondition : (a ≥ 0) et (b ≥ 0) et (a + b <> 0)
Sortie: un entier le pgcd(a, b)
19
La structure itérative à condition d’arrêt
Tant que ..faire
Algorithme pgcd
Variable a, b , R : entier
Debut
repeter
Ecrire ("donner deux entiers a ≥ 0 , b ≥ 0 et (a + b) <> 0:")
Lire(a , b )
jusqu’à ( ( a > = 0) et (b > = 0) et (a + b) <> 0)
Tantque (b <> 0) faire
R ← a mod b
a ←b
b← R
fintantque
Ecrire ( a )
Fin
Remarque: on peut accepter (a < b) , dans ce cas, il y’ a échange automatique de
deux valeurs sans qu’il soit nécessaire de le prévoir en plus dans l’algorithme .
20
Exercice : Suite récurrentes d’ordre 2
Analyse
• U1 = 1 et U2 = 1 sont donnés, et on calcul (n-2) termes à l’aide de la formule
récurrente Un = Un-1 + Un-2 pour (n > 2)
• Récurrence linéaire d’ordre 2 : il faut deux termes précédents pour calculer Un
• pour calculer U à une itération i , nous avons besoin de 2 valeurs: la précédente (à
l’itération i-1 ) et la pré-précédente (à l’itération i-2).
• On manipule deux variables: Uc et Up
• À un instant donné, une variable ne peut avoir qu’une valeur
• Dans une itération, il faut sauvegarder la valeur calculée dans une variable
intermédiaire aux
• Initialement
Up= U1 = 1 et Uc = U2 = 1
• À une itération i
aux ←Uc + Up
Up ←Uc
Uc ← aux H. Jamoussi Elkamel , FSM 41
ASD1 – 2020 – S1
21
Exercice : Suite
calculer et afficher racine de a, a est un réel strictement positif par la
méthode de Newton avec une précision esp.
Méthode de Newton : on calcul les éléments de la suite U1
a
U0
2
1 a
U i (U i 1 ) si (i 0)
2 U i 1
U i U i 1
tantt que eps
U i 1
Problème racine
Entrées : a: un réel
eps : un réel : la précision
préconditions : ( a > 0) et (eps > 0)
Sortie : U = racine de a
H. Jamoussi Elkamel , FSM 43
ASD1 – 2020 – S1
Exercice Suite
Algorithme racine
Variable a , eps : réel
U, T , aux : entier
Debut
repeter
Ecrire ("donner deux réels a > 0 et eps > 0")
Lire(a, eps )
jusqu’à (( a > 0) et (eps > 0))
U←a/2
T←1
tant que ( T > eps ) faire
aux ← U
U ← 1/2 ( U + a / U)
T ← abs( U – aux )/ aux
Fintantque
ecrire(U)
ASD1 – Fin
2020 – S1 H. Jamoussi Elkamel , FSM 44
22
Exercice : Série entière
Il s’agit de dégager une méthode pour calculer la valeur d’une fonction
grâce à son expression en série entière. Ce calcul devant minimiser le
nombre d’opérations à effectuer.
x x 2 x3 xn
Exemple : calculer la somme S n ( x) 1 .. si (n > 0)
1! 2! 3! n!
Spécification
Problème suiteEntière
Entrées : n est un entier à lire à partir du clavier
x est un réel à lire à partir du clavier
précondition : (n > = 0)
Sortie : affichage de S = Sn(x)
T0 = 1
Ti = Ti-1 * x / i Les itérations T S
donc S0 = 1 Initialisation 1 1
Si = Si-1 + Ti 1 x 1+x
• À une itération i on calcul 2 x2 / 2 1 + x + x2 /2
T← T * x / i 3 x3 / (2*3) 1 + x + x2 /2 +x2/3!
S← S + T H. Jamoussi Elkamel , FSM 46
ASD1 – 2020 – S1
23
Les itérations complètes récurrentes
Série entière
Algorithme suiteEntiere
Variable n : entier
S, T , x : réel
Debut
Ecrire ("donner un entier n :")
Lire(n)
Ecrire ("donner un réel x :")
Lire(x)
si ( n > = 0)
alors S←1
T ←1
pour i de 1 à n faire
T ←T* x/i
S← S + T
Finpour
Ecrire (S)
Finsi
Fin
H. Jamoussi Elkamel , FSM 47
ASD1 – 2020 – S1
24
Les itérations complètes récurrentes
Série entière
Algorithme suiteEntiere
Variable n : entier
S, T , x : réel
Debut
Ecrire ("donner un entier n :")
Lire(n)
Ecrire ("donner un réel x :")
Lire(x)
si ( n > = 1)
alors S←0
T ←1
pour i de 1 à (n+1) faire
S← S + T
T ←T* x/i
Finpour
Ecrire (S)
Finsi
Fin
H. Jamoussi Elkamel , FSM 49
ASD1 – 2020 – S1
x x 2 x3 xi
ex 1 .. ...
1! 2! 3! i!
Spécification
Problème exponentielle
Entrées : ℰ est un réel (la précision)
x est un réel à lire à partir du clavier
précondition : (ℰ > 0)
Sortie : affichage de E = ex l’exponentielle de x à ℰ près
25
La structure itérative à condition d’arrêt
Tant que
2 3 i
Analyse : calculons la somme e x 1 x x x .. x ... (i > 0)
1! 2! 3! i!
Et on s’arrête lorsque |Ti | = | xi/ i!| ≤ ℰ (condition d’arrêt)
S0 0
Si S (i 1) Ti
T0 1
xi x (i 1) x x Les itérations S i T
Ti * T( i 1) *
i! (i 1)! i i
Initialisation 0 0 1
• À une itération i on calcul 1 1 1 x
S← S + T 2 1+x 2 x2 / 2
3 1 + x + x2 /2 3 x3 / (2*3)
i← i + 1
T← T * x/ i
La condition d’arrêt |Ti | = ≤ ℰ risque d’être vérifier de T0
H. Jamoussi Elkamel , FSM 51
ASD1 – 2020 – S1
26
La structure itérative à condition d’arrêt
Série entière généralisation
Soit une fonction, d’images f(x) qui accepte un développement en
série entière dont la somme des i premiers est Si et le terme de rang i
est noté Ti.
Supposons que cette série vérifie les relations de récurrences suivantes
Si Si 1 Ti i0
Ti Ti 1 * g ( x, i )
Exercices
Exercice1
Etant donnée un nombre entier plus grand que 1. tester s’il est parfait.
Un nombre parfait est un entier positif égal à la somme des ses
diviseurs excepte lui-même.
Exemple 6 est parfait 6= 1+2+3
Exercice 2 multiplication égyptienne
Multiplier deux entiers positifs par la multiplication égyptienne.
X*y = x*(y-1) + x si y est impair
X*y = (x*2) * (y/2) si y est pair et y <>0
27