Problème : Échanger les valeurs de deux variables A et B.
Utiliser une variable temporaire pour conserver la valeur de A avant de l'écraser.
On veut que la valeur initiale de A devienne la valeur finale de B, et vice-versa.
Si on affecte directement A ← B, on perd la valeur initiale de A.
ALGORITHME EchangerVariables
VARIABLES
A, B, temp : réels
DEBUT
temp ← A
A ← B
B ← temp
FIN
Initial : A = 5, B = 3
temp ← A → temp = 5
A ← B → A = 3
B ← temp → B = 5
Résultat final : A = 3, B = 5
temp ← A
A ← B
B ← temp
• Variable temporaire : Pour conserver la valeur originale
• Séquence : Respecter l'ordre des affectations
• Principe : Sauvegarder, affecter, restaurer
Problème : Calculer les nouvelles valeurs de A et B après A ← A + B.
A = 5, B = 3
A = A + B = 5 + 3 = 8
A = 8 (valeur modifiée)
B = 3 (inchangé)
• La valeur de A est remplacée par la somme de ses valeurs initiales
• La valeur de B n'est pas modifiée
A = 8, B = 3
• Affectation : La variable reçoit une nouvelle valeur
• Expression : A + B est évaluée avant l'affectation
• Effet de bord : La valeur précédente de A est perdue
Problème : Calculer les nouvelles valeurs de X et Y après X ← Y puis Y ← X.
X = 10, Y = 7
X = Y = 7
État intermédiaire : X = 7, Y = 7
Y = X = 7 (X vaut maintenant 7)
État final : X = 7, Y = 7
Cette séquence ne permet pas d'échanger les valeurs, car X est modifié avant d'être copié dans Y.
X = 7, Y = 7
• Séquence : Les affectations s'exécutent dans l'ordre
• Valeur écrasée : X perd sa valeur initiale
• Conséquence : Y reçoit la nouvelle valeur de X, pas l'ancienne
Problème : Échanger les valeurs de A = 8 et B = 12.
A = 8, B = 12
temp ← A // temp = 8
A ← B // A = 12
B ← temp // B = 8
A = 12, B = 8
• La valeur initiale de A (8) est maintenant dans B
• La valeur initiale de B (12) est maintenant dans A
Algorithme :
temp ← A
A ← B
B ← temp
Nouvelles valeurs : A = 12, B = 8
• Échange correct : Utilisation d'une variable temporaire
• Principe : Sauvegarder → Remplacer → Restaurer
• Résultat : Les valeurs sont effectivement échangées
Problème : Réorganiser A = 4 et B = 9 pour que le maximum soit dans A et le minimum dans B.
A = 4, B = 9
Comme A < B, il faut échanger les valeurs
SI A < B ALORS
temp ← A
A ← B
B ← temp
FIN SI
• A < B (4 < 9) est vrai
• temp ← 4, A ← 9, B ← 4
• État final : A = 9, B = 4
SI A < B ALORS
temp ← A
A ← B
B ← temp
FIN SI
Résultat : A = 9, B = 4
• Structure conditionnelle : Échange seulement si nécessaire
• Comparaison : Utilisation de l'opérateur <
• Résultat : A contient le maximum, B le minimum
Problème : Échanger circulairement les valeurs de X = 15, Y = 23, Z = 19.
X = 15, Y = 23, Z = 19
Après l'échange : X devrait contenir la valeur initiale de Y,
Y devrait contenir la valeur initiale de Z,
Z devrait contenir la valeur initiale de X.
temp ← X // Sauvegarder X
X ← Y // X prend la valeur de Y
Y ← Z // Y prend la valeur de Z
Z ← temp // Z prend la valeur initiale de X
• temp ← X → temp = 15
• X ← Y → X = 23
• Y ← Z → Y = 19
• Z ← temp → Z = 15
temp ← X
X ← Y
Y ← Z
Z ← temp
Résultat final : X = 23, Y = 19, Z = 15
• Échange circulaire : Chaque variable reçoit la valeur suivante
• Variable temporaire : Pour conserver la première valeur
• Séquence : Respecter l'ordre pour éviter la perte de données
Problème : Échanger A = 6 et B = 4 sans utiliser de variable temporaire.
A = 6, B = 4
Utiliser des opérations arithmétiques pour stocker temporairement la somme.
A ← A + B // A = 6 + 4 = 10
B ← A - B // B = 10 - 4 = 6 (valeur initiale de A)
A ← A - B // A = 10 - 6 = 4 (valeur initiale de B)
• A ← A + B → A = 6 + 4 = 10
• B ← A - B → B = 10 - 4 = 6
• A ← A - B → A = 10 - 6 = 4
• État final : A = 4, B = 6
A ← A + B
B ← A - B
A ← A - B
Résultat : A = 4, B = 6
• Méthode arithmétique : Utiliser des opérations pour simuler l'échange
• Séquence critique : L'ordre des opérations est essentiel
• Limitation : Peut causer des dépassements de capacité avec de grands nombres
Problème : Calculer les nouvelles valeurs de A = 11 et B = 17 après la séquence : A ← A - B, B ← A + B, A ← B - A.
A = 11, B = 17
A = 11 - 17 = -6
État : A = -6, B = 17
B = (-6) + 17 = 11
État : A = -6, B = 11
A = 11 - (-6) = 11 + 6 = 17
État final : A = 17, B = 11
Cette séquence a échangé les valeurs de A et B sans variable temporaire.
A = 17, B = 11
• Séquence pas à pas : Suivre chaque affectation dans l'ordre
• Valeurs intermédiaires : Prendre en compte les changements successifs
• Résultat : L'algorithme a échangé les valeurs de A et B
Problème : Dupliquer la valeur de X = 25 dans les variables Y et Z.
X = 25, Y = ?, Z = ? (valeurs initiales inconnues)
Après l'algorithme, Y et Z devraient contenir la valeur de X (25).
Y ← X
Z ← X
• Y ← X → Y = 25
• Z ← X → Z = 25
• État final : X = 25, Y = 25, Z = 25
On pourrait aussi faire : Y ← X, Z ← Y (donne le même résultat)
Y ← X
Z ← X
Résultat : X = 25, Y = 25, Z = 25
• Copie simple : Affecter la même valeur à plusieurs variables
• Indépendance : Chaque affectation est indépendante
• Ordre : Peu importe l'ordre des copies dans ce cas
Problème : Inverser l'ordre des valeurs de A = 30, B = 45, C = 60 pour que A = C, B = A, C = B.
A = 30, B = 45, C = 60
Après l'algorithme : A = 60, B = 30, C = 45
Si on fait directement A ← C, on perd la valeur de A.
temp ← A // Sauvegarder A
A ← C // A reçoit la valeur de C
C ← B // C reçoit la valeur de B
B ← temp // B reçoit la valeur initiale de A
• temp ← A → temp = 30
• A ← C → A = 60
• C ← B → C = 45
• B ← temp → B = 30
• État final : A = 60, B = 30, C = 45
temp ← A
A ← C
C ← B
B ← temp
Résultat : A = 60, B = 30, C = 45
• Permutation circulaire : A → C, C → B, B → A
• Variable temporaire : Pour sauvegarder la première valeur
• Séquence critique : Respecter l'ordre pour éviter la perte de données