Cet atelier peut être réalisé en autonomie comme en atelier avec un enseignant. Il n'y a pas d'obligation d'avoir suivi l'atelier précédent en présentiel pour pouvoir participer à cet atelier en présentiel. # 🛠️ Atelier 3 – Boucles, Sommes, Factorielle & Tableaux ### Question 1 Écrire un algorithme qui demande un nombre de départ, et qui écrit la table de multiplication de ce nombre de 1 à 10. >[!tip] Table de 7 >7 x 1 = 7 >7 x 2 = 14 >7 x 3 = 21 >... >7 x 10 = 70 >[!tip]- Corrigé >```pseudo >// Algorithme TableMultiplication >Programme () >{ > Entier n, i; > Lire(n); > Ecrire("Table de ", n, " :"); > Pour (i ← 1; i <= 10; i++) > { > Ecrire(n, " x ", i, " = ", n * i); > } >} >``` ### Question 2 Écrire une fonction qui prend en paramètre un nombre et qui retourne la somme des entiers de 1 à ce nombre.  Par exemple, si l’on passe en paramètre la valeur 5, la fonction doit retourner : ```pseudo 1 + 2 + 3 + 4 + 5 = 15 ``` Ecrire ensuite un algorithme qui demande un nombre de départ et qui calcule la somme des entiers jusqu'à ce nombre, en utilisant la fonction précédemment écrite. >[!tip]- Corrigé >```pseudo >// Fonction SommeJusqua >Fonction SommeJusqua(n : Entier) : Entier >{ > Entier s, i; > s ← 0; > Pour (i ← 1; i <= n; i++) > { > s ← s + i; > } > Retourner s; >} > >// Algorithme CalculSomme >Programme () >{ > Entier n; > Lire(n); > Ecrire("1 + 2 + ... + ", n, " = ", SommeJusqua(n)); >} >``` ### Question 3 Ecrire une fonction qui prenne en paramètre un nombre et qui retourne sa factorielle. Par exemple, si l’on passe en paramètre la valeur 8, la fonction doit retourner : ```pseudo 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 = 40 320 ``` Ecrire ensuite un algorithme qui demande un nombre de départ et qui calcule la factorielle des entiers jusqu'à ce nombre, en utilisant la fonction précédemment écrite. >[!tip]- Corrigé >```pseudo >// Fonction Factorielle >Fonction Factorielle(n : Entier) : Entier >{ > Entier f, i; > Si n = 0 OU n = 1` > { > Retourner 1; > } > f ← 1; > Pour (i ← 2; i <= n; i++) > { > f ← f * i; > } > Retourner f; >} > >// Algorithme CalculFactorielle >Programme () >{ > Entier n; > Lire(n); > Ecrire("Factorielle de ", n, " = ", Factorielle(n)); >} >``` ### Question 4 Demander successivement des nombres à l’utilisateur et afficher le **plus grand**, puis également sa **position de saisie**. La saisie s’arrête quand l’utilisateur entre `0`. ```pseudo Entrez le nombre numéro 1 : 12 Entrez le nombre numéro 2 : 14 ... Entrez le nombre numéro 20 : 0 Le plus grand de ces nombres est : 14 ``` Modifiez ensuite l’algorithme pour que le programme affiche de surcroît en quelle position avait été saisie ce nombre : ```pseudo C’était le nombre numéro 2 ``` >[!tip]- Corrigé >```pseudo >// Algorithme MaximumEtPosition >Programme () >{ > Entier num, i, maxVal, posMax; > i ← 0; > maxVal ← -2147483648; // sentinelle pour minimum entier > posMax ← 0; > Faire > { > i ← i + 1; > Ecrire("Entrez le nombre numéro ", i, " : "); > Lire(num); > Si num ≠ 0 > { > Si num > maxVal > { > maxVal ← num; > posMax ← i; > } > } > } > TantQue (num ≠ 0); > Si posMax = 0 > { > Ecrire("Aucun nombre saisi (hors zéro)."); > } > Sinon > { > Ecrire("Le plus grand de ces nombres est : ", maxVal); > Ecrire("C’était le nombre numéro ", posMax); > } >} >``` ### Question 5 Écrire la **trace** de l’algorithme suivant. Que produit-il ? ```pseudo // Algorithme mystère Programme () { Entier i, suite[7]; suite[0] ← 1; suite[1] ← 1; i ← 2; TantQue (i < 7) { suite[i] ← suite[i-1] + suite[i-2]; i++; } Pour (i ← 0; i < 7; i++) { Ecrire (suite[i]); } } ``` >[!tip]- Corrigé >**Trace (valeurs de `suite[i]`) :** > | i | 0 | 1 | 2 | 3 | 4 | 5 | 6 | |---------:|---|---|---|---|---|---|----| | suite[i] | 1 | 1 | 2 | 3 | 5 | 8 | 13 | > >**Sortie :** >``` >1 >1 >2 >3 >5 >8 >13 >``` >**Observation :** > Il s’agit des **7 premiers termes** de la suite de Fibonacci avec `suite[0]=suite[1]=1`. ### Question 6 Demander 5 nombres, les stocker dans un tableau et afficher le contenu. >[!tip]- Corrigé > >```pseudo >// Algorithme SaisieTableau1D >Programme () >{ > Entier t[5], i; > Pour (i ← 0; i < 5; i++) > { > Ecrire("Entrez la valeur t[", i, "] : "); > Lire(t[i]); > } > Ecrire("Contenu du tableau :"); > Pour (i ← 0; i < 5; i++) > { > Ecrire("t[", i, "] = ", t[i]); > } >} >``` ### Question 7 Demander des nombres pour remplir un tableau **5 x 5** et afficher le contenu (par lignes). >[!tip]- Corrigé >```pseudo >// Algorithme SaisieTableau2D >Programme () >{ > Entier m[5][5], i, j; > Pour (i ← 0; i < 5; i++) > { > Pour (j ← 0; j < 5; j++) > { > Ecrire("Entrez m[", i, "][", j, "] : "); > Lire(m[i][j]); > } > } > Ecrire("Contenu du tableau 5 x 5 :"); > Pour (i ← 0; i < 5; i++) > { > // affichage d'une ligne > Pour (j ← 0; j < 5; j++) > { > EcrireSansSaut(m[i][j], " "); // variante : écriture sur la même ligne > } > Ecrire(""); // retour à la ligne > } >} >``` ## 🗓️ Historique > **Dernière mise à jour :** `26 octobre 2025` > **Rédigé par :** [[Julien DUQUENNOY]]