Programmation Impérative
En cours d'écriture
Ce chapitre n'est pas terminé, attention donc si vous le lisez, il peut y avoir des erreurs !
On a écrit une fonction qui permet de savoir si une fonction est compatible avec une distance au soleil. On aimerait maintenant faire l'inverse, c'est à dire écrire une fonction qui nous donne une distance avec laquelle une station est compatible.
Pour ça, on connaît déjà une méthode, que nous avions trouvé dans le chapitre sur les expressions :
On regarde l'irradiance pour chaque distance à partir de 1 million de kilomètres, en augmentant la distance de 1 million de kilomètre à chaque fois, jusqu'à trouver une irradiance entre les deux valeurs minimale et maximale de la station.
<!-- TODO (prof) ajouter le schema ici -->
Ce qui donne
| Distance (Mkm) | Irradiance (Wm^{-2}$) |
| :------------: | :-------------------: |
| 1 | 30645081,64 |
| 2 | 7661270,41 |
| ... | ... |
| 50 | 12258,03 |
| 51 | 11782,03 |
La méthode décrite ci-dessus comporte un caractère temporel :
augmenter ... à chaque fois, jusqu'à
On voudrait l'automatiser. C'est ce que nous allons voir dans ce chapitre avec la programmation impérative.
Impérative ?
Jusqu'a présent, on a majoritairement utilisé des expressions, composées de valeurs. On peut directement "remplacer" une expression par sa valeur sans changer ce que le programme calcule. On dit qu'elle est pure.
Peut être remplacée par
ou encore par
Les appels aux fonctions que nous avons écrites à l'aide d'expressions pures, ont égalemement cette propriété. On dit que ces fonctions sont pures. Si on définit une fonction f
comme suit :
L'expression :
peut-être remplacée par
ou encore par
Dans une expression pure ou une fonction pure, il n'y a pas d'idée de temps. L'expression représente une valeur, elle est cette valeur.
Python permet, en plus des expression, d'utiliser des instructions. Une instruction est une action que l'ordinateur doit effectuer pour modifier l'état du programme.
Analogie : instruction et état
Une instruction est comme une étape d'une recette. L'état du programme serait alors l'ensemble des ingrédients, préparations, outils etc à un moment donné.
Par exemple.
- On part d'un état le saladier est vide, la farine est dans le bocal
- On execute l'instruction verser la farine dans le saladier
- On arrive dans un état la farine est dans le saladier, le bocal est vide
Les instructions ont donc un aspect temporel il y a un état avant, un état après, et l'état après dépends de l'état d'avant.
On peut donc représenter un programme par une succession d'instruction, appelée séquence, comme une recette de cuisine ! On appelle celà de la programmation impérative.
Remarque
Certains langages excluent volontairement les aspect temporels de la représentation d'un programme. On les appelle les langages déclaratifs, dont les plus connus sont les langages fonctionnels, qui utilisent uniquement des valeurs, des expressions et des fonctions pour représenter un programme.
Ces langages sont on leur lot de désavantages, mais ils ne sont pas moins bien que des langages impératifs, même si on ne les abordera pas dans ce cours.
Etat : les variables
Vulgarisation
La suite de ce chapitre présente des notions sur le fonctionnement d'un ordinateur et d'un programme sous une forme extrêmement simplifiée et imprécise. La réalité est bien plus complexe.
Une instruction permet de changer l'état d'un programme. Mais qu'est-ce que l'état d'un programme ?
Comme les saladiers et les bocaux dans une recette, un ordinateur a également un contenant : la mémoire. La mémoire est un ensemble de petites boîtes vides numérotées, auxquelles on peut donner un nom et une valeur.
Numéro | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | ... |
---|---|---|---|---|---|---|---|---|---|
Nom | ... | ||||||||
Valeur | ... |
Declaration
En Python, on représente les boites par des variables. On met une valeur dans une boîte avec l'instruction d'affectation, qui a la syntaxe suivante :
Quand on exécute l'exemple, Python choisit une boîte, lui donne le nom a
(c'est la déclaration de la variable), et y met la valeur 10.
Numéro | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | ... |
---|---|---|---|---|---|---|---|---|---|
Nom | a | ... | |||||||
Valeur | 10 | ... |
Affectation
Si une boîte avec ce nom existe déjà, sa valeur est remplacée par la nouvelle valeur (c'est l'assignation d'une valeur à la variable).
Par exemple, si on exécute a = 15
, la mémoire sera ainsi :
Numéro | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | ... |
---|---|---|---|---|---|---|---|---|---|
Nom | a | ... | |||||||
Valeur | 15 | ... |
Utilisation
Quand on écrit le nom d'une variable dans une expression, il est remplacé par la valeur de la variable au moment de l'évaluation de l'expression.
Ainsi, si on fait
L'expression
Vaut 20.
Si on essaie d'accéder à une variable non déclarée précédemment, Python génère une erreur.
Séquence
Pour exécuter plusieurs instructions à la suite des autres, on utilise en Python la syntaxe suivante :
Exercice
Après l'execution du code suivant, quelles valeurs contiennent les variables a
, b
et c
?
Faites les étapes une par une !
Dans une instruction comme :
a + 2
est calculée AVANT que la valeur de a
soit écrasée.
Donc après
a
contient la valeur 12.
Executons chaque instruction pas à pas. Chaque ligne du tableau présente l'état des variables après l'instruction.
Instruction | a |
b |
c |
---|---|---|---|
début | |||
a = 10 |
10 | ||
b = 22 |
10 | 22 | |
c = a + b |
10 | 22 | 32 |
a = c - 1 |
31 | 22 | 31 |
c = c + 2 |
31 | 22 | 33 |
On lit la dernière ligne du tableau, et on trouve :
a
vaut 31b
vaut 22c
vaut 33
Affichage en console
On peut écrire des instructions directement dans le fichier Python, elles seront exécutées dans l'ordre.
Si on écrit
Dans la partie fichier de Basthon, et qu'on l'execute ... Rien ne se passe.
En fait, Python execute bien les instructions, mais n'affiche rien.
On peut demander à Python de faire un affichage dans la console en utilisant la fonction print
. C'est une fonction un peu particulière qui ne retourne pas de valeur. Elle s'utilise avec la syntaxe suivante :
Affiche la chaine de caractères chaine
suivie d'un retour à la ligne
Affiche chaque chaine de caractère chaine1
, chaine2
, ... séparées par un espace, et suivies d'un retour à la ligne.
Les valeurs qui ne sont pas des chaînes sont converties en chaîne automatiquement quand c'est possible.
Exercice
Commentaires
Parfois, on va vouloir préciser le code avec des commentaires en langue française.
Un commentaire est une ligne commençant par un #
, qui est ignorée par l'interpréteur.
Il ne faut pas abuser des commentaires. Les commentaires doivent aider la compréhension du code en apportant des informations qui ne peuvent pas être exprimées dans le code. Dans l'exemple ci-dessus, le commentaire précise pour s'assurer d'être entendus, ce qui ne peut être exprimé autrement que par un commentaire..