Math@mine / Troisième / Ch16

Chapitre 16 — Algorithmique et programmation

📋 Prérequis & 🎯 Objectifs du chapitre déplier
📋 Prérequis
  • Cycle 4 — Scratch (5e, 4e)
  • Ch. 1-15 — tous les chapitres précédents (à mettre en œuvre)
🎯 Objectifs — à la fin du chapitre, je saurai…
  • Écrire un algorithme en pseudo-code ou Scratch
  • Manipuler variables, boucles (for, while), conditions (if)
  • Modulariser en blocs / fonctions
  • Appliquer à des problèmes : dessin, calcul, simulation

Troisieme — Programme officiel (BO 2020) · Math@mine

Sommaire
1. Notion d’algorithme 2. Variables et affectation 3. Instructions conditionnelles (si/sinon) 4. Boucles (pour et tant que) 5. Fonctions 6. Applications mathematiques Pieges et contre-exemples Bilan — L’essentiel

Un distributeur de monnaie

Un distributeur automatique doit rendre la monnaie en utilisant le minimum de pieces. Pour rendre 2,70 euros, comment procede-t-il ?

Ecrire un algorithme qui, pour un montant donne, calcule le nombre de pieces de 2 euros, 1 euro, 50 centimes, 20 centimes et 10 centimes a rendre.
→ Solution en fin de chapitre.

Al-Khwarizmi et l’origine du mot algorithme

Muhammad ibn Musa al-Khwarizmi (vers 780–850), mathematicien et astronome perse, a travaille a la Maison de la Sagesse a Bagdad. Son nom, latinise en Algoritmi, est a l’origine du mot algorithme.

Dans son traite Al-Kitab al-mukhtasar fi hisab al-jabr wal-muqabala, il a decrit des procedures systematiques (des algorithmes !) pour resoudre des équations. Ces méthodes pas-a-pas, applicables mecaniquement, sont le fondement meme de la programmation moderne.

Bien avant les ordinateurs, les humains executaient des algorithmes : les recettes de cuisine, les méthodes de calcul de la division posee, la construction a la règle et au compas… sont des algorithmes !

Deviner un nombre en un minimum d’etapes

L’ordinateur choisit un nombre entre 1 et 1000. A chaque etape, tu proposes un nombre et l’ordinateur repond « trop grand », « trop petit » ou « gagne ! ».

Combien d’etapes faut-il au maximum pour trouver le nombre a coup sur ?

→ Solution complète en fin de chapitre

1. Notion d’algorithme

Definition — Algorithme
Un algorithme est une suite finie d’instructions precises et non ambigues qui permet de resoudre un problème ou d’effectuer une tache.
Exemples d’algorithmes du quotidien
  • Une recette de cuisine
  • Un itineraire pour aller d’un point A a un point B
  • La méthode de la division posee
  • Les instructions de montage d’un meuble
Propriete — Caracteristiques d’un bon algorithme
  • Precis : chaque instruction est claire et sans ambiguite
  • Fini : il se termine toujours apres un nombre fini d’etapes
  • Effectif : chaque instruction est realisable
  • General : il fonctionne pour toutes les donnees du type prevu
Par definition

Ces caracteristiques decoulent de la definition meme d’un algorithme : une suite d’instructions qui doit etre finie (elle se termine), non ambigue (chaque etape est claire), et efficace (elle resout bien le problème pose). Un algorithme qui ne se termine pas ou qui est ambigu ne remplit pas son role.

Scratch et Python

En 3e, on utilise deux langages pour programmer des algorithmes :

  • Scratch : langage visuel par blocs (drag & drop)
  • Python : langage textuel professionnel, plus puissant

2. Variables et affectation

Definition — Variable
Une variable est un espace memoire designe par un nom, dans lequel on peut stocker une valeur (nombre, texte, etc.). On peut lire sa valeur ou la modifier.
Definition — Affectation
L'affectation consiste a donner une valeur a une variable. En Python, on utilise le signe =.
Exemple en Python
# Affectation de variables
x = 5          # x vaut 5
y = 3          # y vaut 3
somme = x + y  # somme vaut 8
x = x + 1      # x vaut maintenant 6

print(somme)    # Affiche : 8
print(x)       # Affiche : 6
Attention

En Python, = n’est pas une egalite mathematique, c’est une affectation. L’instruction x = x + 1 signifie « prendre la valeur actuelle de x, ajouter 1, et stocker le résultat dans x ». En maths, \(x = x + 1\) n’aurait aucun sens !

Types de variables
  • age = 15 → entier (int)
  • taille = 1.72 → décimal (float)
  • prenom = "Alice" → chaine de caracteres (str)
  • majeur = False → booleen (bool)

3. Instructions conditionnelles (si/sinon)

Definition — Instruction conditionnelle
Une instruction conditionnelle permet d’executer un bloc d’instructions seulement si une condition est verifiee.
Exemple — Structure si/sinon en Python
age = int(input("Quel age as-tu ? "))

if age >= 18:
    print("Tu es majeur.")
else:
    print("Tu es mineur.")
Exemple — Structure si/sinon si/sinon
note = float(input("Note sur 20 : "))

if note >= 16:
    print("Tres bien !")
elif note >= 12:
    print("Bien.")
elif note >= 10:
    print("Assez bien.")
else:
    print("Insuffisant.")
Operateurs de comparaison
OperateurSignificationExemple
==Egal ax == 5
!=Different dex != 0
<Strictement inferieurx < 10
<=Inferieur ou egalx <= 20
>Strictement superieurx > 0
>=Superieur ou egalx >= 18

4. Boucles (pour et tant que)

4.1 Boucle « pour » (for)

Definition — Boucle for
La boucle for repete un bloc d’instructions un nombre de fois connu a l’avance.
Exemple — Afficher les carrés de 1 a 10
for i in range(1, 11):
    print(i, "au carre =", i**2)

# Affiche :
# 1 au carre = 1
# 2 au carre = 4
# ...
# 10 au carre = 100
Remarque — range()

range(a, b) genere les entiers de a a b-1. Donc range(1, 11) donne 1, 2, 3, …, 10.

range(n) genere les entiers de 0 a n-1.

4.2 Boucle « tant que » (while)

Definition — Boucle while
La boucle while repete un bloc d’instructions tant qu’une condition est vraie. Le nombre de repetitions n’est pas forcement connu a l’avance.
Exemple — Trouver la plus petite puissance de 2 superieure a 1000
p = 1
n = 0

while p <= 1000:
    p = p * 2
    n = n + 1

print("2 puissance", n, "=", p)
# Affiche : 2 puissance 10 = 1024
Attention — Boucle infinie

Si la condition du while n’est jamais fausse, le programme tourne indefiniment (boucle infinie). Il faut toujours s’assurer que la condition finira par devenir fausse.

5. Fonctions

Definition — Fonction
Une fonction est un bloc d’instructions reutilisable, qui peut prendre des parametres (entrees) et renvoyer un résultat (sortie).
Exemple — Fonction aire d’un rectangle
def aire_rectangle(longueur, largeur):
    """Calcule l'aire d'un rectangle."""
    return longueur * largeur

# Utilisation :
resultat = aire_rectangle(5, 3)
print(resultat)  # Affiche : 15
Exemple — Fonction avec condition
def est_pair(n):
    """Verifie si un nombre est pair."""
    if n % 2 == 0:
        return True
    else:
        return False

print(est_pair(7))   # False
print(est_pair(12))  # True
Méthode — Creer une fonction
  1. Choisir un nom clair pour la fonction
  2. Definir les parametres (les donnees d’entree)
  3. Ecrire les instructions
  4. Utiliser return pour renvoyer le résultat

6. Applications mathematiques

6.1 Tester si un nombre est premier

Exemple
def est_premier(n):
    """Teste si n est un nombre premier."""
    if n < 2:
        return False
    for d in range(2, int(n**0.5) + 1):
        if n % d == 0:
            return False
    return True

# Afficher les nombres premiers jusqu'a 50
for i in range(2, 51):
    if est_premier(i):
        print(i, end=" ")
# 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47

6.2 Conjecture de Syracuse

Exemple
def syracuse(n):
    """Affiche la suite de Syracuse a partir de n."""
    while n != 1:
        print(n, end=" → ")
        if n % 2 == 0:
            n = n // 2
        else:
            n = 3 * n + 1
    print(1)

syracuse(7)
# 7 → 22 → 11 → 34 → 17 → 52 → 26 → 13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1

6.3 Approximation de \(\pi\) par la méthode de Monte-Carlo

Exemple
import random

def approx_pi(n):
    """Approxime pi par la methode de Monte-Carlo avec n points."""
    dans_cercle = 0
    for i in range(n):
        x = random.random()
        y = random.random()
        if x**2 + y**2 <= 1:
            dans_cercle += 1
    return 4 * dans_cercle / n

print(approx_pi(100000))
# Affiche une valeur proche de 3.14159...
✅ Pour s’entrainer — Liens utiles
Scratch en ligne Programmer visuellement avec Scratch
Python en ligne Programmer en Python directement dans le navigateur
France-IOI Exercices de programmation progressifs (concours Castor, Algorea)

⚠️ Pieges et contre-exemples

Algorithmique et Python : teste d’abord ton intuition, puis lis l’explication.

Score : 0 / 5 evaluations correctes
1 Boucle for

« Une boucle for s’arrete toujours (elle termine). »

Cette affirmation est-elle correcte ?

📖 Explication

Oui ! Une boucle for parcourt un nombre fini d’éléments, donc elle s’arrete toujours.

💡 Astuce : for = nombre d’iterations connu → termine toujours. while = peut boucler indefiniment.
2 while True

« while True ne s’arrete jamais. »

Cette affirmation est-elle correcte ?

📖 Explication

Faux ! while True peut s’arreter grace a l’instruction break.

💡 Astuce : while True + break est un schema courant pour une boucle avec condition d’arret interne.
3 La fonction range

« range(5) genere les entiers de 0 a 5 inclus. »

Cette affirmation est-elle correcte ?

📖 Explication

Faux ! range(5) genere 0, 1, 2, 3, 4. Le 5 est exclu.

💡 Astuce : range(n) = {0, 1, …, n-1} (n éléments). La borne superieure est toujours exclue.
4 Affectation vs egalite

« En Python, i = i + 1 est une équation mathematique. »

Cette interprétation est-elle correcte ?

📖 Explication

Faux ! = est l’operateur d'affectation en Python, pas d’egalite. i = i + 1 signifie « incrementer \(i\) de 1 ».

En maths, \(i = i + 1\) n’a aucune solution. En Python, c’est une instruction valide.

💡 Astuce : Python : = (affectation), == (test d’egalite). Maths : \(=\) (egalite).
5 Division en Python

« En Python, 7 / 2 donne 3 (division entiere). »

Cette affirmation est-elle correcte ?

📖 Explication

Faux ! En Python 3, 7 / 2 donne 3.5. Pour la division entiere : 7 // 2 donne 3.

💡 Astuce : / = division décimale. // = division entiere (quotient). % = reste (modulo).

Bilan — L’essentiel

ConceptPythonDescription
Variablex = 5Stocker une valeur en memoire
Affichageprint(x)Afficher une valeur
Saisieinput("...")Demander une valeur a l’utilisateur
Conditionif / elif / elseExecuter selon une condition
Boucle forfor i in range(n)Repeter n fois
Boucle whilewhile conditionRepeter tant que la condition est vraie
Fonctiondef f(x): return ...Bloc reutilisable avec entrees/sorties
Retenir :
  • Un algorithme est une suite finie d’instructions precises
  • Les variables stockent des donnees, les conditions permettent de faire des choix, les boucles de repeter
  • Les fonctions rendent le code reutilisable et lisible
  • L'indentation (les espaces en début de ligne) est obligatoire en Python
Solution du problème d’ouverture — Un distributeur de monnaie

L’algorithme du distributeur de monnaie (algorithme « glouton ») :

Solution en Python
def rendre_monnaie(montant_cents):
    """Rend la monnaie avec le minimum de pieces."""
    pieces = [200, 100, 50, 20, 10]
    noms = ["2 euros", "1 euro", "50 cents", "20 cents", "10 cents"]
    reste = montant_cents

    for i in range(len(pieces)):
        nb = reste // pieces[i]
        if nb > 0:
            print(nb, "piece(s) de", noms[i])
        reste = reste % pieces[i]

rendre_monnaie(270)
# Affiche :
# 1 piece(s) de 2 euros
# 1 piece(s) de 50 cents
# 1 piece(s) de 20 cents

Pour rendre 2,70 euros : 1 piece de 2 euros + 1 piece de 50 centimes + 1 piece de 20 centimes = 3 pieces.

Solution de l’énigme — Deviner un nombre en un minimum d’etapes

La strategie optimale est la recherche dichotomique : on propose toujours le milieu de l’intervalle restant.

  • Etape 1 : on propose 500 → il reste au plus 500 nombres
  • Etape 2 : on propose 250 ou 750 → il reste au plus 250 nombres
  • Etape 3 → 125, Etape 4 → 63, Etape 5 → 32, Etape 6 → 16, Etape 7 → 8, Etape 8 → 4, Etape 9 → 2, Etape 10 → 1

Il faut au maximum 10 etapes car \(2^{10} = 1024 > 1000\).

En général, pour un nombre entre 1 et \(N\), il faut au plus \(\lceil \log_2(N) \rceil\) etapes.

🎓 Direction le lycée !
Tu as bouclé le cycle 4. L'an prochain, tu démarres le lycée en Seconde (programme BO 2026) avec un socle solide.