sio:bloc1:td1

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.

Dans un terminal :

node --version
npm --version
Les deux commandes doivent afficher un numéro de version.

mkdir td-js1
cd td-js1
npm init -y
La 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-sync
Un 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é

  1. Dans ex01.js, affichez votre prénom avec console.log().
  2. Déclarez trois variables : prenom (chaîne), age (nombre), ville (chaîne).
  3. Affichez chacune sur une ligne séparée.
  4. 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.


Énoncé

  1. Déclarez une constante prixBaguette valant 1.2.
  2. Déclarez une variable nbBaguettes valant 3.
  3. Affichez : Total : 3.6 € (le total est calculé, pas écrit à la main).
  4. Affectez la valeur 5 à nbBaguettes et affichez de nouveau le total.
  5. Essayez d'affecter 1.5 à prixBaguette.

Questions

  1. Quel message d'erreur obtenez-vous à l'étape 5 ?
  2. Quelle différence faites-vous entre déclarer une variable et lui affecter une valeur ?
  3. Dans quel cas choisir const plutôt que let ?

Énoncé
Un article coûte 49,90 € HT. Le taux de TVA est de 20 %.

  1. Stockez le prix HT et le taux dans deux constantes.
  2. Calculez le montant de la TVA, puis le prix TTC.
  3. 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) ?


É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

  1. Pour chaque résultat différent de votre prédiction, expliquez pourquoi.
  2. À quoi sert l'opérateur % ? Donnez un cas d'usage (par exemple savoir si un nombre est pair).
  3. Quelle différence entre == 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. Demandez le poids en kg, puis la taille en mètres (exemple : 1.75).
  2. Convertissez les deux saisies en nombres.
  3. Calculez l'IMC : poids / (taille * taille).
  4. Affichez : Votre IMC est de 22.9 (arrondi à 1 décimale avec .toFixed(1)).
  5. 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 ?


Énoncé

  1. Demandez l'âge de l'utilisateur et convertissez-le en nombre.
  2. Affichez Majeur s'il a 18 ans ou plus, Mineur sinon.
  3. Ajoutez la catégorie 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 €
  1. Demandez l'âge puis le jour de la semaine (en minuscules : lundi, mardi, …).
  2. Affichez le tarif applicable : Tarif : 7 €.
  3. 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 &&.


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é

  1. Demandez le choix du joueur avec prompt() (pierre, feuille ou ciseaux).
  2. Affichez les deux choix : Vous : pierre / Ordinateur : ciseaux.
  3. Affichez le résultat : 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é

  1. Avec une boucle for, affichez les entiers de 1 à 10, un par ligne.
  2. Affichez ensuite les nombres pairs de 2 à 20.
  3. 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).


Énoncé

  1. Déclarez une variable total initialisée à 0.
  2. Avec une boucle, demandez 5 notes (Note 1, Note 2, …), convertissez-les en nombres et ajoutez-les à total.
  3. Affichez la moyenne avec 2 décimales.
  4. Affichez 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é

  1. Déclarez un compteur essais à 0.
  2. Tant que le joueur n'a pas trouvé secret, demandez une proposition, incrémentez essais et affichez Trop grand ou Trop petit.
  3. À 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 ….


Énoncé
Voici une fonction qui calcule un prix TTC (TVA à 20 %) :

function calculerTTC(prixHT) {
  return prixHT * 1.2;
}

  1. Recopiez-la et appelez-la avec 49.9, 100 et 15.5 : console.log(calculerTTC(49.9));
  2. Identifiez dans le code : le nom de la fonction, le paramètre, la valeur renvoyée.
  3. Modifiez-la pour qu'elle accepte un second paramètre 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é

  1. Écrivez une fonction estMajeur(age) qui renvoie true si age >= 18, false sinon.
  2. Utilisez-la dans un if pour afficher Accès autorisé ou Accès refusé.
  3. Écrivez une fonction estPair(n) qui renvoie true si n est pair.
  4. Utilisez estPair dans une boucle pour afficher uniquement les nombres pairs de 1 à 20.

  1. Choisissez l'un des exercices de la séance et améliorez-le à votre idée (nouveau cas, message personnalisé, contrôle de saisie…).
  2. Répondez par écrit :
    • Quelle différence entre const et let ?
    • Pourquoi prompt() nécessite-t-il une conversion avec Number() ?
    • Dans quel cas utiliser une boucle plutôt que recopier des lignes ?
    • Qu'apporte une fonction ?

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; }
  • sio/bloc1/td1.1791499130.txt.gz
  • Dernière modification : il y a 11 heures
  • de jcheron