Apprendre les algo – Jour 4
Introduction
Aujourd'hui, nous découvrons deux bases très importantes :
- les boucles
- les tableaux
L'idée est simple :
- une boucle permet de répéter une action
- un tableau permet de stocker plusieurs valeurs dans une seule variable
Nous allons rester volontairement simples.
1. La boucle
Définition
Une boucle est une structure qui permet de refaire plusieurs fois la même instruction.
Elle est utile quand on ne veut pas écrire la même chose encore et encore.
Syntaxe
Exemple en pseudo-code :
Pour i allant de 1 à 5 faire
Écrire i
FinPour
Exemple
Pour i allant de 1 à 3 faire
Écrire "Bonjour"
FinPour
Résultat :
Bonjour
Bonjour
Bonjour
À retenir
Une boucle sert à répéter.
2. La boucle pour
Définition
La boucle pour est utilisée quand on sait combien de fois on veut répéter une action.
Syntaxe
Pour compteur allant de début à fin faire
instruction
FinPour
Exemple
Pour i allant de 1 à 5 faire
Écrire i
FinPour
Résultat :
1
2
3
4
5
3. La boucle tant que
Définition
La boucle tant que est utilisée quand on veut répéter une action tant qu'une condition est vraie.
Syntaxe
TantQue condition faire
instruction
FinTantQue
Exemple
i ← 1
TantQue i <= 3 faire
Écrire i
i ← i + 1
FinTantQue
Résultat :
1
2
3
À retenir
Avec tant que, il faut penser à faire évoluer la variable, sinon la boucle peut tourner sans fin.
4. Le tableau
Définition
Un tableau est une structure qui permet de ranger plusieurs valeurs du même type.
On peut aussi dire, de manière plus formelle, qu'un tableau est une séquence contiguë à longueur explicite.
Cela veut dire simplement deux choses :
- les éléments sont rangés les uns à la suite des autres
- le tableau a une taille connue d'avance
Exemple : une liste de notes, une liste de prénoms, une liste de températures.
Autrement dit, dans un même tableau, on évite de mélanger des choses différentes.
Par exemple :
- un tableau d'entiers contient des nombres entiers
- un tableau de textes contient des mots ou des phrases
En version très simple :
- on ne mélange pas des pommes et des bananes dans le même tableau
- on ne mélange pas des entiers et des chaînes de caractères
Syntaxe
Exemple d'idée en pseudo-code :
notes = [12, 15, 9, 18]
Chaque case du tableau possède une position qu'on appelle souvent indice.
Exemple
notes = [12, 15, 9]
Ici :
notes[0] = 12notes[1] = 15notes[2] = 9
À retenir
Un tableau sert à stocker plusieurs valeurs.
5. Parcourir un tableau
Définition
Parcourir un tableau, c'est lire ses éléments un par un.
Pour cela, on utilise très souvent une boucle.
Syntaxe
taille ← ...
i ← 0
TantQue i < taille faire
Écrire tableau[i]
i ← i + 1
FinTantQue
Exemple
notes = [12, 15, 9]
taille ← 3
i ← 0
TantQue i < taille faire
Écrire notes[i]
i ← i + 1
FinTantQue
Résultat :
12
15
9
À retenir
La boucle et le tableau vont souvent ensemble :
- la boucle répète
- le tableau stocke
6. Exemple très simple
Problème
Afficher tous les nombres d'un tableau.
Solution
nombres = [4, 7, 10]
taille ← 3
i ← 0
TantQue i < taille faire
Écrire nombres[i]
i ← i + 1
FinTantQue
Explication simple
nombres[0]vaut4nombres[1]vaut7nombres[2]vaut10
La boucle permet de lire chaque case sans écrire trois fois Écrire.
7. Les deux schémas à retenir
Dans les exercices sur les tableaux, on retombe très souvent sur deux réflexes :
- soit on veut parcourir
- soit on veut rechercher
Autrement dit, quand vous voyez un exercice sur un tableau, posez-vous d'abord cette question :
- est-ce que je dois lire toutes les cases ?
- ou est-ce que je cherche une valeur précise ?
8. Schéma de parcours
Schéma
Principe du schéma
Le parcours consiste à visiter les cases du tableau une par une, du début jusqu'à la fin.
Ici, on ne cherche pas forcément une valeur précise. On veut surtout traiter tous les éléments.
Quand l'utiliser
On utilise ce schéma quand on veut :
- afficher tous les éléments
- calculer une somme
- compter le nombre d'éléments
- trouver le minimum ou le maximum
Exemple 1
Problème : afficher tous les nombres du tableau.
notes = [12, 15, 9]
taille ← 3
i ← 0
TantQue i < taille faire
Écrire notes[i]
i ← i + 1
FinTantQue
Ici, on lit chaque case. Donc c'est un schéma de parcours.
Exemple 2
Problème : calculer la somme des éléments.
notes = [12, 15, 9]
somme ← 0
i ← 0
taille ← 3
TantQue i < taille faire
somme ← somme + notes[i]
i ← i + 1
FinTantQue
Écrire somme
Ici encore, on passe sur tout le tableau. Donc c'est aussi un schéma de parcours.
9. Schéma de recherche
Schéma
Principe du schéma
La recherche consiste à avancer case par case jusqu'à trouver la valeur cherchée.
À chaque étape :
- on regarde la case actuelle
- on compare avec la valeur cherchée
- si ce n'est pas bon, on continue
- si c'est bon, on s'arrête
Le vrai point important ici, c'est qu'on peut écrire la condition directement dans la boucle.
En pseudo-code, cela donne souvent une forme comme celle-ci :
i ← 0
TantQue i != taille et puis tableau[i] != element faire
i ← i + 1
FinTantQue
Cette écriture est très efficace, parce qu'elle dit en une seule ligne :
- je continue tant que je ne suis pas à la fin
- et tant que je n'ai pas encore trouvé l'élément
Dès qu'une des deux conditions devient fausse, on s'arrête, c'est-à-dire qu'on sort de la boucle.
Le et puis
Le et puis correspond au && dans des langages comme C, C# ou Java.
condition1 et puis condition2
Cela veut dire :
- on teste d'abord condition1
- si condition1 est fausse, on s'arrête
- si condition1 est vraie, alors on teste condition2
Le résultat final reste un ET logique :
- il faut que condition1 soit vraie
- et il faut aussi que condition2 soit vraie
Si une seule des deux est fausse, l'ensemble devient faux.
Petite nuance avec le et simple
Le et simple et le et puis ont la même idée logique : les deux conditions doivent être vraies.
La nuance, c'est la manière d'évaluer :
- avec
et simple, on peut imaginer qu'on regarde les deux côtés - avec
et puis, on regarde d'abord à gauche - si la gauche est fausse, on ne regarde même pas à droite
Cette nuance est très utile quand la partie droite ne doit être testée que si la partie gauche est vraie.
Dans notre schéma de recherche :
i != taille et puis tableau[i] != element
Cela veut dire :
i != taille: on n'est pas encore arrivé à la fin du tableautableau[i] != element: l'élément actuel n'est pas encore celui qu'on cherche
Donc :
- si on arrive à la fin, on arrête
- si on trouve l'élément, on arrête
- et surtout, on évite de lire
tableau[i]quandiest déjà arrivé à la fin
Quand l'utiliser
On utilise ce schéma quand on veut :
- savoir si une valeur existe dans le tableau
- trouver la position d'un élément
- compter combien de fois une valeur apparaît
Exemple 1
Problème : savoir si 15 est présent.
notes = [12, 15, 9]
i ← 0
taille ← 3
TantQue i != taille et puis notes[i] != 15 faire
i ← i + 1
FinTantQue
Si i != taille Alors
Écrire "15 est present"
Sinon
Écrire "15 n'est pas present"
FinSi
Comment lire cette boucle simplement
Prenez un petit cahier et un stylo.
Lisez ce passage lentement, en essayant de visualiser le déplacement de i dans le tableau.
Notez les valeurs une par une sur papier.
Cette habitude est très importante : si vous comprenez vraiment ce mécanisme aujourd'hui, il vous servira toute votre vie en algorithmique.
Au début, cette boucle peut paraître étrange, parce que dans le bloc TantQue, on ne fait presque rien :
i ← i + 1
En réalité, c'est normal. Le but de cette boucle n'est pas de calculer une somme ni d'afficher. Le but est seulement d'avancer dans le tableau jusqu'à trouver la bonne valeur.
Que veut dire i != taille ?
Ici, taille = 3, donc le tableau contient 3 cases :
notes[0]notes[1]notes[2]
Donc :
- si
i = 0, on est sur la première case - si
i = 1, on est sur la deuxième case - si
i = 2, on est sur la troisième case - si
i = 3, on est après la dernière case
Donc i != taille veut simplement dire :
- on n'est pas encore arrivé à la fin du tableau
Pourquoi la boucle sort ?
La boucle continue tant que la partie de gauche reste vraie, puis que la partie de droite reste vraie :
- d'abord, on n'est pas à la fin
- ensuite, on n'a pas encore trouvé
15
La boucle s'arrête, c'est-à-dire sort de la boucle, dans deux cas :
- soit on trouve
15 - soit on arrive à la fin du tableau
Lecture pas à pas
Avec notes = [12, 15, 9] :
- au début,
i = 0 - on regarde
notes[0], donc12 12n'est pas15, donc on avance aveci ← i + 1- maintenant
i = 1 - on regarde
notes[1], donc15 - cette fois, on a trouvé
- la condition de la boucle devient fausse, donc on sort de la boucle
Ici, on cherche une valeur précise. Donc c'est un schéma de recherche.
Exemple 2
Problème : trouver la position du premier 9.
notes = [12, 15, 9, 9]
i ← 0
taille ← 4
TantQue i != taille et puis notes[i] != 9 faire
i ← i + 1
FinTantQue
Si i != taille Alors
position ← i
Sinon
position ← -1
FinSi
Ici aussi, on cherche une valeur. Donc on est dans un schéma de recherche.
10. Le bon réflexe
Avant de résoudre un exercice sur un tableau, demandez-vous toujours :
- Est-ce que je dois parcourir tout le tableau ?
- Ou est-ce que je dois chercher une valeur ?
Si vous avez ce réflexe, beaucoup d'exercices deviennent plus simples à comprendre.
11. Petit exemple en C#
Juste pour faire le lien avec C#, voici un exemple très simple :
int[] notes = { 12, 15, 9 };
int i = 0;
while (i != notes.Length && notes[i] != 15)
{
i++;
}
if (i != notes.Length)
{
Console.WriteLine("15 est present");
}
else
{
Console.WriteLine("15 n'est pas present");
}
Ici :
notes.Lengthreprésente la taille du tableaui++permet d'avancer dans le tableau- la boucle s'arrête si on trouve
15ou si on arrive à la fin
Le principe reste le même dans les autres langages de programmation, comme C, Java ou C++ :
- on lit le tableau case par case
- on avance avec un indice
- on s'arrête quand on trouve l'élément ou quand on arrive à la fin