Cette page fait partie du cours de polytech PeiP1 et 2 Bio
1. Langage algorithmique
1.1. Introduction
Dans cette première partie nous nous intéressons au langage algorithmique qui
va nous permettre d'exprimer ce que nous voulons faire. Nous mettrons en relation
l'algorithmique avec les instructions de Python.
Ce langage utilise :
- des mots clés en français : pour, si, alors, sinon, et, ou ...
- des symboles mathématiques : = , <, >, +, -, *, /
- d'autres symboles : [, ], (, ), ==, !=, &, |, modulo
On fera la distinction entre les opérateurs = et
== :
- l'opérateur d'affectation = permet d'attribuer
une valeur à une variable
- alors que == représente l'opérateur d'égalité
(et != représente la différence)
Les types de base du langage sont les suivants :
- le booléen qui peut prendre deux valeurs : vrai ou faux
- l'entier (ex: -10, 0, 257)
- le réel (ex: 3.14, 1e+6)
- la chaîne de caractères (ex: "hello")
- la liste de valeurs: [1, 2, 3]
- la tableau [10, 10] d'entiers
- le dictionnaire : { "0633676763" : "Jean", "0241567890" : "Paul" }
Les instructions que nous utiliserons sont les suivantes :
- la déclaration de variable
- l'affectation d'une valeur ou d'une expression à une variable
- l'appel de sous-programme
- l'instruction de retour de valeur d'une fonction
- la conditionnelle : si alors sinon
- la boucle pour
- la boucle tant que
1.2. Déclaration de variable
La déclaration d'une variable est réalisée comme suit :
x, y sont des entiers
rayon est un réel = 10.67
l est une liste entiers = [1, 2, 3]
t est un tableau de 10 booléens
m est un tableau de 10 par 10 réels
On voit qu'après la déclaration de la variable il est possible de lui
attribuer une valeur d'initialisation.
Dans notre langage algorithmique, le premier élément d'une liste ou d'un tableau
est à l'indice 1.
En Python, en revanche, le premier élément d'une liste est à l'indice 0 !
1.3. Affectation de variable
Elle consiste a attribuer une valeur à une variable :
- soit sous forme de constante
- soit sous forme d'expression
pi = 3.14
rayon = 10
circonference = 2 * pi * rayon
_2_ou_3 = 2
Le nom des variables obéit à des règles de construction :
- il doit commencer par une lettre ou le caractère '_'
- il est suivit par des lettres ou des chiffres ou le caractère '_'
Ainsi la suite de caractères 2_ou_3 n'est pas un nom de variable car
elle commence par un chiffre, alors que _2_ou_3 et DeuxTrois sont
des noms de variables valides.
1.4. Définition et appel de sous-programme
L'appel de sous-programme consiste à utiliser une fonction en lui passant
éventuellement des paramètres.
Il existe deux types de sous-programmes : les procédures et les fonctions qui
se distinguent par le fait qu'une fonction retourne un résultat alors que ce
n'est pas le cas d'un sous-programme.
// définition de fonction
fonction addition(x, y : entiers) : entier
retourner x + y
fin fonction
// définition de procédure
procédure affiche(nom : chaine)
écrire("bonjour ", nom)
fin procédure
// appel de fonction
variable z est un entier
z = addition(1, 2)
// appel de procédure
affiche("toto")
En Python, on ne distingue pas les fonctions des procédures qui sont toutes
les deux introduites par le mot-clé def.
# definition d'une constante
pi = 3.14
# definition d'une fonction qui calcule la circonference
# d'un cercle connaissant son rayon
def calcule_circonference(rayon):
global pi
circonference = 2 * pi * rayon
return circonference
1.5. Retour de sous-programme
L'instruction retourner (return en Python) permet de sortir d'un
sous-programme :
// le nombre entier 'n' est-il un nombre pair ?
fonction est_pair(n est un entier) : booléen
// si le reste de la division de n par 2 est égal à 0
// alors 'n' est pair
si n modulo 2 == 0 alors
retourner vrai
sinon
retourner faux
fin si
fin fonction
procédure affiche_racine_carrée(n est un entier)
si n < 0 alors
retourner
fin si
écrire( "racine carrée de ", n, " = ", sqrt(n) )
fin procédure
Dans une fonction, elle est suivie d'une expression (qui peut se résumer à
une constante) qui représente la valeur retournée par la fonction.
1.6. La conditionnelle: si alors sinon, sinon si
La conditionnelle si alors est de la forme suivante :
si x < 3 ou x > 7 alors
écrire("la valeur n'est pas dans l'intervalle [3..7]")
fin si
La liste d'instructions sera exécutée uniquement si la condition
est vraie.
Dans d'autres cas, il est nécessaire d'exécuter une autre série
d'instructions si la condition est fausse car les instructions situées
entre alors et sinon
ne seront pas exécutées :
si x < 3 alors
écrire("valeur inférieure à 3")
sinon
écrire("valeur supérieure ou égale à 3")
fin si
Enfin, il existe un dernier cas qui correspond à plusieurs conditions à
vérifier :
si x < 3 alors
écrire("valeur inférieure à 3")
sinon si x > 3 alors
écrire("valeur supérieure à 3")
sinon
écrire("x = 3")
fin si
Voyons à présent comment se traduit la conditionnelle en Python. Il s'agit du
programme instruction_if.py :
# lecture d'une donnée au clavier (chaine)
x = input("saisir un entier")
# convertir en entier
x = int(x)
# cas d'un si alors
if x < 3 or x > 7 :
print("la valeur n'est pas dans l'intervalle [3..7]")
# cas d'un si alors sinon
if x < 3:
print("la valeur est inférieure à 3")
else:
print("la valeur est supérieure à 3")
On note qu'on utilise le symbole : pour marquer la fin de la condition mais
également après le else.
1.7. La boucle pour
Dans les cas des boucles pour on fait varier
une variable entière dans un intervalle. Il ne sera pas nécessaire de déclarer
la variable de boucle i puisqu'elle est temporaire et que l'on sait
qu'il s'agit d'un entier :
// somme des entiers de 1 à 10
somme est un entier = 0
pour i de 1 à 10 faire
somme = somme + i
fin pour
// somme des entiers impairs de 1 à 10
somme = 0
pour i de 1 à 10 par pas de 2 faire
somme = somme + i
fin pour
En Python on obtient (instruction_for.py) :
# somme des entiers de 1 à 10
sum = 0
for i in range(1,11):
sum = sum + i
print("sum=", sum)
# somme des entiers impairs de 1 à 10
sum = 0
for i in range(1,11,2):
sum = sum + i
print("sum=", sum)
On notera l'utilisation de la fonction (itérateur) range(a,b,c=1) qui permet
d'énumérer des valeurs entre $a$ et $b-1$ par pas de $c$.
1.8. La boucle tant que
Dans les cas des boucles tant que on exécute les
instructions de la boucle tant que la condition est vraie :
somme est un entier
i est un entier
// somme des entiers de 1 à 10
somme = 0
i = 1
tant que i <= 10 faire
somme = somme + i
i = i + 1
fin tant que
// somme des entiers impairs entre 1 à 10
somme = 0
i = 1
tant que i <= 10 faire
somme = somme + i
i = i + 2
fin tant que
En Python on obtient (instruction_while.py) :
# somme des entiers de 1 à 10
sum = 0
i = 1
while i <= 10:
sum = sum + i
i = i + 1
# somme des entiers impairs de 1 à 10
sum = 0
i = 1
while i <= 10:
sum = sum + i
i = i + 2
1.8.1. Autres instructions
Nous utiliserons les instructions :
- écrire(...) qui en Python se traduit par print(...)
- x = lire("votre nom ?") qui en Python se traduit par input(...)
1.9. Exercices
Exercice 1.1
Que fait l'algorithme suivant ?
i est un entier
p est un entier = 1
pour i de 1 à 10 faire
p = p * i
fin pour
Exercice 1.2
Que fait l'algorithme suivant ? On rappelle que le modulo donne le reste de la division entière.
s est une chaine = ""
s1 est une chaine = "*"
s2 est une chaine = "-"
i est un entier = 6
tant que i > 0 faire
si i modulo 2 == 0 alors
s = s + s1
sinon
s = s + s2
fin si
i = i - 1
fin tant que
Exercice 1.3
Que fait l'algorithme suivant ?
fonction f(n : entier) : booleén
si n <= 1 alors
retourner faux
fin si
nb_div = 0
pour i de 1 à n faire
si n modulo i == 0 alors
nb_div = nb_div + 1
fin si
fin pour
si nb_div == 2 alors
retourner vrai
sinon
retourner faux
fin si
fin fonction
Exercice 1.4
Que fait l'algorithme suivant ?
fonction f(s : chaine) : entier
pour i de 1 à longueur(s) faire
si s[i] == '.' alors
retourner i
fin si
fin pour
retourner -1
fin fonction
Exercice 1.5
Que fait l'algorithme suivant ?
fonction g(tab : tableau entiers) : booléen
pour i de 2 à longueur(tableau) faire
si tab[i-1] > tab[i] alors
retourner faux
fin si
fin pour
retourner vrai
fin fonction