Partie 4 · Algorithmique et programmation · Chapitre 20
Du langage naturel à Python
Traduire un algorithme dans les deux sens.
Les trois derniers chapitres du programme ne demandent pas de nouvelles mathématiques : ils demandent de savoir écrire et lire un programme. Au baccalauréat, l’algorithmique n’est jamais un exercice isolé, elle s’invite dans les autres questions : chercher le rang à partir duquel une suite dépasse un seuil, simuler un échantillon, calculer une intégrale par des rectangles. Ce chapitre pose le vocabulaire, les deux suivants l’exploitent.
Qu’est-ce qu’un algorithme ?
Définition : Algorithme
Un algorithme est une suite finie d’instructions non ambiguës qui, à partir de données, produit un résultat en un nombre fini d’étapes.
Un programme est la traduction d’un algorithme dans un langage compris par la machine. Ici, ce sera Python.
Remarque : trois exigences
- Non ambigu : « prendre un nombre à peu près grand » n’est pas une instruction.
- Fini : l’algorithme doit s’arrêter. Une boucle qui tourne sans fin n’est pas un algorithme.
- Ordonné : les instructions s’exécutent l’une après l’autre, de haut en bas.
Exemple
« Multiplier un nombre par lui-même, puis afficher le résultat » est un algorithme. En Python :
n = 6carre = n * nprint(carre)Ce que le programme affiche
36Les variables et l’affectation
Définition : Variable et affectation
Une variable est un nom qui désigne un emplacement de la mémoire, dans lequel on range une valeur. L’instruction est une affectation : elle range la valeur dans la variable .
Une affectation remplace l’ancienne valeur : celle-ci est définitivement perdue.
Méthode : lire une affectation de droite à gauche
- La machine calcule d’abord le membre de droite, avec les valeurs actuelles des variables.
- Puis elle range ce résultat dans la variable du membre de gauche.
- Le signe ne signifie donc pas « est égal à ». L’instruction n’est pas une équation, c’est un ordre.
Exemple
Suivons ces trois lignes :
n = 7n = n + 3print(n)Ce que le programme affiche
10À la ligne 2, le membre de droite vaut ; c’est cette valeur qui est rangée dans . Le n’existe plus.
Remarque : nommer ses variables
Un nom de variable commence par une lettre, ne contient ni espace ni accent, et distingue les majuscules des minuscules : et sont deux variables différentes. Un nom parlant, comme ou , rend le programme lisible.
Calculer : les opérateurs
Python connaît les opérations usuelles, plus deux opérateurs très utiles en arithmétique.
| Opérateur | Effet | Exemple | Résultat |
|---|---|---|---|
| somme, différence, produit | |||
| quotient décimal | |||
| quotient entier de la division euclidienne | |||
| reste de la division euclidienne | |||
| puissance |
Méthode : l’opérateur reste, à connaître absolument
vaut si est pair et si est impair. Plus généralement, teste si est un multiple de . C’est le test de divisibilité de tous les exercices.
Exemple
print(17 // 5, 17 % 5)print(2 ** 10)print(7 / 2)Ce que le programme affiche
3 2
1024
3.5On retrouve la division euclidienne : . Noter que Python écrit les décimaux avec un point, jamais une virgule.
Communiquer : entrer et afficher
Définition : Les deux instructions d’échange
- affiche une valeur à l’écran.
- demande une valeur à l’utilisateur, et la renvoie toujours sous forme de texte.
Comme renvoie du texte, il faut convertir : pour un entier, pour un décimal.
Exemple
Un programme qui demande un entier et affiche son double :
n = int(input("Entrez un entier : "))print("Le double vaut", 2 * n)Sans le , la variable contiendrait le texte , et afficherait au lieu de : Python répéterait le texte deux fois au lieu de doubler un nombre.
Remarque : au bac, la valeur est le plus souvent donnée
Les sujets écrivent rarement : ils fixent la valeur dans le programme, ou la reçoivent en paramètre d’une fonction, ce que l’on verra au chapitre suivant. Cela rend le programme reproductible, donc corrigible.
Les instructions conditionnelles
Définition : Si… alors… sinon
Une instruction conditionnelle exécute un bloc d’instructions seulement si une condition est vraie. En Python, elle s’écrit avec , éventuellement et :
if condition: instructions exécutées si la condition est vraieelse: instructions exécutées sinonPropriété : Deux règles de syntaxe à ne jamais oublier
- La ligne du se termine par un deux-points.
- Le bloc qui suit est indenté de quatre espaces. En Python, c’est l’indentation, et elle seule, qui délimite les blocs : une ligne non indentée n’appartient plus au .
| Condition | Signification |
|---|---|
| est égal à (double signe égal) | |
| est différent de | |
| et | et |
| et | et |
| , , | et, ou, non |
Exemple
n = 7if n % 2 == 0: print("pair")else: print("impair")Ce que le programme affiche
impairExemple : trois cas avec elif
x = 0if x > 0: print("positif")elif x < 0: print("négatif")else: print("nul")Ce que le programme affiche
nulLes cas sont examinés dans l’ordre et un seul bloc est exécuté : dès qu’une condition est vraie, les suivantes ne sont même pas testées.
Les deux façons de répéter
Répéter des instructions se fait de deux manières, selon que l’on connaît ou non à l’avance le nombre de tours.
Définition : Boucle bornée et boucle non bornée
- La boucle bornée répète un nombre de fois connu à l’avance.
- La boucle non bornée répète tant qu’une condition est vraie, sans savoir combien de tours cela prendra.
Exemple
Compter jusqu’à , une fois avec chaque boucle :
for i in range(4): print(i)Ce que le programme affiche
0
1
2
3i = 0while i <= 3: print(i) i = i + 1Ce que le programme affiche
0
1
2
3Les deux affichent la même chose, mais la seconde exige d’initialiser avant la boucle et de l’incrémenter dedans. Oublier la ligne 4 ferait tourner le programme sans fin.
Méthode : choisir sa boucle
- « Calculer les premiers termes » : le nombre de tours est connu, donc .
- « Chercher le premier rang où la suite dépasse » : on ignore combien de tours il faudra, donc .
Traduire dans les deux sens
Le programme demande de savoir passer du langage naturel à Python et de Python au langage naturel. Voici le dictionnaire à connaître.
| Langage naturel | Python |
|---|---|
| prend la valeur | |
| Demander un entier | |
| Afficher | |
| prend la valeur | |
| Si est pair, alors… sinon… | … |
| Pour allant de à | |
| Tant que |
Exemple : du langage naturel à Python
« prend la valeur . Pour allant de à , ajouter à . Afficher . »
S = 0for k in range(1, 11): S = S + k ** 2print(S)Ce que le programme affiche
385Attention au : parcourt , la borne de droite étant exclue. Ce point est détaillé au chapitre suivant.
Exemple : de Python au langage naturel
u = 1n = 0while u < 100: u = 3 * u n = n + 1print(n)Ce que le programme affiche
5En français : « vaut et vaut . Tant que reste strictement inférieur à , on triple et on compte un tour de plus. On affiche enfin le nombre de tours. » Ce programme cherche donc **le plus petit entier tel que **, et affiche , car et .
Suivre un programme pas à pas
C’est l’exercice le plus fréquent au baccalauréat : on donne un programme, on demande ce qu’il affiche. La seule méthode fiable est le tableau d’exécution, où l’on note la valeur de chaque variable après chaque ligne.
Méthode : construire un tableau d’exécution
- Une colonne par variable, une ligne par instruction exécutée.
- Recopier la valeur d’une variable tant qu’elle ne change pas.
- Pour une boucle, une ligne par tour : ne pas sauter de tour, c’est là que se glissent les erreurs.
- Vérifier la condition d’arrêt avant chaque tour pour un .
Exemple
Que fait ce programme ?
a = 3b = 5a = a + bb = a - ba = a - bprint(a, b)Ce que le programme affiche
5 3| Ligne exécutée | ||
|---|---|---|
Le tableau révèle l’intention du programme : il échange les contenus de et , sans utiliser de troisième variable.
Remarque : l’échange naïf ne marche pas
a = 3b = 5a = bb = aprint(a, b)Ce que le programme affiche
5 5À la ligne 3, la valeur est écrasée : elle n’existe plus nulle part, et la ligne 4 ne peut que recopier . Pour échanger simplement, il faut une variable temporaire : , puis , puis .
Erreurs classiques à éviter
Confondre et .
affecte une valeur, teste une égalité. Un test s’écrit toujours , jamais , qui est une erreur de syntaxe.
Lire comme une équation.
Ce n’est pas une équation, c’est un ordre : « calculer , puis ranger le résultat dans ». Comme équation, elle n’aurait aucune solution.
Oublier le deux-points en fin de ligne.
Toute ligne ouvrant un bloc (, , , , ) se termine par . Sans lui, Python refuse d’exécuter le programme.
Négliger l’indentation.
En Python, l’indentation est la syntaxe : elle seule dit quelles lignes appartiennent au bloc. Décaler une ligne d’un cran change le sens du programme.
Oublier de convertir le résultat de .
renvoie toujours du texte. Sans ou , répète le texte au lieu de doubler un nombre.
Écrire les décimaux avec une virgule.
Python écrit , avec un point. Une virgule sépare deux valeurs distinctes : affiche deux nombres.
Oublier d’incrémenter la variable dans un .
Si aucune instruction du corps ne rapproche de la condition d’arrêt, la boucle tourne indéfiniment. Vérifier systématiquement que quelque chose progresse à chaque tour.
Utiliser une variable avant de l’avoir créée.
Toute variable doit recevoir une valeur avant d’être lue. Un compteur ou une somme se déclarent avant la boucle, par ou .
Et maintenant
Le cours est lu ? Vérifie qu’il est acquis : le QCM repère les trous, les exercices confirment en conditions réelles, les flashcards ancrent les formules.