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 2 – Tests et Aléatoire
### Question 1
Écrire un algorithme qui demande un nombre à l’utilisateur, et l’informe ensuite si ce nombre est positif, négatif, ou nul.
>[!tip]- Corrigé algorigramme
>```mermaid
>flowchart TD
> D([Début]) --> Liren[\Lire n\] --> SiPos{n > 0}
> SiPos -- Vrai --> EcrirePositif[\Ecrire "Le nombre est positif"\] --> F([Fin])
> SiPos -- Faux --> SiNeg{n < 0}
> SiNeg -- Vrais --> EcrireNégatif[\Ecrire "Le nombre est négatif"\] --> F([Fin])
> SiNeg -- Faux --> EcrireNul[\Ecrire "Le nombre est nul"\] --> F([Fin])
> ```
>[!tip]- Corrigé
>```pseudo
>// Algorithme PositifNegatifNul
>Programme ()
>{
> Reel n;
> Lire(n);
> Si n > 0
> {
> Ecrire("Le nombre est positif");
> }
> Sinon
> {
> Si n < 0
> {
> Ecrire("Le nombre est négatif");
> }
> Sinon
> {
> Ecrire("Le nombre est nul");
> }
> }
>}
>```
### Question 2
Écrire un algorithme qui demande deux nombres à l’utilisateur et l’informe ensuite si le produit est positif, négatif, ou nul.
>[tip] Attention
>On ne doit **pas calculer** le produit !
>[!tip]- Corrigé algorigramme
>```mermaid
>graph TD
> D(Début) --> Lirea[\Lire a\] --> Lireb[\Lire b\] --> Si0{Au moins l'un des deux est nul}
> Si0 -- Vrai --> EcrireNul[\"Le produit est nul"\] --> F([Fin])
> Si0 -- Faux --> SiPos{"a ET b ont tous deux le même signe"}
> SiPos -- Vrai --> EcrirePositif[\Ecrire "Le nombre est positif"\] --> F([Fin])
> SiPos -- Faux --> EcrireNégatif[\Ecrire "Le nombre est négatif"\] --> F([Fin])
>```
>[!tip]- Corrigé
>```pseudo
>// Algorithme SigneProduit
>Programme ()
>{
> Reel a, b;
> Lire(a);
> Lire(b);
> Si a = 0 OU b = 0
> {
> Ecrire("Le produit est nul");
> }
> Sinon
> {
> Si (a > 0 ET b > 0) OU (a < 0 ET b < 0)
> {
> Ecrire("Le produit est positif");
> }
> Sinon
> {
> Ecrire("Le produit est négatif");
> }
> }
>}
>```
### Question 3
Écrire un algorithme qui demande l’âge d’un enfant à l’utilisateur et qu'il l’informe ensuite de sa catégorie :
- "Moustique" de 7 à 8 ans
- "Poussin" de 9 à 10 ans
- "Benjamin" de 11 à 12 ans
- "Minime" de 13 à 14
- "Cadet" à partir de 15 ans
>[!tip]- Corrigé algorigramme
>```mermaid
>graph TD
> D(Début) --> Lirea[\Lire age\] --> SiMoustique{7 <= age <= 8}
> SiMoustique -- Vrai --> EcrireMoustique[\"Moustique"\] --> F([Fin])
> SiMoustique -- Faux --> SiPoussin{9 <= age <= 10}
> SiPoussin -- Vrai --> EcrirePoussine[\"Poussin"\] --> F([Fin])
> SiPoussin -- Faux --> SiBenjamin{11 <= age <= 12}
> SiBenjamin -- Vrai --> EcrireBenjamine[\"Benjamin"\] --> F([Fin])
> SiBenjamin -- Faux --> SiMinime{13 <= age <= 14}
> SiMinime -- Vrai --> EcrireMinime[\"Minime"\] --> F([Fin])
> SiMinime -- Faux --> SiCadet{age >= 15}
> SiCadet -- Vrai --> EcrireCadete[\"Cadet"\] --> F([Fin])
> SiCadet -- Faux --> EcrirePositif[\Ecrire "Trop jeune pour une catégorie"\] --> F([Fin])
>```
>[!tip]- Corrigé
>```pseudo
>// Algorithme CategorieAge
>Programme ()
>{
> Entier age;
> Lire(age);
> Si age >= 7 ET age <= 8
> {
> Ecrire("Moustique");
> }
> Sinon
> {
> Si age >= 9 ET age <= 10
> {
> Ecrire("Poussin");
> }
> Sinon
> {
> Si age >= 11 ET age <= 12
> {
> Ecrire("Benjamin");
> }
> Sinon
> {
> Si age >= 13 ET age <= 14
> {
> Ecrire("Minime");
> }
> Sinon
> {
> Si age >= 15
> {
> Ecrire("Cadet");
> }
> Sinon
> {
> Ecrire("Trop jeune pour une catégorie");
> }
> }
> }
> }
> }
>}
>```
### Question 4
Écrire un algorithme qui devra prédire l'avenir, de façon infaillible ! Il lira au clavier l’heure, les minutes, et les secondes, et il affichera l’heure qu’il sera une seconde plus tard. Par exemple, si l'utilisateur tape 21 puis 32 puis 8, l'algorithme doit répondre :
"Dans une seconde, il sera 21 heure(s), 32 minute(s) et 9 seconde(s)".
>[!tip] Remarque
>On suppose que l'utilisateur entre une heure valide. Pas besoin donc de la vérifier.
>[!tip]- Corrigé algorigramme
>```mermaid
>graph TD
> D(Début) --> Lireh[\Lire h\] --> Lirem[\Lire m\] --> Lires[\Lire s\] --> S[s ← s + 1] --> SiS60
>
> SiS60 & SiM60 & SiH24 -- Faux --> EcrireHeure
>
> SiS60{s = 60} -- Vrai --> S0[s ← 0] --> M1[m ← m + 1] --> SiM60
>
> SiM60{m = 60} -- Vrai --> M0[m ← 0] --> H[h ← h + 1] --> SiH24
>
> SiH24{h = 24} -- Vrai --> H0[h ← 0] --> EcrireHeure
>
> EcrireHeure[\Ecrire "Dans une seconde, il sera ", h, " heures, ", m, " minutes et ", s, " secondes"\] --> F([Fin])
>
>```
>[!tip]- Corrigé
>```pseudo
>// Algorithme HeurePlusUneSeconde
>Programme ()
>{
> Entier h, m, s;
> Lire(h);
> Lire(m);
> Lire(s);
> s ← s + 1;
> Si s = 60
> {
> s ← 0;
> m ← m + 1;
> Si m = 60
> {
> m ← 0;
> h ← h + 1;
> Si h = 24
> {
> h ← 0;
> }
> }
> }
> Ecrire("Dans une seconde, il sera ", h, " heure(s), ", m, " minute(s) et ", s, " seconde(s)");
>}
>```
### Question 5
Un magasin de reprographie facture selon le barème suivant :
- 0,10 € les 10 premières copies
- 0,09 € les 20 suivantes
- 0,08 € au-delà
Ecrire une fonction qui prenne en paramètre un nombre de photocopies et qui retourne le prix correspondant, et un algorithme qui demande à l'utilisateur le nombre de photocopies effectuées, et qui affiche la facture correspondante en se servant de la fonction précédemment écrite.
>[!tip]- Corrigé algorigramme
>```mermaid
>graph TD
>
> D([Début]) --> LireNb[\Lire nb\] --> PrixSubroutine[["p ← Prix(nb)"]]
> PrixSubroutine --> EcrirePrix[\Ecrire "Le prix est de ", p, " €"\] --> F([Fin])
>
> subgraph "Prix(n : Entier)"
> DP([Début]) --> SiN10{n <= 10} -- Vrai --> T10[total ← n * 0.10]
> SiN10 -- Faux --> SiN30
> SiN30{n <= 30}
> SiN30 -- Faux --> T30F["total ← 10 * 0.10 + 20 * 0.09 + (n - 30) * 0.08"]
> SiN30 -- Vrai --> T30V["total ← 10 * 0.10 + (n - 10) * 0.09"]
> T10 & T30V & T30F --> FP([Fin])
> end
> ```
>[!tip]- Corrigé
>```pseudo
>// Fonction Prix
>Fonction Prix(n : Entier) : Reel
>{
> Reel total;
> Si n <= 10
> {
> total ← n * 0.10;
> }
> Sinon
> {
> Si n <= 30
> {
> total ← 10 * 0.10 + (n - 10) * 0.09;
> }
> Sinon
> {
> total ← 10 * 0.10 + 20 * 0.09 + (n - 30) * 0.08;
> }
> }
> Retourner total;
>}
>
>// Algorithme FactureCopies
>Programme ()
>{
> Entier nb;
> Lire(nb);
> Ecrire("Le prix est de ", Prix(nb), " €");
>}
>```
### Question 6
Écrire une fonction qui retourne un nombre entier aléatoire compris entre deux entiers passés en paramètres.
>[!tip] Indications
Pour écrire la fonction, il faut utiliser la fonction aleatoire() qui retourne un entier compris entre 0 et 32767. Pour obtenir un nombre compris entre a et b (inclus), il faut écrire
>```pseudo
>a + aleatoire()%(b-a+1)
>```
Ecrire ensuite un algorithme qui demande à l'utilisateur les deux bornes et qui affiche un nombre aléatoire compris entre ces bornes, grâce à la fonction précédemment écrite.
>[!tip]- Corrigé
>```pseudo
>// Fonction NombreAleatoire
>Fonction NombreAleatoire(a : Entier, b : Entier) : Entier
>{
> Retourner a + aleatoire() % (b - a + 1);
>}
>
>// Algorithme Tirage
>Programme ()
>{
> Entier min, max;
> Lire(min);
> Lire(max);
> Ecrire("Nombre aléatoire généré : ", NombreAleatoire(min, max));
>}
>```
## 🗓️ Historique
> **Dernière mise à jour :** `26 octobre 2025`
> **Rédigé par :** [[Julien DUQUENNOY]]