Ceci est une ancienne révision du document !
TD JavaScript n°1 : Variables, saisie, conditions, boucles
Niveau : 1SIO, première séance de JavaScript
Environnement : Node.js, exécution en console
Consignes générales :
- Chaque exercice est écrit dans son propre fichier (
ex01.js,ex02.js, …). - Un programme s'exécute avec :
node ex01.js. - Testez systématiquement avec plusieurs valeurs.
- Quand un message d'erreur apparaît, lisez-le : il indique le fichier, la ligne et la nature du problème.
- Les parties Défi sont facultatives.
Préparation de l'environnement
Vérifier Node.js
Dans un terminal :
node --version npm --versionLes deux commandes doivent afficher un numéro de version.
Créer le dossier du TD
mkdir td-js1 cd td-js1 npm init -yLa commande
npm init -y crée un fichier package.json qui décrit le projet.
Installer la bibliothèque de saisie
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.
Utiliser 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).
Partie A : Variables, constantes, affichage
Exercice 1 : Premiers affichages
Énoncé
- Dans
ex01.js, affichez votre prénom avecconsole.log(). - Déclarez trois variables :
prenom(chaîne),age(nombre),ville(chaîne). - Affichez chacune sur une ligne séparée.
- Affichez une phrase unique construite avec des accents graves et
${}:
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.
Exercice 2 : Déclarer, affecter, modifier
Énoncé
- Déclarez une constante
prixBaguettevalant1.2. - Déclarez une variable
nbBaguettesvalant3. - Affichez :
Total : 3.6 €(le total est calculé, pas écrit à la main). - Affectez la valeur
5ànbBaguetteset affichez de nouveau le total. - Essayez d'affecter
1.5àprixBaguette.
Questions
- Quel message d'erreur obtenez-vous à l'étape 5 ?
- Quelle différence faites-vous entre déclarer une variable et lui affecter une valeur ?
- Dans quel cas choisir
constplutôt quelet?
Exercice 3 : La TVA
Énoncé
Un article coûte 49,90 € HT. Le taux de TVA est de 20 %.
- Stockez le prix HT et le taux dans deux constantes.
- Calculez le montant de la TVA, puis le prix TTC.
- Affichez les trois lignes suivantes (avec vos valeurs calculées) :
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) ?
Exercice 4 : Prédire avant d'exécuter
É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
- Pour chaque résultat différent de votre prédiction, expliquez pourquoi.
- À quoi sert l'opérateur
%? Donnez un cas d'usage (par exemple savoir si un nombre est pair). - Quelle différence entre
==et===?
Partie B : Saisie et conditions
Exercice 5 : Calculateur d'IMC
Rappel : le fichier doit commencer par const prompt = require(“prompt-sync”)();. prompt(“question”) renvoie une chaîne ; Number(texte) la convertit en nombre.
Énoncé
- Demandez le poids en kg, puis la taille en mètres (exemple :
1.75). - Convertissez les deux saisies en nombres.
- Calculez l'IMC :
poids / (taille * taille). - Affichez :
Votre IMC est de 22.9(arrondi à 1 décimale avec.toFixed(1)). - Affichez ensuite l'interprétation :
- moins de 18,5 :
Insuffisance pondérale - de 18,5 à moins de 25 :
Corpulence normale - de 25 à moins de 30 :
Surpoids - 30 et plus :
Obé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 ?
Exercice 6 : Majeur ou mineur ?
Énoncé
- Demandez l'âge de l'utilisateur et convertissez-le en nombre.
- Affichez
Majeurs'il a 18 ans ou plus,Mineursinon. - Ajoutez la catégorie
Seniorà partir de 65 ans (utilisezelse 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)).
Exercice 7 : Le tarif du cinéma
É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 € |
- Demandez l'âge puis le jour de la semaine (en minuscules :
lundi,mardi, …). - Affichez le tarif applicable :
Tarif : 7 €. - Le tarif du mercredi est prioritaire sur les tarifs par âge.
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 &&.
Exercice 8 : Pierre, feuille, ciseaux
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é
- Demandez le choix du joueur avec
prompt()(pierre,feuilleouciseaux). - Affichez les deux choix :
Vous : pierre / Ordinateur : ciseaux. - Affichez le résultat :
Gagné,PerduouÉ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.
Partie C : Itérations
Exercice 9 : Compter
Énoncé
- Avec une boucle
for, affichez les entiers de 1 à 10, un par ligne. - Affichez ensuite les nombres pairs de 2 à 20.
- Demandez un nombre n à l'utilisateur et affichez sa table de multiplication de 1 à 10 :
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).
Exercice 10 : Somme et moyenne
Énoncé
- Déclarez une variable
totalinitialisée à0. - Avec une boucle, demandez 5 notes (
Note 1,Note 2, …), convertissez-les en nombres et ajoutez-les àtotal. - Affichez la moyenne avec 2 décimales.
- Affichez
Admissi 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).
Exercice 11 : Le nombre mystère
Fourni :
const secret = Math.floor(Math.random() * 100) + 1;
Énoncé
- Déclarez un compteur
essaisà 0. - Tant que le joueur n'a pas trouvé
secret, demandez une proposition, incrémentezessaiset affichezTrop grandouTrop petit. - À la fin, affichez :
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 ….
Partie D : Découverte des fonctions
Exercice 12 : Ma première fonction (guidé)
Énoncé
Voici une fonction qui calcule un prix TTC (TVA à 20 %) :
function calculerTTC(prixHT) {
return prixHT * 1.2;
}
- Recopiez-la et appelez-la avec 49.9, 100 et 15.5 :
console.log(calculerTTC(49.9)); - Identifiez dans le code : le nom de la fonction, le paramètre, la valeur renvoyée.
- Modifiez-la pour qu'elle accepte un second paramètre
taux(par exemple0.055pour les produits alimentaires).
Question : quel est l'intérêt d'une fonction par rapport à recopier le calcul à chaque fois ?
Exercice 13 : À vous d'écrire
Énoncé
- Écrivez une fonction
estMajeur(age)qui renvoietruesiage >= 18,falsesinon. - Utilisez-la dans un
ifpour afficherAccès autoriséouAccès refusé. - Écrivez une fonction
estPair(n)qui renvoietruesinest pair. - Utilisez
estPairdans une boucle pour afficher uniquement les nombres pairs de 1 à 20.
Bilan
- Choisissez l'un des exercices de la séance et améliorez-le à votre idée (nouveau cas, message personnalisé, contrôle de saisie…).
- Répondez par écrit :
- Quelle différence entre
constetlet? - Pourquoi
prompt()nécessite-t-il une conversion avecNumber()? - Dans quel cas utiliser une boucle plutôt que recopier des lignes ?
- Qu'apporte une fonction ?
Aide-mémoire
| 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; } |