Les instructions répétitives
Introduction
Les structures des commandes décrites dans les chapitres précédents ne donnent pas les moyens de répéter un ensemble d’actions et de commandes (appelé aussi traitement), si l’on excepte l’écriture effective de l’énoncé correspondant autant de fois qu’il faut. En conséquence, des structures de commandes qui autorisent la répétition sont nécessaires et elles ajoutent à MATLAB une nouvelle dimension très importante ; c’est la notion d’instructions répétitives.
On l’utilise souvent quand on doit exécuter le même traitement un certain nombre de fois, nombre qui peut être connu à l’avance ou non. Dans ce dernier cas, l’arrêt de l’itération est déclenché par une condition sur l’état des variables dans le programme.
D’une manière générale, il existe deux façons de répéter le traitement.
-
D’une manière inconditionnelle : le traitement est répété un nombre de fois bien déterminé lorsque l’on aborde la répétition ; ce type de répétition est réalisé par l’instruction for.
-
D’une manière conditionnelle : la poursuite ou l’abandon...
La boucle for
1. Présentation de la boucle for
En algorithmique, la structure répétitive POUR est utilisée pour faciliter la programmation de boucles de comptage. En MATLAB, la boucle for est plus générale et beaucoup plus puissante. C’est une structure répétitive qui itère le même traitement un certain nombre de fois, nombre qui est connu à l’avance. Dans cette forme de boucle, une variable nommée compteur ou variable de contrôle prend des valeurs successives sur une liste. L’arrêt du traitement de la boucle for se réalise lorsqu’on arrive à une valeur n’appartenant pas à la liste.
Cette forme est souvent utilisée pour exploiter les données d’une collection indexée. On en distingue plusieurs formes.
a. La boucle for avec plage de valeurs
Ce premier type de commande for a la structure suivante :
La boucle for avec plage - Syntaxe
for compteur = valeur_initiale :valeur_finale
instructions
end
où :
-
compteur : une variable de type scalaire servant de compteur ou variable de contrôle
-
valeur_initiale : valeur initiale que va prendre compteur
-
valeur_finale : valeur finale que prendra compteur
-
instructions: le traitement à répéter
En accédant à la boucle, le compteur est initialisé à la valeur de départ ; ensuite, à chaque parcours, il est automatiquement affecté à la valeur successive dans son domaine, jusqu’à ce qu’il atteigne la valeur finale.
Une boucle for peut être exécutée 0,1 ou plusieurs fois.
La boucle for avec plage - Exemple n° 1
Écrire un script MATLAB qui permet d’afficher tous les nombres pairs qui existent entre 1 et 10.
% for_avec_plage_1
clear all; close all; clc;
for i = 1 :10
if (mod(i,2) == 0),
fprintf(' %d ',i);
end
end
fprintf(' \n');
Résultat :
2 4 6 8 10
La boucle for avec plage - Exemple n° 2
Écrire un script MATLAB qui lit un entier positif n puis calcule et affiche la somme des n premiers termes de la série suivante :
% for_avec_plage_2 ...
La boucle while
1. Présentation de la boucle while
La boucle while est similaire à la boucle for présentée précédemment : elle permet à un groupe d’instructions d’être exécuté un certain nombre de fois. Mais la répétition est cette fois contrôlée par un prédicat qui exprime la condition de maintien dans la boucle. Ce prédicat est évalué avant chaque exécution du traitement : s’il est faux, la boucle s’arrête.
La structure de la boucle while est la suivante :
La boucle while - Syntaxe
while condition
instructions
end
où :
-
condition : une expression logique ; c’est la condition d’exécution ou de répétition
-
instructions : le traitement à répéter
Dans une boucle while, le traitement associé à la boucle peut ne pas être exécuté, si la condition d’exécution n’est pas vérifiée dès le départ.
Le traitement est exécuté aussi longtemps que la condition d’exécution est vérifiée. Quand la condition de répétition n’est plus vérifiée, on sort de cette boucle.
Il est primordial de bien initialiser les variables de la condition de répétition...
Les commandes break et continue
Comme nous venons de le voir, dans les structures de boucles for ou while, un bloc d’instructions est exécuté un certain nombre de fois, qui peut être connu à l’avance ou non. MATLAB permet une sortie prématurée d’une boucle de contrôle. Il offre deux instructions qui permettent d’interrompre l’exécution de la boucle.
1. La commande break
La commande break met fin à l’exécution d’une boucle for ou while, et sort totalement de la boucle, en ignorant les itérations qui suivent. Les instructions dans la boucle après l’instruction break ne s’exécutent pas. Le programme se poursuit alors séquentiellement à partir de l’instruction qui suit le mot-clé end fermant la boucle.
Commande break - Exemple n° 1
Écrire un script MATLAB qui lit un nombre entier et s’arrête dès qu’il devient supérieur à 100.
% break_1
clear all; close all; clc;
while 1
n = input('Taper un entier ');
if (n >= 100),
break;
end
end
Résultat :
Taper un entier 1
Taper un entier 5
Taper un entier 999
Commande break - Exemple n° 2
Écrire un script MATLAB...
Les boucles imbriquées
Le traitement de la boucle (for, while) peut être une séquence d’instructions simples, un traitement conditionnel ou un autre traitement répétitif ; il est en effet possible qu’une boucle soit complètement à l’intérieur d’une autre boucle. On parle dans ce cas de boucles imbriquées.
Boucles imbriquées - Exemple n° 1
Écrire un script MATLAB qui affiche un triangle isocèle formé d’étoiles de n lignes.
% imbriquee_1
clear all; close all; clc;
disp('== Triangle isocèle ==');
n = input('Donner le nombre de lignes ');
% affichage de triangle
for i = 1 :n
for es = 1 :(n-i)
fprintf(' ');
end
for nc = 1 :(i+i-1)
fprintf('*');
end
for es = 1 :(n-i)
fprintf(' ');
end
fprintf('\n');
end
Résultat :
== Triangle isocèle ==
Donner le nombre de lignes 8
*
*** ...
Les tableaux logiques
Une variable logique ou de type booléen peut prendre une des deux valeurs prédéfinies true ou false. Les tableaux de données logiques sont générés à partir des expressions logiques.
Ces tableaux logiques sont des outils très puissants utilisés en MATLAB. Ils permettent de remplacer un traitement répétitif compliqué. Les exemples suivants expliquent ce principe.
Tableau logique - Exemple n° 1
Soit A une matrice de données 3x3. Écrire un script permettant de créer une matrice logique contenant le résultat du test de parité des éléments de la matrice de données A (vrai si l’élément est pair, faux sinon).
% tableau_logique_1
clear all; close all; clc;
disp('Matrice de données');
A= [1, 2, 3;
4, 5, 6;
7, 8, 9]
disp('Matrice logique');
Al= (mod(A,2) == 0)
Résultat :
Matrice de données
A =
1 2 3
4 5 6
7 8 9
Matrice logique
Al =
0 1 ...