Copyright © 2025 Yves MARCOUX; dernière modification de cette page: 2025-05-13.

SCI6373 Programmation documentaire

Exercices après Cours 1

Exercices à faire après avoir complété les lectures données au Cours 1

Yves MARCOUXEBSIUniversité de Montréal


Table des matières

Questions générales

Composition d’expressions


Votre coffre à outils jusqu’à maintenant
Outil Fait quoi ? Utilisation Vu où ?
+ - * / + - × ÷ n1 + n2 § 6
+ Concaténation de chaînes ch1 + ch2 § 6
= Assignation de variable maVar = expression § 7
Math.PI π (3.14159…) Math.PI § 5

Questions générales

  1. Pour chacune des valeurs JS suivantes, dites s’il s’agit d’une valeur numérique, caractère ou autonyme :

    0
    "bonsoir"
    8.57
    true
    false
    "BONJOUR"
    null

    - Réponse

    0 et 8.57 : numérique
    true, false et null : autonyme
    "bonsoir" et "BONJOUR" : caractère

  2. Les constantes suivantes sont écrites incorrectement. Récrivez-les correctement.

    0,45
    "bonsoir'
    True
    NULL

    - Réponse

    0.45
    "bonsoir"
    ou 'bonsoir'
    true
    (comme pour les variables, la casse des lettres importe dans le nom des constantes autonymes)
    null

  3. La constante 8.5700 représente-t-elle la valeur JS 8.57 ?
    - Réponse

    Oui, on peut ajouter des zéros non significatifs sans changer la valeur de la constante. Attention, on ne peut pas toujours ajouter des zéros non significatifs au début d’un nombre – discussion à venir en classe.

  4. La constante 3,220 représente-t-elle la valeur JS 3.22 ?
    - Réponse

    Non, le séparateur décimal en JS est le point et non la virgule.

  5. La constante 'Bonjour' représente-t-elle la valeur JS "Bonjour" ?
    - Réponse

    Oui, on peut utiliser les guillemets simples ou doubles comme délimiteurs des constantes caractères.

  6. Écrivez une constante dont la valeur est celle de l’expression 'Bonjour' + "le monde".
    - Réponse

    "Bonjourle monde" (Il n’y a pas d’ajout automatique d’espace lors d’une concaténation.)

  7. Soulignez les constantes dans l’expression suivante :

    msg = msg + " Bonne journée !"

    - Réponse

    msg = msg + " Bonne journée !"

  8. Soulignez les constantes dans l’expression suivante :

    rép = (2 * 10+1.07)

    - Réponse

    rép = (2 * 10+1.07)

  9. Soulignez les opérateurs dans l’expression suivante :

    rép = (2 * 10+1.07)

    - Réponse

    rép = (2 * 10+1.07)
    Les parenthèses ne sont pas considérées comme un opérateur.

  10. Soulignez la sous-expression donnant la valeur de l’argument de droite du + dans l’expression suivante :

    9 - (6 / 2) + (2 * 3)

    - Réponse

    9 - (6 / 2) + (2 * 3)

  11. Soulignez la sous-expression donnant la valeur de l’argument de gauche du + dans l’expression suivante :

    9 - (6 / 2) + (2 * 3)

    - Réponse

    Les opérations de même priorité s’effectuent de gauche à droite. Donc, c’est le résultat de la soustraction qui sera l’argument de gauche du +.

    9 - (6 / 2) + (2 * 3)

  12. Soulignez la sous-expression donnant la valeur de l’argument de droite du - dans l’expression suivante :

    9 - (6 / 2) + (2 * 3)

    - Réponse

    9 - (6 / 2) + (2 * 3)

  13. Soulignez la sous-expression donnant la valeur de l’argument de gauche du - dans l’expression suivante :

    9 - (6 / 2) + (2 * 3)

    - Réponse

    9 - (6 / 2) + (2 * 3)

    Rappelons-nous qu’une constante est une expression, et donc une sous-expression, lorsque utilisée dans le contexte d’une expression plus longue.
  14. Classez les quatre opérations (+, -, *, /) de l’expression suivante par ordre d’exécution :

    20 * (4.5 + 0.5) / (11 - 1)

    - Réponse

    + * - /

  15. Quelle est la valeur l’expression suivante ?

    9 - (6 / 2) + (2 * 3)

    - Réponse

    12 (soit 9 - 3 + 6)

  16. Soulignez la sous-expression donnant la valeur de l’argument de droite du / dans l’expression suivante :

    20 * (4.5 + 0.5) / (11 - 1)

    - Réponse

    20 * (4.5 + 0.5) / (11 - 1)

  17. Soulignez la sous-expression donnant la valeur de l’argument de gauche du / dans l’expression suivante :

    20 * (4.5 + 0.5) / (11 - 1)

    - Réponse

    Les opérations de même priorité s’effectuent de gauche à droite. Donc, c’est le résultat du * qui sera l’argument de gauche du /.

    20 * (4.5 + 0.5) / (11 - 1)

  18. Quelle est la valeur de (ou retournée par) l’expression suivante ?

    20 * (4.5 + 0.5) / (11 - 1)

    - Réponse

    10 (soit 20 * 5 / 10)

  19. Soulignez les noms de variable dans l’expression suivante :

    rép = (2 * 10+1.07)

    - Réponse

    rép = (2 * 10+1.07)

  20. Dans l’expression suivante :

    (10+1.07) * (rép = 2)

    la partie soulignée est-elle une sous-expression ?
    - Réponse

    Oui, car l’assignation = s’exécute avant la multiplication *, à cause des parenthèses.

  21. Dans l’expression suivante :

    (10+1.07) * (rép = 2)

    la partie soulignée est-elle une sous-expression ?
    - Réponse

    Oui, d’ailleurs toute sous-expression que l’on entoure de parenthèses demeure une sous-expression.

  22. Dans l’expression suivante :

    rép = 2 * 10+1.07

    la partie soulignée est-elle une sous-expression ?
    - Réponse

    Non, car la multiplication * s’exécute avant l’assignation =, qui a plus basse priorité.

  23. Dans l’expression suivante :

    rép = 2 * 10+1.07

    la partie soulignée est-elle une sous-expression ?
    - Réponse

    Oui, car la multiplication * s’exécute avant l’addition +.

  24. Dans l’expression suivante :

    rép = 2 * 10+1.07

    la partie soulignée est-elle une sous-expression ?
    - Réponse

    Oui, car la multiplication * et l’addition + s’exécutent avant l’assignation =.

  25. Dans l’expression suivante :

    rép = 2 * 10+1.07

    la partie soulignée est-elle une sous-expression ?
    - Réponse

    Non, car la multiplication * s’exécute avant l’addition +.

  26. Soulignez les LHS (left-hand side ou « parties de gauche ») dans l’expression suivante :

    résultat = 2 * 10+1.07

    - Réponse

    résultat = 2 * 10+1.07

  27. Dans l’expression suivante :

    rép = 2 * 10+1.07

    la partie soulignée est-elle une sous-expression ?
    - Réponse

    Oui, c’est une LHS (left-hand side) constituée d’un nom de variable.

  28. Soulignez les LHS (left-hand side) dans l’expression suivante :

    (10+1.07) * (réponse = 2)

    - Réponse

    (10+1.07) * (réponse = 2)

    Il n’y en a qu’une.

  29. Soulignez les LHS (left-hand side) dans l’expression suivante :

    (r1 = 10+1.07) * (r2 = 2)

    - Réponse

    (r1 = 10+1.07) * (r2 = 2)

  30. Vrai ou faux : Il peut y avoir au maximum deux LHS dans une expressions JS.
    - Réponse

    Faux, la règle d’enchaînement permet d’enchaîner autant d’expressions que l’on veut, et donc d’assignations; par exemple :
    v1 = v2 = v3 = "Hello world"

  31. Vrai ou faux : Une LHS est toujours un nom de variable.
    - Réponse

    Non, une LHS peut être plus complexe qu’un simple nom de variable.

  32. Soulignez les noms de variable dans l’expression suivante :

    msg = msg + " Bonne journée !"

    - Réponse

    msg = msg + " Bonne journée !"

  33. Comment nomme-t-on une assignation qui affecte à une variable une nouvelle valeur calculée à partir de son ancienne valeur, comme dans :

    msg = msg + " Bonne journée !"

    - Réponse

    Une auto-réassignation.

  34. Décomposez l’expression suivante en une suite d’énoncés contenant chacun au plus une assignation (et peut-être une autre opération) :

    r = (r1 = 10+1.07) * (r2 = 2)

    - Réponse

    r1 = 10+1.07
    r2 = 2
    r = r1 * r2

  35. Écrire une expression, comportant une seule opération (une assignation), équivalente à cette suite d’énoncés :

    msg = "à tout " ;
    msg = 'Bonjour ' + msg ;
    msg = msg + "le monde" ;

    - Réponse

    msg = "Bonjour à tout le monde"

  36. Récrire cette suite d’énoncés comme une seule expression, la plus simple possible (on suppose que la variable nom contient une valeur caractère, inconnue au moment d’écrire les énoncés) :

    msg = nom ;
    msg = 'Bonjour ' + msg ;
    msg = msg + ". Amuse-toi bien !" ;

    - Réponse

    msg = "Bonjour " + nom + ". Amuse-toi bien !"

  37. Récrire cette suite d’énoncés comme une seule expression, la plus simple possible (on suppose que la variable dim contient une valeur numérique, inconnue au moment d’écrire les énoncés) :

    dim = dim * dim ;
    dim = dim / 4 ;
    cout = dim * Math.PI * 17.99 ;

    - Réponse

    cout = dim * dim / 4 * Math.PI * 17.99


Composition d’expressions

Les questions suivantes décrivent des calculs qu’on demande de transformer en expressions JS. On vous demande de donner deux réponses pour chaque question :

  1. Vous achetez trois pommes à 1,07$ et quatre oranges à 1,89$. Ces produits sont non taxables. Calculez le montant total de votre achat.
    - Réponse

    Comme suite d’énoncés :

    coutPommes = 3 * 1.07 ;
    coutOranges = 4 * 1.89 ;
    coutTotal = coutPommes + coutOranges ;

    En une seule expression :

    3*1.07+4*1.89

    Il n’est pas nécessaire d’utiliser les parenthèses (puisque * a priorité sur +), mais rien n’empêche de le faire si on veut clarifier l’expression :

    (3*1.07) + (4*1.89)

  2. Vous achetez 2 raquettes de tennis à 135$ chaque et 3 boîtes de balles à 24,99$ chaque. Ces produits sont sujets à une taxe de 15%. Le détaillant vous consent un rabais de 20% avant taxes. Quel est le montant total de votre achat? (Pas besoin que vos expressions arrondissent le résultat.)
    - Réponse

    Il y a plusieurs façons d’exprimer les calculs à faire (elles donnent toutes la même réponse de 317,3724); nous en présentons une.

    Comme suite d’énoncés :

    coutRaquettes = 2 * 135 ;
    coutBalles = 3 * 24.99 ;
    coutTotalBrut = coutRaquettes + coutBalles ;
    coutTotalReduit = coutTotalBrut * 0.8 ;
    coutTotal = coutTotalReduit * 1.15 ;

    En une seule expression :

    (2 * 135 + 3 * 24.99) * 0.8 * 1.15

  3. Le rayon, en mètres, d’une piscine ronde est donné par la variable rayon. Cette piscine doit être recouverte d’une toile, dont le rayon excède celui de la piscine par 20 cm. La toile sera maintenue en place par un fil de métal faisant le tour de la piscine. La toile coûte 18$ par mètre carré et le fil de métal 6$ par mètre. Quel est le coût total du matériel requis? (Pas besoin que vos expressions arrondissent le résultat.)

    Petit rappel : la circonférence d’un cercle est 2πr et son aire πr2, où r est le rayon.

    - Réponse

    Comme suite d’énoncés :

    rayonT = rayon + 0.2
    rayonT2 = rayonT * rayonT ;
    surface = Math.PI * rayonT2 ;
    coutToile = surface * 18 ;
    deuxPI = 2 * Math.PI ;
    circonf = deuxPI * rayon ;
    coutFil = circonf * 6 ;
    coutTotal = coutToile + coutFil ;

    En une seule expression :

    Math.PI*(rayon + 0.2)*(rayon + 0.2)*18 + 2*Math.PI*rayon*6

    Cette expression peut être simplifiée (avec un peu de travail) en :

    Math.PI * 18 * (rayon * (rayon + 16/15) + 0.04)

    mais cette dernière expression nous semble moins facile à comprendre que l’originale. Question lisibilité, l’expression non simplifiée est donc sans doute préférable.