Niveau : 1SIO, première séance de JavaScript
Environnement : Node.js, exécution en console
Consignes générales :
ex01.js, ex02.js, …).node ex01.js.Dans un terminal :
node --version npm --versionLes deux commandes doivent afficher un numéro de version.
mkdir td-js1 cd td-js1 npm init -yLa commande
npm init -y crée un fichier package.json qui décrit le projet.
En Node.js, la fonction prompt() des navigateurs n'existe pas. On utilise la bibliothèque prompt-sync :
npm install prompt-syncUn dossier
node_modules apparaît : il contient la bibliothèque.
Tout programme qui demande une saisie doit commencer par ces deux lignes :
const prompt = require("prompt-sync")();
Test à réaliser dans un fichier test.js :
const prompt = require("prompt-sync")();
const nom = prompt("Votre prénom ? ");
console.log("Bonjour " + nom);
Lancez-le avec node test.js. Si votre prénom s'affiche, l'environnement est prêt.
Rappel important : prompt() renvoie toujours une chaîne de caractères. Pour obtenir un nombre, on convertit avec Number(texte).
Énoncé
ex01.js, affichez votre prénom avec console.log().prenom (chaîne), age (nombre), ville (chaîne).${} :
Je m'appelle Léa, j'ai 17 ans et j'habite à Lyon.
Résultat attendu : quatre affichages dans le terminal, dont la phrase complète avec vos propres valeurs.
Énoncé
prixBaguette valant 1.2.nbBaguettes valant 3.Total : 3.6 € (le total est calculé, pas écrit à la main).5 à nbBaguettes et affichez de nouveau le total.1.5 à prixBaguette.Questions
const plutôt que let ?
Énoncé
Un article coûte 49,90 € HT. Le taux de TVA est de 20 %.
Prix HT : 49.9 € TVA : 9.98 € Prix TTC : 59.88 €
Défi : affichez les montants arrondis à 2 décimales avec .toFixed(2). Testez avec un prix HT de 19,99 € : que constatez-vous sans .toFixed(2) ?
Énoncé
Pour chaque bloc, écrivez d'abord sur papier ce que vous pensez voir s'afficher. Exécutez ensuite le code et comparez.
Bloc 1 :
let a = 10; let b = a; a = 20; console.log(a, b);
Bloc 2 :
console.log("5" + 3);
console.log("5" - 3);
console.log("5" * "2");
Bloc 3 :
console.log(7 / 2); console.log(7 % 2); console.log(10 % 5);
Bloc 4 :
console.log(5 == "5"); console.log(5 === "5"); console.log(5 !== 6);
Questions
% ? Donnez un cas d'usage (par exemple savoir si un nombre est pair).== et === ?
Rappel : le fichier doit commencer par const prompt = require(“prompt-sync”)();. prompt(“question”) renvoie une chaîne ; Number(texte) la convertit en nombre.
Énoncé
1.75).poids / (taille * taille).Votre IMC est de 22.9 (arrondi à 1 décimale avec .toFixed(1)).Insuffisance pondéraleCorpulence normaleSurpoidsObésitéTests à réaliser : 70 kg / 1,75 m ; 50 kg / 1,80 m ; 95 kg / 1,70 m.
Question : que se passe-t-il si vous oubliez la conversion avec Number() ? Le programme fonctionne-t-il quand même ? Pourquoi ?
Énoncé
Majeur s'il a 18 ans ou plus, Mineur sinon.Senior à partir de 65 ans (utilisez else if).Tests à réaliser : 17, 18, 40, 65, 0.
Défi : si l'utilisateur saisit un texte non numérique (par exemple abc), Number() renvoie NaN. Affichez Saisie invalide dans ce cas (indice : isNaN(valeur)).
Énoncé
Un cinéma applique les tarifs suivants :
| Situation | Tarif |
|---|---|
| Moins de 12 ans | 5 € |
| De 12 à 25 ans inclus | 7 € |
| Plus de 25 ans | 10 € |
| Le mercredi, quel que soit l'âge | 6 € |
lundi, mardi, …).Tarif : 7 €.Tests à réaliser : (10, lundi), (20, lundi), (40, lundi), (10, mercredi), (40, mercredi).
Défi : le tarif « moins de 12 ans » est gratuit s'il est accompagné d'un adulte (question supplémentaire, réponse oui ou non). Utilisez &&.
Fourni : ce code tire un choix aléatoire pour l'ordinateur.
const choix = ["pierre", "feuille", "ciseaux"]; const ordi = choix[Math.floor(Math.random() * 3)];
Énoncé
prompt() (pierre, feuille ou ciseaux).Vous : pierre / Ordinateur : ciseaux.Gagné, Perdu ou Égalité.Règles : pierre bat ciseaux, ciseaux bat feuille, feuille bat pierre.
Contrainte : ne pas écrire 9 cas séparés. Traitez d'abord l'égalité, puis les trois cas où le joueur gagne ; tous les autres cas sont des défaites.
Défi : si la saisie n'est pas l'un des trois mots, affichez Choix invalide.
Énoncé
for, affichez les entiers de 1 à 10, un par ligne.
7 x 1 = 7 7 x 2 = 14 ... 7 x 10 = 70
Défi : affichez la somme des entiers de 1 à 100 (résultat attendu : 5050).
Énoncé
total initialisée à 0.Note 1, Note 2, …), convertissez-les en nombres et ajoutez-les à total.Admis si la moyenne est supérieure ou égale à 10, Refusé sinon.
Test : notes 12, 8, 15, 10, 9 → moyenne 10.80, Admis.
Défi : affichez aussi la meilleure note (utilisez une variable max mise à jour dans la boucle).
Fourni :
const secret = Math.floor(Math.random() * 100) + 1;
Énoncé
essais à 0.secret, demandez une proposition, incrémentez essais et affichez Trop grand ou Trop petit.Bravo ! Trouvé en 7 essais.
Conseil : pour tester, affichez temporairement secret dans la console.
Défi : limitez à 7 essais maximum ; au-delà, affichez Perdu, le nombre était ….
Énoncé
Voici une fonction qui calcule un prix TTC (TVA à 20 %) :
function calculerTTC(prixHT) {
return prixHT * 1.2;
}
console.log(calculerTTC(49.9));taux (par exemple 0.055 pour les produits alimentaires).Question : quel est l'intérêt d'une fonction par rapport à recopier le calcul à chaque fois ?
Énoncé
estMajeur(age) qui renvoie true si age >= 18, false sinon.if pour afficher Accès autorisé ou Accès refusé.estPair(n) qui renvoie true si n est pair.estPair dans une boucle pour afficher uniquement les nombres pairs de 1 à 20.
Jusqu'ici, vos programmes « oublient » tout à la fin de leur exécution. Avec le module fs (inclus dans Node.js, rien à installer), un programme peut écrire et relire des fichiers.
const fs = require("fs");
fs.writeFileSync("test.txt", "Bonjour\n"); // crée ou ÉCRASE le fichier
fs.appendFileSync("test.txt", "Ligne ajoutée\n"); // ajoute à la fin
const contenu = fs.readFileSync("test.txt", "utf8");
console.log(contenu);
console.log(fs.existsSync("test.txt")); // true ou false
Attention
writeFileSync écrase le contenu existant sans prévenir.node, pas à celui du script.fs.existsSync().
Énoncé
Reprenez votre programme du nombre mystère (exercice 11) et ajoutez la mémorisation du meilleur score dans un fichier score.txt.
score.txt existe, lisez-le et affichez : Meilleur score actuel : X essais. Sinon, n'affichez rien.Number().score.txt et affichez Nouveau record ! ;Résultat attendu (deuxième lancement) :
Meilleur score actuel : 7 essais Devinez le nombre entre 1 et 100 : ...
Défi : supprimez score.txt à la main et relancez : le programme ne doit pas planter.
Préparation
Créez un fichier serveur.log avec le contenu suivant (recopiez-le tel quel) :
2026-10-08 08:01:12 INFO Démarrage du serveur 2026-10-08 08:03:45 INFO Connexion de alice 2026-10-08 08:15:02 ERROR Échec de connexion pour bob 2026-10-08 08:15:30 WARNING Disque à 85% 2026-10-08 08:17:11 ERROR Échec de connexion pour bob 2026-10-08 08:20:00 INFO Connexion de carole 2026-10-08 09:02:33 ERROR Timeout base de données 2026-10-08 09:05:10 INFO Sauvegarde terminée
Énoncé
Écrivez un programme ex15.js qui :
serveur.log ;contenu.split(“\n”) ;for ;INFO, celles contenant WARNING et celles contenant ERROR (utilisez ligne.includes(“ERROR”)) ;INFO : 4 WARNING : 1 ERROR : 3
Questions
Défi : écrivez les lignes ERROR dans un nouveau fichier erreurs.log avec fs.appendFileSync dans la boucle.
Énoncé
Écrivez un programme ex16.js qui gère une liste de contacts :
contacts.json existe, chargez-le avec JSON.parse(fs.readFileSync(“contacts.json”, “utf8”)). Sinon, partez d'un tableau vide [].contacts.push({ nom: nom, tel: tel }).fs.writeFileSync(“contacts.json”, JSON.stringify(contacts, null, 2)).Vérification
contacts.json dans un éditeur de texte et observez le format.Question : quelles sont les limites de cette solution par rapport à une base de données (pensez à deux utilisateurs en même temps, à la recherche, à la taille) ?
| Besoin | Syntaxe |
|---|---|
| Lancer un programme | node fichier.js |
| Importer la saisie | const prompt = require(“prompt-sync”)(); |
| Afficher | console.log(valeur) |
| Saisir | prompt(“question”) (renvoie du texte) |
| Convertir en nombre | Number(texte) |
| Arrondir à n décimales | nombre.toFixed(n) |
| Partie entière | Math.floor(x) |
| Nombre aléatoire entre 0 et 1 | Math.random() |
| Condition | if (…) { } else if (…) { } else { } |
| ET / OU / NON | && / || / ! |
| Boucle comptée | for (let i = 1; i ⇐ 10; i++) { } |
| Boucle conditionnelle | while (condition) { } |
| Fonction | function nom(param) { return valeur; } |