SCILAB
1e PARTIE
ARCHITECTURE DES SYSTÈMES INFORMATIQUES
Un système informatique (SI) est composé de
- une unité centrale (UC) composée de
- un microprocesseur qui exécute des instructions et effectue des
calculs;
- une unité de commande qui envoie des instructions au
microprocesseur, et
- une horloge qui règle le début de l'exécution des instructions.
- une mémoire volatile et non volatile qui est capable
d'enregistrer et de restituer des informations. On distingue
- ROM : Read Only Memory;
- RAM : Random Acces Memory;
- Mémoire cache, et
- Mémoire des unités de sauvegarde (disques, cd, dvd, ...).
La taille d'une mémoire est mesurée par le nombre d'octets
qu'elle peut contenir. (1Ko = 1024 octets, 1Mo = 1024 Ko, 1Go =
1024 Mo).
- des périphériques d'entrée et de sortie;
- des moyens de transfert de l'information, et
- des opérateurs humains.
Cet ensemble forme un tout et il est capable de traiter
l'information.
CODAGE DES INFORMATIONS
L'alphabet des différents composants d'un SI, sauf pour les
opérateurs humains, sont les deux chiffres : 0 et 1. Donc toute
information, de et vers l'ordinateur, doit être codée par
des mots
qui sont une succession des 0 et des 1. Ces mots constituent le langage machine.
Il est évident qu'un opérateur humain peut très
difficilement traiter des informations en langage machine. Nous
avons donc développé des médiateurs entre le langage
machine et notre langue qui sont les langages informatiques.
Ainsi la chaîne de traitement de l'information par un ordinateur
est la suivante :
Souhaits d'un opérateur humain exprimés en
langue courante
PROGRAMMATION
Traduction par le programmeur des souhaits en
langage informatique
COMPILATION / INTERPRéTATION
Traduction par le compilateur en langage machine
SYSTÈME D'EXPLOITATION
Un ordinateur pour fonctionner a besoin d'exécuter des
programmes qui lui sont propres.
L'ensemble de ces programmes qui, en outre, assurent l'interface
entre
l'ordinateur et les opérateurs humains est appelé système d'exploitation.
Actuellement il y en principalement deux : Linux et Windows.
SCILAB
Scilab est un logiciel de calcul scientifique qui intégre :
- un langage de programmation;
- des outils de mise au point, et
- des bibliothèques.
Il est open source et multi-platformes. Sa syntaxe est beaucoup
plus facile à apprendre que celle d'autres langages
informatiques.
Son seul inconvénient est qu'il est inteprété, donc
l'exécution des programmes est lente.
VARIABLES
En maths une variable x est une convention de notation qui
signifie que, lors d'un traitement mathématique, x est
susceptible de prendre plusieurs valeurs, par opposition à une
constante, par exemple p, qui elle ne prend qu'une valeur.
En informatique le terme variable est utilisé pour indiquer une
association entre un nom, le nom de la variable - par exemple
x - et une valeur, la valeur de la variable - par exemple
10. Cette valeur peut se modifier pendant l'exécution
du programme et on retrouve ainsi la variable au sens
mathématique du terme. Il est possible aussi que la valeur
reste constante - ou mieux, elle doit rester constante - tout au
long de l'exécution du programme et on retrouve ainsi la notion
de la constante en mathématiques.
On vient de voir que la variable en informatique est l'association
entre un nom et une valeur. En langage informatique le nom
désigne en réalité une adresse mémoire dans laquelle
sera stockée la valeur de la variable. Cette association entre
nom de variable et adresse mémoire sera établie lors de la
compilation du programme.
En conclusion, une variable permet l'assignation d'une valeur à
cette variable et le stockage de cette valeur à l'adresse
mémoire associée de façon univoque avec le nom de la
variable.
VALEURS D'UNE VARIABLE
L'affectation d'une valeur à une variable se fait en utilisant
le signe de l'égalité :
nomVar = 10
Cette instruction indique que la variable nomVar est
égale à 10. En même temps elle indique que la
cellule mémoire correspondant à l'adresse associée à
nomVar aura la valeur 10.
Si nous avons une autre variable
nomVar1 = 20
alors nous pouvons tester si leur contenu est identique par
l'intermédiaire de l'instruction
nomVar1 == nomVar2
Attention de ne pas utiliser dans ce cas l'instruction
nomVar1 = nomVar2
qui aurait eu comme résultat d'assigner à nomVar1
la valeur de nomVar2. Il faut aussi comprendre que pour ce
dernier cas nomVar1 vaut maintenant 20 mais cette
assignation n'affecte pas les adresse mémoire. Ainsi les deux
variables pointent toujours à des adresses mémoire
différentes.
PROBLÈMES DE L'ASSIGNATION D'UNE VARIABLE PAR UNE AUTRE VARIABLE
Cette possibilité qui est offerte par presque tous les langages
de programmation, à savoir la possibilité d'assigner par nom
la valeur d'une variable à une autre variable peut poser, lors
de l'écriture des programmes, de problèmes de lisibilité
et de validité du code.
Soit l'instruction
nomVar1 = nomVar2
Pour que cette instruction fonctionne correctement, il faut que nomVar2 soit initialisée à une valeur avant son utilisation
par l'instruction précédente.
Nous pouvons aussi avoir une sur-assignation par l'intermédiaire
de l'instruction :
nomVar nomVar + 10
qui est une instruction assez troublante car la même variable se
trouve à gauche et à droite de la relation d'affectation. Ici il faut comprendre qu'à la fin de l'instruction
nomVar a comme valeur son anciene valeur augmentée de
10. Bien entendu noVar doit être
initialisée avant son utilisation.
TYPES DES VALEURS
Les valeurs d'une variable peuvent, entre autres, être
- numériques
- entières : x=5;
- réelles : x = 5.6;
- complexes : x = 5+%i*2;
- alphanumériques : x = ËISTI".
Notons que Scilab ne nécessite pas le typage des variables,
c'est-à-dire une déclaration préalable à leur
utilisation qui indique le type (entier, réel, ..) de la
variable.
VALEURS COMPLEXES
Avec Fortran, Scilab permet l'utilisation des variables complexes
directement. Ainsi
x = 5+%i*2
représente la valeur complexe 5+2i.
On peut récupérer la partie réelle de x par
l'instruction
real(x)
et la partie imaginaire par
imag(x)
Nous pouvons faire de la façon habituelle toutes les
opérations arithmétiques avec les nombres complexes.
TABLEAUX
Une variable peut être associée à une valeur, mais aussi
à un ensemble de valeurs, par exemple à une matrice. Dès
qu'une variable contient plus d'une valeur, on parle de variable
indicée ou tableau, c'est-à-dire d'une variable munie
d'indices qui nous permettent
de distinguer e.g. la première valeur de la deuxième. Ainsi a(1) indique le premier élément du tableau a et a(2) le deuxième.
Nous pouvons avoir des tableaux à plusieurs dimensions. Par
exemple en deux dimensions a(2,5) indique l'élément
qui se trouve à la deuxième ligne et la cinquème
colonne.
L'initialisation d'un tableau se fait par l'instruction
tableau = []
où [] indique un tableau vide.
Par contre l'instruction
tableau = [1,2,3,4]
indique un vecteur ligne de dimension 1×4.
Pour un tableau à deux dimensions on a
tableau = [1,2;3,4]
Notons que Scilab ne nécessite pas le typage des tableaux,
c'est-à-dire une déclaration préalable à leur
utilisation qui indique le type (entier, réel, ..) des valeurs
d'un tableau, ni ses dimensions. Nous pouvons ainsi dans un tableau
mélanger des variables de n'importe quel type.
STRUCTURES DE COMMANDE
Un programme est composé d'une suite d'instructions, entrecoupé
par des commentaires. En ignorant les commentaires, nous pouvons
dire que les instructions se distinguent en :
- instructions de communication (entrées - sorties) avec les
périphériques;
- instructions de test, et
- instructions de calcul
Les instructions de test donnent lieu à ce qu'on appelle structures de commande conditionnelles, car le(s)résultat(s) du
(des) test(s) commande(nt) la manière dont l'exécution du
programme sera poursuivie.
Dans les instructions de calcul il est possible d'avoir des parties
contiguës qui doivent s'exécuter plusieurs fois de façon répétitive. Nous avons ainsi des structures de commande répétitives.
Nous allons commencer par ces derniers.
STRUCTURE RÉPÉTITIVE
Supposons que nous voulons créer un tableau a de 1
à 10 tel que a(i) = i où i =1,2,...,10. On
peut envisager de faire le programme :
a(1) = 1;
a(2) =2;
...
a(9) = 9;
a(10) = 10;
Nous pouvons aussi utiliser une structure répétitive
d'instructions comme suit :
for i = 1 : 10 [do]
a(i) = i;
end;
Les mots en gras sont des mots reservés du langage Scilab. (Réservés signifie que nous n'avons pas le choix de les utiliser d'une autre façon que celle-ci.) Le mot entre crochets est optionnel.
En traduisant ce bloc répétitif on
pour i de 1 à 10 [faire]
a(i) = i;
finFaire;
STRUCTURE REPETITIVE AVEC PAS
Si on veut créer un tableau de 10 éléments avec
a(i) = 11-i on peut écrire le bloc répétitif
for i = 10 : -1 : 1 [do]
a(11-i) = i;
end;
qui peut se traduire comme suit
pour i de 10 à 1 avec pas = -1 [faire]
a(10-i) = i;
finFaire;
Mettre dans un tableau les 10 nombres impairs 1,3,...,19.
POINTS À SURVEILLER POUR UNE STRUCTURE RÉPÉTITIVE
- Faire attention de ne pas avoir des indices de boucle égaux à
0 ou négatifs. Si ces indices sont utilisés pour indicer des
tableaux, une erreur se produira.
- Faire attention de ne pas changer dans la boucle la valeur de
l'indice. Voici un mauvais exemple
s=2;
for i = 2:4
i = s-1;
d(i)= i;
end;
STRUCTURES DE COMMANDE CONDITIONNELLES
Nous avons trois types de structures de commande conditionnelles
De ces trois structures de commande on étudiera les deux
premières.
STRUCTURE DE COMMANDE AVEC TEST
Il s'agit de l'utilisation du test if seul ou en
association avec elseif et/ou else. Nous donnons
dans la suite l'utilisation de if.
- si simple
if a > b then
s = a-b;
end;
qu'on peut traduire
si a > b alors
s = a-b;
finSi;
- si avec sinon
if a > b & b <> 0 then
s = a/b;
else
s = b/a;
end;
qu'on peut traduire par
si a > b & b <> 0 alors
s = a/b;
sinon
s = b/a;
finSi;
- si avec sinonSi
if a > b & b <> 0 then
s = a/b;
elseif a <> 0 & b <> 0
s = b/a;
end;
qu'on peut traduire par
si a > b & b <> 0 alors
s = a/b;
sinonSi a <> 0 & b <> 0
s = b/a;
finSi;
- si avec sinonSi et sinon
if a > b & b <> 0
then
s = a/b;
elseif a > 0 & b <> 0
s = b/a;
else
s = b-a;
end;
qu'on peut traduire par
si a > b & b <> 0alors
s = a/b;
sinonSi a > 0 & b <> 0
s = b/a;
sinon
s = b-a;
finSi;
Il est à noter que nous pouvons enchaîner plusieurs elseif à la suite les uns des autres, mais il ne peut
y avoir qu'un seul else. On peut dire que
else joue le rôle de l'instruction par
défaut : quand aucune condition
n'est satisfaite, on exécute l'instruction qui suit else. Pour le voir, exécuter la dernière structure avec
a=-4 et b=6.
STRUCTURE DE COMMANDE AVEC BOUCLE
Il s'agit d'une structure répétitive avec le test
d'arrêt sous forme explicite. On reprend l'exemple de la
structure répétitive et on a :
i = 1;
while i < 10
a(i) = i;
i = i+1;
end;
que nous pouvons traduire par
i = 1;
tantQue i < 10
a(i) = i;
i = i+1;
finTantQue;
Mettre dans un tableau les 10 nombres impairs 1,3,...,19 en
utilisant la boucle while.
POINTS À SURVEILLER POUR UNE STRUCTURE RÉPÉTITIVE
- Il faut avoir initialiser au préalable la variable qui
est utilisée pour le test while.
- Il faut penser à modifier la vaaleur de cette même variable
si nous voulons sortir dea boucle.
- Il faut essayer de ne pas se tromper lors de l'écriture du test
de while.
Pour toute ces raisons on doit préférer, au moins au
début,
d'utiliser la boucle for à la place de while.
File translated from
TEX
by
TTH,
version 3.76.
On 25 Sep 2006, 23:11.