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]]