Apprendre les algo – Jour 2
Introduction
Lors du premier jour (apprendre les algorithmes jour 1), nous avons posé les fondations indispensables pour comprendre l'algorithmique.
Nous avons vu que :
- Un algorithme n'est pas du code, mais une suite d'instructions logiques.
- Un ordinateur ne réfléchit pas : il exécute exactement ce qu'on lui demande.
- Avant d'apprendre un langage de programmation, il faut apprendre à penser correctement le problème.
- Le langage (C, C#, Python, etc.) n'est qu'un outil de traduction de l'algorithme vers la machine.
Nous avons également commencé à faire le lien entre :
- la logique humaine (raisonnement),
- l'algorithmique (pseudo-code),
- et le langage C# (implémentation).
À ce stade, vous savez lire un algorithme simple et comprendre ce qu'il fait.
Programme du jour
Aujourd'hui, nous allons consolider nos bases à travers des exercices pratiques sur :
- Les variables et types de données
- Les structures conditionnelles (if, else, switch) - c'est une nouveauté !
On reste sur papier aujourd'hui : aucune ligne de C#, juste du raisonnement.
Petit rappel du pseudo-code que l'on utilise depuis le Jour 1 :
LEXIQUE
// Déclaration des variables
REALISATION
// Instructions de l'algorithme
Le but est uniquement de s'entraîner à raisonner. On code plus tard.
Rappel : Variable, Type et Valeur
Avant de commencer les exercices, rappelons rapidement les bases :
Une variable = une boîte qui porte un nom et qui peut contenir une valeur.
- Le nom : permet d'identifier la variable (ex:
age,prix,nom) - Le type : définit quel genre de donnée elle peut contenir (entier, décimal, texte, booléen)
- La valeur : c'est le contenu actuel de la variable (ex:
25,19.99,"Paul",vrai)
Exemple :
age : entier ← Le TYPE
age ← 25 ← La VALEUR
Ici, age est une variable de type entier qui contient la valeur 25.
Variable → le contenant
Type → ce qu'on peut y mettre
Valeur → ce qui est dedans actuellement
Exercice 1 : Échanger le contenu de deux variables
Le problème dans la vraie vie
Imaginez que vous avez deux bouteilles devant vous :
- Bouteille A : contient de l'eau
- Bouteille B : contient de l'huile
Objectif : Échanger le contenu des deux bouteilles. À la fin, vous voulez que :
- Bouteille A contienne l'huile
- Bouteille B contienne de l'eau
Question : Comment faire ? Pouvez-vous simplement verser l'eau dans la bouteille d'huile et vice-versa ?
Si vous versez l'eau de la bouteille A dans la bouteille B (qui contient de l'huile), vous allez mélanger les deux liquides. On perd tout !
De même, si vous dites "je vide A dans B, puis B dans A", ça ne marche pas : quand vous videz A dans B, le contenu de A disparaît et se mélange avec B.
La solution naturelle
Pour échanger le contenu de deux bouteilles sans les mélanger, il faut une troisième bouteille vide (appelons-la C) :
- Verser le contenu de A (eau) dans C → C contient maintenant l'eau, A est vide
- Verser le contenu de B (huile) dans A → A contient maintenant l'huile
- Verser le contenu de C (eau) dans B → B contient maintenant l'eau
Résultat : A contient l'huile, B contient l'eau. Mission accomplie !
Maintenant, traduisons cela en algorithme
En algorithmique, les bouteilles sont des variables, et les liquides sont des valeurs.
Problème algorithmique :
- Variable
Acontient la valeur5 - Variable
Bcontient la valeur10 - Objectif : Échanger les valeurs pour que
A = 10etB = 5
Solution avec pseudo-code :
LEXIQUE
A : entier // Première variable
B : entier // Deuxième variable
temp : entier // Variable temporaire (la 3ème bouteille)
REALISATION
A ← 5 // A contient 5
B ← 10 // B contient 10
// Affichage avant échange
Écrire "Avant échange : A =", A, "et B =", B
// Échange des valeurs
temp ← A // On sauvegarde la valeur de A dans temp
A ← B // On met la valeur de B dans A
B ← temp // On met l'ancienne valeur de A (stockée dans temp) dans B
// Affichage après échange
Écrire "Après échange : A =", A, "et B =", B
Trace d'exécution
Suivons l'évolution des variables pas à pas :
| Étape | Instruction | A | B | temp | Commentaire |
|---|---|---|---|---|---|
| 1 | A ← 5 | 5 | ? | ? | A reçoit 5 |
| 2 | B ← 10 | 5 | 10 | ? | B reçoit 10 |
| 3 | temp ← A | 5 | 10 | 5 | temp sauvegarde A |
| 4 | A ← B | 10 | 10 | 5 | A prend la valeur de B |
| 5 | B ← temp | 10 | 5 | 5 | B prend l'ancienne valeur de A |
Résultat final : A = 10 et B = 5. Les valeurs ont bien été échangées !
Pour échanger deux variables, il faut toujours une troisième variable temporaire pour ne pas perdre de valeur.
C'est comme dans la vraie vie : on a besoin d'un contenant intermédiaire pour faire l'échange.
Exercice 2 : L'importance des types
Le problème
Vous voulez calculer le prix total d'un achat avec TVA. Voici les données :
prixHT : réel
tauxTVA : réel
prixTTC : réel
Question : Que se passe-t-il si on se trompe de type ?
Cas 1 : Types corrects
LEXIQUE
prixHT : réel
tauxTVA : réel
prixTTC : réel
REALISATION
prixHT ← 100.0
tauxTVA ← 0.20 // 20% de TVA
prixTTC ← prixHT + (prixHT × tauxTVA)
Écrire "Prix TTC :", prixTTC
Résultat : Prix TTC : 120.0 — Correct !
Cas 2 : Mauvais type (entier au lieu de réel)
LEXIQUE
prixHT : entier // ERREUR : devrait être réel
tauxTVA : entier // ERREUR : devrait être réel
prixTTC : entier
REALISATION
prixHT ← 100
tauxTVA ← 0 // 0.20 devient 0 car c'est un entier !
prixTTC ← prixHT + (prixHT × tauxTVA)
Écrire "Prix TTC :", prixTTC
Résultat : Prix TTC : 100 — La TVA a disparu !
Cas 3 : Confusion de valeurs
LEXIQUE
prixHT : chaîne // ERREUR : c'est du texte, pas un nombre !
tauxTVA : réel
REALISATION
prixHT ← "100" // C'est du texte "100", pas le nombre 100
tauxTVA ← 0.20
prixTTC ← prixHT + (prixHT × tauxTVA) // ERREUR : impossible de multiplier du texte
Résultat : Erreur d'exécution — On ne peut pas calculer avec du texte !
Le type n'est pas un détail.
- Un entier ne peut pas stocker de décimales (0.20 devient 0)
- Une chaîne ne peut pas être utilisée dans des calculs mathématiques
- Utiliser le mauvais type = résultats faux ou erreurs
Règle d'or : Toujours choisir le type adapté à la nature de la donnée.
Les structures de contrôle : décider et agir
Dans la vie réelle, on prend des décisions tous les jours. Une structure de contrôle, c'est simplement un moyen de dire :
- "Si telle condition est vraie, alors je fais ceci. Sinon, je fais cela."
Exemples du quotidien
- Facebook :
- Si tu es connecté, tu vois ton fil d'actualité. Sinon, tu vois la page de connexion.
- Si tu as reçu une nouvelle notification, une pastille rouge s'affiche.
- Feu de circulation :
- Si le feu est vert, tu passes. Sinon, tu t'arrêtes.
- Courses :
- Si tu as assez d'argent, tu achètes le produit. Sinon, tu le reposes.
À quoi ça sert en algorithmique ?
Les structures de contrôle permettent à un algorithme de :
- Prendre des décisions (if, else)
- Répéter des actions (boucles, qu'on verra plus tard)
Sans structure de contrôle, un programme ferait toujours la même chose, sans jamais s'adapter à la situation.
Comment ça marche ?
On pose une question (la condition). Selon la réponse (vrai ou faux), on exécute un bloc d'instructions ou un autre.
Exemple simple :
SI l'utilisateur est connecté ALORS
Afficher le fil d'actualité
SINON
Afficher la page de connexion
C'est la base de toute logique intelligente, que ce soit sur Facebook, dans une application bancaire ou dans un jeu vidéo.
Exercice 1 : Inscription réservée aux majeurs
Énoncé :
On veut écrire un algorithme qui vérifie si une personne peut s'inscrire sur une application. Seules les personnes majeures (18 ans ou plus) peuvent s'inscrire.
Pseudo-code :
LEXIQUE
age : entier
REALISATION
Lire age
SI age >= 18 ALORS
Écrire "Inscription autorisée"
SINON
Écrire "Inscription refusée : vous devez être majeur"
Vous voyez, c'est assez simple :)
Exercice 2 : Calcul des racines d'une équation du second degré
Énoncé :
Écrire un algorithme qui demande à l'utilisateur de saisir les trois coefficients a, b et c d'une équation du second degré (ax² + bx + c = 0), puis calcule et affiche les racines réelles si elles existent.
Pseudo-code :
LEXIQUE
a, b, c : réel
delta : réel
x1, x2 : réel
REALISATION
Lire a, b, c
delta ← b × b - 4 × a × c
SI delta < 0 ALORS
Écrire "Pas de racine réelle"
SINON SI delta = 0 ALORS
x1 ← -b / (2 × a)
Écrire "Une racine réelle :", x1
SINON
x1 ← (-b + racine(delta)) / (2 × a)
x2 ← (-b - racine(delta)) / (2 × a)
Écrire "Deux racines réelles :", x1, "et", x2
Exercice 3 : Afficher trois entiers dans l'ordre croissant
Énoncé :
Écrire un algorithme qui lit trois entiers et les affiche dans l'ordre croissant.
Rappel : Comparaisons et conditions
Quand on compare des valeurs, le résultat est toujours VRAI ou FAUX. Voici la table à retenir :
| Condition | Résultat |
|---|---|
| VRAI et VRAI | VRAI |
| VRAI et FAUX | FAUX |
| FAUX et VRAI | FAUX |
| FAUX et FAUX | FAUX |
| VRAI ou VRAI | VRAI |
| VRAI ou FAUX | VRAI |
| FAUX ou VRAI | VRAI |
| FAUX ou FAUX | FAUX |
Il faut toujours garder cette table en tête pour bien raisonner sur les conditions dans les algorithmes.
Exemple pour retenir :
- "Si le prof est présent ET la salle est disponible, alors on fait cours." (Il faut que les deux soient vrais pour que le cours ait lieu.)
- "Si le prof est présent OU la salle est disponible, alors on fait cours." (Il suffit qu'un seul soit vrai pour que le cours ait lieu.)
Ces phrases aident à bien comprendre comment fonctionnent les conditions ET et OU.
Astuce rapide :
- Dès que vous voyez une condition avec un OU, si une partie est vraie, tout est vrai.
- Dès que vous voyez un ET, il faut que tout soit vrai pour que le résultat soit vrai.
Ok, revenons à notre exercice :
Pour rappel, l'exercice consiste à lire trois entiers et les afficher dans l'ordre croissant.
Réflexion
Avant d'écrire l'algorithme, on se pose deux questions :
- Combien de variables ? Ici, trois entiers à comparer.
- Pourquoi des conditions ? Parce qu'il faut tester plusieurs cas pour savoir qui est le plus petit, le plus grand, etc. Dès qu'il y a des choix à faire, on utilise des conditions.
Pseudo-code :
LEXIQUE
a, b, c : entier // Les trois entiers à trier
min, milieu, max : entier // Variables pour stocker le plus petit, le milieu et le plus grand
REALISATION
Lire a, b, c // Saisie des trois entiers
// On compare et on trie
SI a <= b ET a <= c ALORS // Si a est le plus petit
min ← a
SI b <= c ALORS // Si b est plus petit que c
milieu ← b
max ← c
SINON // Sinon c est plus petit que b
milieu ← c
max ← b
SINON SI b <= a ET b <= c ALORS // Si b est le plus petit
min ← b
SI a <= c ALORS // Si a est plus petit que c
milieu ← a
max ← c
SINON // Sinon c est plus petit que a
milieu ← c
max ← a
SINON // Sinon c est le plus petit
min ← c
SI a <= b ALORS // Si a est plus petit que b
milieu ← a
max ← b
SINON // Sinon b est plus petit que a
milieu ← b
max ← a
Écrire min, milieu, max // Affichage dans l'ordre croissant
Rappel : Un même algorithme peut être écrit de plusieurs façons. Voici une version simplifiée :
LEXIQUE
a, b, c : entier
REALISATION
Lire a, b, c
SI a < b ALORS
SI b < c ALORS
Écrire a
Écrire b
Écrire c
SINON SI a < c ALORS
Écrire a
Écrire c
Écrire b
SINON
Écrire c
Écrire a
Écrire b
SINON
SI a < c ALORS
Écrire b
Écrire a
Écrire c
SINON SI b < c ALORS
Écrire b
Écrire c
Écrire a
SINON
Écrire c
Écrire b
Écrire a
Cette version donne le même résultat, mais la structure des conditions est différente.
Ici, la structure et la logique qu'on a appliquées pour le traitement sont différentes :
- Dans la première version, on cherche explicitement min, max et milieu en comparant chaque valeur.
- Dans cette version simplifiée, on enchaîne les tests pour afficher directement les valeurs dans l'ordre, sans utiliser de variables intermédiaires.
Structure de contrôle SELON ... FAIRE
Dans la famille des structures de contrôle, SELON ... FAIRE est l'équivalent d'un menu d'options : on lit une valeur, puis on exécute exactement une branche correspondant à cette valeur. C'est pratique quand on veut éviter d'enchaîner plusieurs SI ... SINON SI ....
Mode d'emploi :
- On lit la variable à tester (souvent un choix ou un numéro de menu).
- Chaque
CASreprésente une option possible. AUTRE CASsert de filet de sécurité si aucune option ne correspond.
Mini-exercice
Écrire l'algorithme d'un petit menu qui affiche trois messages selon l'option saisie.
LEXIQUE
choix : entier
RÉALISATION
Lire choix
SELON choix FAIRE
CAS 1 :
Écrire "Vous avez choisi l'option 1"
CAS 2 :
Écrire "Vous avez choisi l'option 2"
CAS 3 :
Écrire "Vous avez choisi l'option 3"
AUTRE CAS :
Écrire "Choix invalide"
FIN SELON
À toi d'imaginer des variantes : changer les phrases, ajouter des options, ou remplacer le numéro par une lettre.
Choisir entre SI / SINON et SELON ... FAIRE
Dans la vie de tous les jours, on enchaîne les décisions : si tu as cours, tu vas en amphi, sinon tu restes à la maison. Les programmes font pareil. Pour trancher entre les deux structures :
- Choisis
SI / SINONlorsque les conditions sont variées ou complexes (SI âge >= 18 ET pays = "FR"). - Choisis
SELON ... FAIREsi tu compares une seule variable à plusieurs valeurs possibles (1, 2, 3, lundi, mardi…). C'est plus lisible qu'une cascade deSINON SI.
Illustration : cas parfait pour SI / SINON
Deux tests différents → parfait pour SI imbriqués ou ET/OU.
Illustration : cas parfait pour SELON ... FAIRE
Une seule variable à comparer → SELON distribue vers la bonne option.
Résume-toi juste ceci : SI pour des conditions différentes, SELON pour un menu d'options clair.
Exercice 4 : Trouver un nombre entre 30 et 36
Énoncé (avec contrainte)
Écrire un algorithme qui demande un nombre compris entre 30 et 36, jusqu'à ce que la réponse convienne.
- Si la réponse est supérieure à 36, afficher « Plus petit ! »
- Si la réponse est inférieure à 30, afficher « Plus grand ! »
- Sinon, remercier l'utilisateur.
Contrainte : pour l'instant, nous ne possédons que les variables et les structures conditionnelles. Pas de boucles. On se limite donc à un contrôle unique pour illustrer la logique.
Parlons franchement
Avec nos outils actuels, nous ne pouvons tester qu'une seule réponse à la fois. On lit la valeur, on compare, on affiche un message. Si c'est faux, il faut relancer l'algorithme (ou dupliquer le bloc) manuellement. C'est normal : on n'a pas encore appris à répéter automatiquement un bloc d'instructions.
Retenez l'idée : je lis → je vérifie → je donne un indice. Ce pattern sera la base de nos futures boucles. Mercredi prochain (Jour 3), on introduira justement ces structures répétitives pour que l'ordinateur recommence tout seul jusqu'à obtenir une bonne réponse.
Pseudo-code (avec nos outils actuels)
LEXIQUE
nombre : entier
REALISATION
Écrire "Entrez un nombre entre 30 et 36"
Lire nombre
SI nombre < 30 ALORS
Écrire "Plus grand !"
SINON SI nombre > 36 ALORS
Écrire "Plus petit !"
SINON
Écrire "Merci, la valeur", nombre, "est bien comprise entre 30 et 36."
À retenir
- Ce schéma teste une réponse et affiche le bon message.
- Pour obliger l'utilisateur à retenter automatiquement, il nous manquera encore une structure répétitive.
- Nous verrons ces boucles et d'autres astuces pratiques au Jour 3 (mercredi prochain).