Aller au contenu principal

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é !
Pas de panique !

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.

À retenir

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 ?

Le piège !

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) :

  1. Verser le contenu de A (eau) dans C → C contient maintenant l'eau, A est vide
  2. Verser le contenu de B (huile) dans A → A contient maintenant l'huile
  3. 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 A contient la valeur 5
  • Variable B contient la valeur 10
  • Objectif : Échanger les valeurs pour que A = 10 et B = 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 :

ÉtapeInstructionABtempCommentaire
1A ← 55??A reçoit 5
2B ← 10510?B reçoit 10
3temp ← A5105temp sauvegarde A
4A ← B10105A prend la valeur de B
5B ← temp1055B prend l'ancienne valeur de A

Résultat final : A = 10 et B = 5. Les valeurs ont bien été échangées !

Le principe clé

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 !

Ce qu'il faut retenir

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 :

ConditionRésultat
VRAI et VRAIVRAI
VRAI et FAUXFAUX
FAUX et VRAIFAUX
FAUX et FAUXFAUX
VRAI ou VRAIVRAI
VRAI ou FAUXVRAI
FAUX ou VRAIVRAI
FAUX ou FAUXFAUX

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 CAS représente une option possible.
  • AUTRE CAS sert 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 / SINON lorsque les conditions sont variées ou complexes (SI âge >= 18 ET pays = "FR").
  • Choisis SELON ... FAIRE si tu compares une seule variable à plusieurs valeurs possibles (1, 2, 3, lundi, mardi…). C'est plus lisible qu'une cascade de SINON SI.

Illustration : cas parfait pour SI / SINON

Âge ≥ 18 ?Pays = "FR" ?Accès autoriséAccès refuséETVRAIFAUX

Deux tests différents → parfait pour SI imbriqués ou ET/OU.

Illustration : cas parfait pour SELON ... FAIRE

choix ?CAS 1CAS 2CAS 3

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).