Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Module d’ingénierie.
ATELIER DE
PROGRAMMATION 3
TESTS, BOUCLES
ET FONCTIONS
1. Introduction : ................................................................................................ 3
Références : ........................................................................................................ 27
1. INTRODUCTION :
Dans cet atelier, nous allons présenter les outils de base de la
programmation sur Octave. Premièrement, nous allons exposer les
différentes commandes permettant de faciliter l’interaction utilisateur-
machine. Ensuite, nous allons présenter les outils permettant d’écrire et de
manipuler des expressions logiques (booléennes). Par la suite, nous allons
exposer les syntaxes des différentes structures de contrôles (tests,
boucles…) en illustrant par des exemples simples et d’autres plus élaborés.
Ensuite, nous allons expliquer comment créer des fonctions personnalisées
sur Octave. Finalement, nous allons présenter des exemples d’algorithmes
en analyse numérique en donnant des explications sur toutes les étapes de
leur élaboration.
2. INTÉRACTION UTILISATEUR-MACHINE:
Dans cette section nous allons présenter quelques commandes permettant
une interaction entre l’utilisateur et le logiciel. Dans un programme, il est
possible par exemple d’afficher à l’utilisateur un message d’erreur ou de lui
demander de rentrer manuellement la valeur d’une variable.
a) Commande disp :
Contrairement au fait d’écrire seulement le nom de la variable, cette
commande n’affiche que son contenu. Voici un exemple illustrant l’affichage
sans et avec la commande disp :
b) Commande printf :
C’est une commande permettant d’afficher le contenu d’une ou plusieurs
variables de manière plus élaborée. Par exemple, il est possible de spécifier le
nombre de décimales à afficher ou de retourner un nombre sous la notation
scientifique et plus encore. Le premier argument de la commande peut contenir
une chaîne de caractères. Dans chaque emplacement où on veut afficher le
contenu d’une variable, on met le symbole % suivit du format d’affichage de ce
contenu. Les arguments suivants sont les variables que l’on veut placer saisies
dans l’ordre d’affichage. Voici quelques possibilités de formats possibles :
Notons que la commande de la ligne 7 doit être écrite sur la même ligne (le
retour à la ligne a été effectué seulement pour pourvoir faire la capture
d’écran). Le résultat de la commande s’affiche ainsi :
c) Commandes warning et error :
Ces deux commandes permettent d’afficher un message d’avertissement
(ou d’erreur). La différence entre les deux est que error arrête l’exécution du
reste du script. Ce qui n’est pas le cas avec warning. Le message d’erreur peut
être écrit de la même façon que la commande printf en suivant les mêmes
règles. Ceci nous permet d’inclure le contenu des variables en cas de besoin.
Dans l’exemple qui suit, nous avons utilisé les deux commandes dans le même
script :
Remarquons que les deux messages sont terminés par \n(retour à la ligne).
Ceci nous permet d’éviter qu’Octave affiche un autre message d’erreur. La
commande exécutée sera affichée de la façon suivante :
x==y
Teste si x est égale à y.
eq(x,y)
x~=y
Teste si x est différent de y.
ne(x,y)
x<y
Teste si x est inférieur strictement que y.
lt(x,y)
x<=y
Teste si x est inférieur ou égal à y.
le(x,y)
x>y
Teste si x est supérieur strictement que y.
gt(x,y)
x>=y
Teste si x est supérieur ou égal à y.
ge(x,y)
Pour que ces expressions soient logiques, il faut que les variables x et y
soient affectées par une valeur. Sinon, le logiciel ne pourra pas décider si
l’expression est vraie ou fausse. Notons, que deux méthodes sont proposées
pour chaque teste. Le tableau ci-dessous donne les différentes opérations
logiques que nous pouvons effectuer sur des expressions booléennes :
4.1. Test if :
C’est une structure qui permet d’exécuter des instructions seulement si une
ou des conditions sont satisfaites. Le tableau suivant présente les syntaxes
possibles de ce test ainsi que leur traduction :
if condition
Si condition (expr logique) est vraie
instruction 1
alors on exécute le bloc d’instructions
else
1. Sinon on exécute le bloc
instruction 2
d’instructions 2.
endif (ou end)
if condition 1
Si la condition 1 est vraie, on exécute
instruction 1
l’instruction 1, sinon si la condition
elseif condition 2
2 est vraie, on exécute l’instruction
instruction 2
2,…, sinon si la condition n-1 est
⋮
vraie, on exécute l’instruction n-1,
elseif condition n-1
sinon, on exécute l’instruction n.
instruction n-1
else
instruction n
endif (ou end)
Notons que le elseif peut être répété autant de fois que l’on souhaite. Le
test if vérifie les conditions dans l’ordre dans lequel elles sont écrites. Le
dernier bloc d’instructions ne peut s’exécuter que si aucune des conditions
d’avant n’est satisfaite. L’exemple suivant teste si un nombre est positif,
négatif ou nul :
while condition
Tant que la condition (expr-logique) est
instructions
satisfaite, effectuer les instructions.
endwhile
Si valeurs est une vecteur ligne (ou une série), alors i est un scalaire
prenant comme valeurs les éléments successifs du vecteur valeurs. Si
valeurs est une matrice, alors, i est un vecteur prenant comme valeurs les
colonnes successives de la matrice valeurs. L’exemple simple suivant calcule
la somme des nombres pairs entre 1 et 100 en utilisant une boucle for.
Il n’est pas nécessaire d’afficher le résultat de S pour chaque itération. On
utilise le « ; » dans ce cas à la ligne 6. On affichera seulement la valeur du
dernier S calculé qui va donner la somme des éléments. Le résultat donne 2550.
2) Commentaires d’aide :
Cette étape n’est pas obligatoire. Cependant, si une autre personne veut
utiliser la fonction, il devrait avoir des explications sur l’utilisation des
commentaires. Ainsi, après la ligne des déclarations, chaque ligne de
commentaires débute avec un « % ». La première ligne contient le nom
de la fonction suivit de mots clés qui vont permettre de retrouver la
fonction en effectuant une recherche dans l’onglet d’aide ou avec la
commande lookfor mot_clé. On peut ensuite ajouter des lignes de
commentaire pour expliquer le fonctionnement de la fonction. On aura
accès à ces commentaires avec la commande help nom_de_fonction.
4) Corps de la fonction :
Le corps de la fonction est le code permettant de manipuler les variables
d’entrée pour générer les variables de sortie. Le contenu de cette section
dépend des besoins de l’utilisateur. En général c’est à cette étape qu’on
initialise les variables intermédiaires au besoin. Ensuite, on utilise
différentes manipulations nécessaires pour générer les valeurs des
variables de sorties.
5) Fin de la fonction :
Pour fermer la fonction, on utilise généralement return pour retourner
les variables de sortie et on ferme la fonction à l’aide de endfunction
(ou simplement end si on travaille sur Matlab). Cette dernière n’est pas
obligatoire si le fichier « .m » ne contient qu’une seule fonction. Dans ce
cas on va omettre de l’écrire pour que le fichier soit compatible avec
Matlab et Octave.
Le premier exemple est une fonction qui permet de calculer la somme des
entiers entre deux nombres a et b inclusivement. La fonction, nommée somme,
prend comme arguments les entiers a et b et retourne la somme S. La fonction
s’écrit de la manière suivante :
On remarque que pour la variable S4, on a obtenu une erreur puisque l’un
des deux nombres n’est pas entier. Le deuxième exemple montre comment
définir une fonction mathématique en utilisant une fonction .m. Si la fonction
à définir est à une variable, elle prendra une valeur d’entrée comme argument
est une valeur de sortie comme l’image de la valeur d’entrée. Si la fonction est
à plusieurs variables, elle prendra autant d’arguments que de variables et une
seule valeur de sortie. Pour définir la fonction 𝑓(𝑥) = √2𝑥 + 3, nous utilisons la
syntaxe suivante que nous enregistrons dans le fichier « f.m » :
Une fois enregistrée, on peut utiliser la fonction à notre guise. D’autre part,
la fonction à deux variables 𝑓(𝑥, 𝑦) = ln(𝑥 2 + 𝑦 2 + 3𝑥𝑦 − 𝑥 − 𝑦 + 3) est définie
de la manière suivante :
Notons qu’il faut faire attention aux noms des différentes fonctions
élaborées. Les noms doivent être distincts.
6. EXEMPLES DU COURS :
Dans cette section, nous allons montrer les étapes pour écrire deux
algorithmes du cours de méthodes d’analyse de l’ingénieur. Le premier
exemple est l’algorithme du point fixe à une dimension qui est une méthode
itérative. Le deuxième exemple est la factorisation de Cholesky qui permet de
décomposer une matrice symétrique définie positive en produit d’une matrice
et de sa transposée. Le but de cette section est de montrer comment traduire
les algorithmes du cours en langage Octave sous forme de fonction.
Notons qu’il n’était pas nécessaire d’utiliser un indice 𝑗 dans les sommations
du fait que nous avons utilisé des indices en forme de séries avec la commande
sum. Appliquons la fonction à la matrice 𝐴 donnée par :
11 −2 1 3 2
−2 12 −2 1 −1
𝐴= 1 −2 10 2 2
3 1 2 9 0
[2 −1 2 0 8 ]