Exercices progressifs
Dix exercices progressifs pour consolider les bases de la programmation.
Objectifs
Consolider tout le chapitre en résolvant dix exercices de difficulté croissante. Chacun mobilise une ou deux notions précises ; les trois derniers combinent plusieurs structures.
🔗 Pour vous rafraîchir la mémoire : découper avec des fonctions · tableaux et objets
Méthode de travail
- Un fichier par exercice :
exo-01.js,exo-02.js, etc. - Exécutez avec
node exo-01.jsavant de passer au suivant — un exercice non exécuté n'est pas fait. - Comparez votre sortie à la « sortie attendue » : c'est votre auto-vérification.
- N'ouvrez la correction qu'après avoir testé votre version, même imparfaite.
- Bloqué plus de 15 minutes ? Relisez la leçon liée (indiquée entre parenthèses), puis retentez avant la correction.
Exercices
1. Hello World (variables)
Affichez exactement :
Hello World
Sortie attendue : cette ligne, rien d'autre.
2. Calculatrice (fonctions)
Avec a = 17 et b = 8, affichez leur somme via une fonction addition(x, y) qui retourne le résultat.
25
3. Pair ou impair (conditions, modulo)
Pour nombre = 87, affichez « pair » ou « impair ».
impair
Testez aussi avec 42 et 0 — oui, zéro est un cas intéressant à vérifier.
4. Conversion de température (opérateurs)
Convertissez celsius = 25 en Fahrenheit : fahrenheit = celsius * 9 / 5 + 32. Affichez avec l'unité :
77 °F
Vérifiez avec 0 °C (attendu : 32 °F) et 100 °C (attendu : 212 °F).
5. Moyenne (boucle + accumulateur)
Calculez la moyenne de [12, 15, 8, 17, 10, 14] avec une boucle for...of et un accumulateur — sans méthode toute faite.
12.666666666666666
Contrainte : affichez aussi la moyenne arrondie à 2 décimales via .toFixed(2).
6. Table de multiplication (boucle for)
Table de 7, de ×1 à ×10, chaque ligne complète :
7 × 1 = 7
7 × 2 = 14
...
7 × 10 = 70
7. Deviner un nombre (conditions)
secret = 42, essai = 41 : affichez « trop petit », « trop grand » ou « trouvé ». Testez les trois branches en changeant essai.
trop petit
8. Carnet d'adresses (tableau d'objets)
Trois contacts { name, email } dans un tableau ; affichez chacun sous la forme nom <email> :
Paul <paul@exemple.fr>
Marie <marie@exemple.fr>
Awa <awa@exemple.fr>
Contrainte : boucle for...of, zéro copier-coller des lignes d'affichage.
9. Le plus grand (fonction + boucle + condition)
Écrivez plusGrand(nombres) qui retourne le plus grand élément sans Math.max. Tableau vide → retourner null.
plusGrand([4, 19, 7]); // → 19
plusGrand([-8, -3, -20]); // → -3 ⚠️ testez ce cas !
plusGrand([]); // → null
10. Fusion de courses (objets comme index)
Écrivez fusionner(courses) recevant un tableau d'objets { produit, quantite } et retournant un nouvel objet totalisant les quantités par produit :
fusionner([
{ produit: "pommes", quantite: 2 },
{ produit: "lait", quantite: 1 },
{ produit: "pommes", quantite: 3 },
]);
// → { pommes: 5, lait: 1 }
Contrainte : ni le tableau reçu ni ses éléments ne doivent être modifiés.
Indices (à consulter seulement après un vrai essai)
Exo 2. La fonction calcule et retourne ; l'appel est placé dans un console.log.
Exo 3. nombre % 2 === 0 est le test de parité. Pour 0 : que vaut 0 % 2 ?
Exo 5. Squelette vu en cours : let total = 0; puis total += note dans la boucle, puis division par notes.length.
Exo 6. Template literal : console.log(`7 × ${i} = ${7 * i}`); — attention aux espaces autour du ×.
Exo 8. Chaque itération expose un objet : accédez à ses propriétés par point.
Exo 9. Deux pièges classiques : initialiser le candidat à 0 (faux sur des négatifs !) et oublier le tableau vide. Initialisez au premier élément, et traitez le vide avant la boucle.
Exo 10. Construisez un objet résultat vide, puis pour chaque article : si le produit y existe déjà, additionnez ; sinon, initialisez-le. Accès dynamique par crochets obligatoire.
Correction disponibleCherchez d’abord par vous-même.Voir la correction
Correction
Solutions 1 à 4
// 1
console.log("Hello World");
// 2
function addition(x, y) {
return x + y;
}
console.log(addition(17, 8)); // 25
// 3
const nombre = 87;
if (nombre % 2 === 0) {
console.log("pair");
} else {
console.log("impair");
}
// Avec nombre = 0 : 0 % 2 vaut 0 → "pair". Correct mathématiquement !
// 4
const celsius = 25;
const fahrenheit = celsius * 9 / 5 + 32;
console.log(`${fahrenheit} °F`); // 77 °F
Solutions 5 à 8
// 5
const notes = [12, 15, 8, 17, 10, 14];
let total = 0;
for (const note of notes) {
total += note;
}
const moyenne = total / notes.length;
console.log(moyenne); // 12.666666666666666
console.log(moyenne.toFixed(2)); // "12.67" (texte !)
// 6
for (let i = 1; i <= 10; i++) {
console.log(`7 × ${i} = ${7 * i}`);
}
// 7
const secret = 42;
let essai = 41;
if (essai > secret) console.log("trop grand");
else if (essai < secret) console.log("trop petit");
else console.log("trouvé");
// 8
const contacts = [
{ name: "Paul", email: "paul@exemple.fr" },
{ name: "Marie", email: "marie@exemple.fr" },
{ name: "Awa", email: "awa@exemple.fr" },
];
for (const contact of contacts) {
console.log(`${contact.name} <${contact.email}>`);
}
Détail instructif sur le 5 : .toFixed(2) retourne du texte ("12.67"), pas un nombre — typeof peut le confirmer. C'est un formatage d'affichage, pas un calcul.
Solution 9 expliquée pas à pas
function plusGrand(nombres) {
if (nombres.length === 0) {
return null; // garde-fou AVANT tout calcul
}
let candidat = nombres[0]; // départ au PREMIER élément, jamais à 0
for (let i = 1; i < nombres.length; i++) { // on commence donc à 1
if (nombres[i] > candidat) {
candidat = nombres[i]; // nouveau champion
}
}
return candidat;
}
console.log(plusGrand([4, 19, 7])); // 19
console.log(plusGrand([-8, -3, -20])); // -3
console.log(plusGrand([])); // null
Les deux pièges annoncés, démontrés :
- partir de
candidat = 0donne0sur[-8, -3]— réponse fausse, sans aucune erreur visible ; - oublier le tableau vide fait lire
nombres[0]sur[]→undefined, puis boucler bizarrement.
Le motif général (« candidat initialisé au premier élément, comparaison avec tous les suivants ») resservira au chapitre 5 (algorithmique).