📝 Exercice 1 : QCM et Algorithmes (3 points)
Question 1 : QCM
a) Génération de nombre aléatoire :
L'instruction algorithmique permettant de choisir au hasard dans une variable N un entier positif dont le nombre de chiffres est compris entre 3 et 8 est :
- ☐ N ← aléa(3,8)
- ☐ N ← aléa(999, 99999999)
- ☑ N ← aléa(100, 99999999)
b) Extraire l'unité :
L'instruction algorithmique permettant d'obtenir dans une variable U, l'unité de la variable N est :
- ☐ U ← N div 10
- ☑ U ← N mod 10
- ☐ U ← N div 10 mod 10
c) Supprimer l'unité :
L'instruction algorithmique permettant de supprimer de la variable N son chiffre d'unité est :
- ☑ N ← N div 10
- ☐ N ← N mod 10
- ☐ N ← N mod 10 div 10
Question 2 : Algorithme du k-ème chiffre
Écrire une séquence algorithmique permettant de déterminer dans une variable C, le kème chiffre dans N à partir de la droite.
- 1er chiffre à droite : 7
- 2ème chiffre à droite : 8
- 3ème chiffre à droite : 3
- 4ème chiffre à droite : 2 ✓
✅ Solution 1 : QCM et Algorithmes
🔍 Explications des réponses du QCM :
a) Bonne réponse : N ← aléa(100, 99999999)
- Pour avoir un nombre de 3 chiffres minimum : commence à 100
- Pour avoir un nombre de 8 chiffres maximum : termine à 99999999
- aléa(3,8) donnerait seulement un nombre entre 3 et 8 ❌
- aléa(999, 99999999) donnerait un nombre de 3 à 8 chiffres mais commence à 999 ❌
b) Bonne réponse : U ← N mod 10
- Le modulo 10 donne le reste de la division par 10
- Le reste = dernier chiffre (unité)
- Exemple : 452387 mod 10 = 7
c) Bonne réponse : N ← N div 10
- La division entière par 10 supprime le dernier chiffre
- Exemple : 452387 div 10 = 45238
📋 Solution Question 2 : Algorithme du k-ème chiffre
💡 Explication de l'algorithme :
- On répète k fois l'extraction du dernier chiffre
- C ← N mod 10 : On récupère le dernier chiffre
- N ← N div 10 : On supprime le dernier chiffre
- Après k itérations, C contient le k-ème chiffre
📊 Exemple d'exécution (N=452387, k=4) :
| i | N (avant) | C = N mod 10 | N (après div 10) |
|---|---|---|---|
| 1 | 452387 | 7 | 45238 |
| 2 | 45238 | 8 | 4523 |
| 3 | 4523 | 3 | 452 |
| 4 | 452 | 2 ✓ | 45 |
📝 Exercice 2 : Multiplication par additions (3 points)
🎯 Objectif :
Écrire l'algorithme du programme permettant de calculer le produit de deux entiers positifs A et B en utilisant des additions successives.
Principe :
A * B = A + A + A + A + ... + A (B fois)
5 * 7 = 5 + 5 + 5 + 5 + 5 + 5 + 5 = 35
Affichage attendu : 5 * 7 = 35
📋 À compléter :
✅ Solution 2 : Multiplication par additions
📋 Algorithme complet :
📊 Tableau de Déclaration des Objets (TDO) :
| Nom | Type | Nature | Rôle |
|---|---|---|---|
| A | Entier | Variable | Premier nombre (multiplicande) |
| B | Entier | Variable | Deuxième nombre (multiplicateur) |
| S | Entier | Variable | Somme / Résultat de la multiplication |
| i | Entier | Variable | Compteur de boucle |
💡 Explication de l'algorithme :
- On lit les deux nombres A et B
- On initialise la somme S à 0
- On répète B fois : S ← S + A
- On affiche le résultat sous la forme "A * B = S"
📊 Exemple d'exécution (A=5, B=7) :
| i | S (avant) | S ← S + A | S (après) |
|---|---|---|---|
| 1 | 0 | 0 + 5 | 5 |
| 2 | 5 | 5 + 5 | 10 |
| 3 | 10 | 10 + 5 | 15 |
| 4 | 15 | 15 + 5 | 20 |
| 5 | 20 | 20 + 5 | 25 |
| 6 | 25 | 25 + 5 | 30 |
| 7 | 30 | 30 + 5 | 35 |
🐍 Code Python :
📝 Exercice 3 : Analyse d'algorithme (3 points)
Séquence algorithmique donnée :
Questions :
- Exécuter manuellement cette séquence pour N = 12
- En déduire le rôle de cette séquence
- Écrire une séquence algorithmique équivalente donnant le même résultat
Tableau d'exécution à compléter :
| N | 12 | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| i | ||||||||||||
| C | ||||||||||||
✅ Solution 3 : Analyse d'algorithme
1️⃣ Exécution manuelle pour N = 12 :
| N | 12 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| i | Init | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 12 mod i | - | 0 | 0 | 0 | 0 | 2 | 0 | 5 | 4 | 3 | 2 | 1 | 0 |
| C | 12 | 12 | 12 | 12 | 12 | 11 | 11 | 10 | 9 | 8 | 7 | 6 | 6 |
Résultat final : C = 6
🐍 Code Python pour tester :
2️⃣ Rôle de cette séquence :
Cette séquence calcule le nombre de diviseurs de N.
- On commence avec C = N (12)
- Pour chaque i de 1 à N, si i ne divise pas N, on décrémente C
- Les diviseurs de 12 sont : 1, 2, 3, 4, 6, 12 → 6 diviseurs
- C = N - (nombre de non-diviseurs) = nombre de diviseurs
3️⃣ Séquence algorithmique équivalente :
Différence : Au lieu de décrémenter pour chaque non-diviseur, on incrémente pour chaque diviseur.
🐍 Code Python pour tester :
📝 Exercice 4 : Nombres Parfaits (4 points)
🎯 Définition :
Un nombre parfait est un nombre égal à la somme de ses diviseurs propres (diviseurs autres que lui-même).
- 6 est parfait : diviseurs propres = {1, 2, 3} → 1+2+3 = 6 ✓
- 28 est parfait : diviseurs propres = {1, 2, 4, 7, 14} → 1+2+4+7+14 = 28 ✓
- 496 est parfait
- 8128 est parfait
📋 Travail demandé :
Écrire un algorithme qui permet de :
- Saisir un entier strictement positif N
- Vérifier s'il est parfait ou non
- Afficher le résultat
- Pour N = 28 : "28 est un nombre parfait"
- Pour N = 10 : "10 n'est pas un nombre parfait"
✅ Solution 4 : Nombres Parfaits
📋 Algorithme complet :
💡 Explication de l'algorithme :
- On saisit le nombre N
- On initialise la somme à 0
- On parcourt tous les nombres de 1 à N-1 (diviseurs propres)
- Si i divise N, on l'ajoute à la somme
- Si la somme égale N, le nombre est parfait
📊 Exemple d'exécution pour N = 28 :
| i | 28 mod i | Diviseur ? | somme |
|---|---|---|---|
| 1 | 0 | ✓ | 1 |
| 2 | 0 | ✓ | 3 |
| 3 | 1 | ✗ | 3 |
| 4 | 0 | ✓ | 7 |
| 5 | 3 | ✗ | 7 |
| 6 | 4 | ✗ | 7 |
| 7 | 0 | ✓ | 14 |
| ... | ... | ... | ... |
| 14 | 0 | ✓ | 28 |
somme = 28 = N → 28 est un nombre parfait ✓
🐍 Code Python :
📝 Exercice 5 : Programme d'entraînement (7 points)
🎯 Objectif :
Créer un programme d'entraînement aux opérations (addition et multiplication) pour des élèves de première année primaire.
📋 Consignes :
- Générer 20 opérations : 10 additions et 10 multiplications
- Les opérations sont affichées par alternance (addition, multiplication, addition...)
- Tirer au hasard deux nombres X et Y entre 2 et 9
- L'utilisateur saisit sa réponse
- Afficher "Réponse valide" ou "Réponse invalide"
- Compter les bonnes réponses pour chaque type d'opération
- Afficher les scores finaux
Exemple d'exécution :
| N° opération | Opération affichée | Réponse saisie | Message |
|---|---|---|---|
| 1 | 3+5 = ? | 8 | Réponse valide |
| 2 | 4*7 = ? | 18 | Réponse invalide |
| 3 | 2+8 = ? | 10 | Réponse valide |
| 4 | 2*6 = ? | 12 | Réponse valide |
| ... (jusqu'à 20 opérations) | |||
⚠️ Points importants :
- La première opération est une addition
- Alterner : addition (impair), multiplication (pair)
- Nombres aléatoires entre 2 et 9
- Deux scores distincts : score_addition et score_multiplication
✅ Solution 5 : Programme d'entraînement
📋 Algorithme complet :
💡 Explication de l'algorithme :
- Initialiser deux scores à 0 (un pour chaque opération)
- Pour chaque opération de 1 à 20 :
- Générer X et Y entre 2 et 9
- Si i est impair (i mod 2 = 1) → addition
- Si i est pair (i mod 2 = 0) → multiplication
- Vérifier la réponse et incrémenter le score correspondant
- Afficher les deux scores finaux
🔑 Points clés :
- i mod 2 = 1 : opérations 1, 3, 5, ... (additions)
- i mod 2 = 0 : opérations 2, 4, 6, ... (multiplications)
- Deux variables de score distinctes
- Vérification différente selon le type d'opération
🐍 Code Python :
📊 Tableau de Déclaration des Objets (TDO) :
| Nom | Type | Rôle |
|---|---|---|
| score_addition | Entier | Nombre de bonnes réponses en addition |
| score_multiplication | Entier | Nombre de bonnes réponses en multiplication |
| i | Entier | Compteur d'opérations (1 à 20) |
| X, Y | Entier | Nombres aléatoires (2 à 9) |
| rep | Entier | Réponse de l'utilisateur |