ajout d'un exemple de procedure
This commit is contained in:
parent
f92c758800
commit
97d5f66bd5
|
@ -0,0 +1,204 @@
|
||||||
|
FIXME
|
||||||
|
======
|
||||||
|
|
||||||
|
Qu'est-ce qu'un programme ?
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
- Un programme est une suite de phrases
|
||||||
|
- Une phrase est une **déclaration** ou une **expression**.
|
||||||
|
- Le signe "égal" est utilisé lorsqu'une une déclaration ou une expression sont équivalentes
|
||||||
|
|
||||||
|
Les déclarations
|
||||||
|
----------------
|
||||||
|
|
||||||
|
Renseigner une variable
|
||||||
|
|
||||||
|
|
||||||
|
- en javascript :
|
||||||
|
|
||||||
|
.. code-block:: javascript
|
||||||
|
|
||||||
|
var b = "blabla" ;
|
||||||
|
|
||||||
|
- en python :
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
b = "blabla"
|
||||||
|
|
||||||
|
- en java :
|
||||||
|
|
||||||
|
.. code-block:: java
|
||||||
|
|
||||||
|
String b = "A";
|
||||||
|
|
||||||
|
- en OCaml :
|
||||||
|
|
||||||
|
.. code-block:: ocaml
|
||||||
|
|
||||||
|
let a = 1
|
||||||
|
|
||||||
|
(**let** : soit `a` la variable... )
|
||||||
|
|
||||||
|
En OCaml comme dans tous les langages fonctionnels, toutes les "variables"
|
||||||
|
(les affectations) sont en fait des **constantes**.
|
||||||
|
|
||||||
|
.. important::
|
||||||
|
|
||||||
|
Par voie de conséquence, le symbole ``=`` est utilisé à la fois pour la définition des objets et pour le test d'égalité.
|
||||||
|
Pour les autres langages, on utilise `==` ou bien `===` (javascript) car
|
||||||
|
le `=` est sémantiquement déjà utilisé...
|
||||||
|
|
||||||
|
Toutes ces notation, apparemment anodines, correspondent donc à des paradigmes de programmation
|
||||||
|
|
||||||
|
Lorsqu'on ne déclare pas les types des symboles déclarés, c'est que soit
|
||||||
|
|
||||||
|
- le typage est faible
|
||||||
|
- le typage est dynamique (calcul du type en fonction du contenu de la
|
||||||
|
variable)
|
||||||
|
- le typage est statique et fort mais ça ne se voit pas
|
||||||
|
(var le système les calcule automatiquement par inférence de type)
|
||||||
|
|
||||||
|
Assigner, allouer, affecter une chose à quelqu'un ou à une autre chose.
|
||||||
|
|
||||||
|
Exemples dans la langue française :
|
||||||
|
|
||||||
|
- Le traitement que le budget **alloue** à ces fonctionnaires.
|
||||||
|
- Un système d'exploitation multitâche alloue le travail du processeur aux processus en attente, pour un bref laps de temps, à leur tour.
|
||||||
|
|
||||||
|
.. glossary::
|
||||||
|
|
||||||
|
|
||||||
|
affectation
|
||||||
|
|
||||||
|
une affectation, aussi appelée assignation par anglicisme, est une structure qui permet d'attribuer une valeur à une variable.
|
||||||
|
|
||||||
|
Il s'agit d'une structure particulièrement courante en programmation impérative, et dispose souvent pour cette raison d'une notation courte et infixée,
|
||||||
|
comme ``x = expr`` ou ``x := expr`` ou encore `x <- expr`.
|
||||||
|
Dans certains langages, le symbole est considéré comme un opérateur d'affectation,
|
||||||
|
et la structure entière peut alors être utilisée comme une expression.
|
||||||
|
D'autres langages considèrent une affectation comme une instruction et ne permettent pas cet usage.
|
||||||
|
|
||||||
|
Voir aussi :
|
||||||
|
|
||||||
|
- Déclarations de types primitifs et conversions de type
|
||||||
|
- Tpes de base::
|
||||||
|
|
||||||
|
Octets (8 bits) byte
|
||||||
|
Entiers courts (16 bits) short
|
||||||
|
Entiers (32 bits) int
|
||||||
|
Entiers longs (64 bits) long
|
||||||
|
Réels (32 bits) float
|
||||||
|
Réels longs (64 bits) double
|
||||||
|
Caractères (16 bits) char
|
||||||
|
Booléens boolean
|
||||||
|
|
||||||
|
- Déclarations par lots::
|
||||||
|
|
||||||
|
x1 = e1, x2 = e2, ... xn = en;
|
||||||
|
|
||||||
|
Les fonctions
|
||||||
|
-------------
|
||||||
|
|
||||||
|
Préliminaire : rappel de théorie de l'information
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Théorie de l'information (Claude Shannon, 1949), théorie de la
|
||||||
|
communication
|
||||||
|
|
||||||
|
canal de transmission::
|
||||||
|
|
||||||
|
entrée -> récepteur -> émetteur -> sortie
|
||||||
|
|
||||||
|
Description d'une procédure
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
- une procédure peut prendre des paramètres
|
||||||
|
- elle modifie l'état courant du système
|
||||||
|
|
||||||
|
- Déclaration des paramètes
|
||||||
|
- Déclaration du corps
|
||||||
|
- Appel
|
||||||
|
|
||||||
|
procedure permuter(a: int, b:int)
|
||||||
|
z: int
|
||||||
|
begin
|
||||||
|
sdfdsfsdfsd
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
effet de bord
|
||||||
|
|
||||||
|
toute modification de la mémoire ou modification d'un support externe
|
||||||
|
|
||||||
|
instruction
|
||||||
|
|
||||||
|
command/phrase en mesure de modifier l'état du programme ou de la machine hôte
|
||||||
|
(allocation mémoire, support externe, disque, écran...)
|
||||||
|
|
||||||
|
Une procédure ne renvoie pas de valeur, mais provoque un 'effet de bord' (écriture dans une globale, dans un flux sortant etc.).
|
||||||
|
|
||||||
|
Une procédure permet de créer une instruction nouvelle qui deviendra une primitive pour le programmeur
|
||||||
|
Cela permet de structurer le texte source du programme et améliorer sa
|
||||||
|
lisibilité. Cela permet aussi d'appeler plusieurs fois, et à plusieurs endroit
|
||||||
|
dans le code, cette primitive.
|
||||||
|
|
||||||
|
.. **FIXME** : exemple avec un goto
|
||||||
|
|
||||||
|
Appel d'une procédure
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
(ex: pseudo-pascal)
|
||||||
|
|
||||||
|
**déclaration de procédure**
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
procedure p(x1, ..., xn);
|
||||||
|
var v1,...,vm;
|
||||||
|
|
||||||
|
- les variables x1,...,xn sont appelées *paramètres formels* de p
|
||||||
|
- les variables v1,...,vm sont appelées *les variables locales* de p
|
||||||
|
|
||||||
|
**appel de procédure**
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
p(e1, ..., en)
|
||||||
|
|
||||||
|
les expressions e1,...,en sont appelées paramètres effectifs de p
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
program syracuse;
|
||||||
|
procedure syracuse(max : integer);
|
||||||
|
var i : integer;
|
||||||
|
procedure length();
|
||||||
|
var v,j : integer;
|
||||||
|
procedure step();
|
||||||
|
begin
|
||||||
|
v := v+1; if j = 2*(j/2) then j := j/2 else j := 3*j+1
|
||||||
|
end;
|
||||||
|
begin
|
||||||
|
v := 0; j := i; while j <> 1 do step(); writeln(v)
|
||||||
|
end;
|
||||||
|
begin
|
||||||
|
i := 1;
|
||||||
|
while i ≤ max do begin length(); i := i+1 end
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin syracuse(100) end.
|
||||||
|
|
||||||
|
|
||||||
|
Le niveau d’une déclaration (de variable ou de procédure) est le nombre
|
||||||
|
de procédures sous lesquelles elle est déclarée. Le programme principal
|
||||||
|
a le niveau 0.
|
||||||
|
|
||||||
|
Description d'une fonction
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Une fonction renvoie une valeur et ne modifie pas l'état courant du programme
|
||||||
|
en cours d'exécution ni ne réalise d'effets de bord. Elle renvoie
|
||||||
|
**toujours** quelque chose (même la valeur ``None`` qui n'est pas rien)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue