Voici une série d'exercices. Le dernier d'entre eux est l'exercice noté de la semaine. Vous avez une semaine pour en faire la remise sur Studium.

Expressions, priorités, conversions

i)
Soit l'expression -4*6/(3+5). Dans quel ordre les opérateurs -, *, / et + sont-ils exécutés? Quelle est la valeur de cette expression? Essayer de trouver par vous même, puis utiliser codeBoot pour faire l'exécution pas à pas et vérifier votre réponse.
ii)
Soit l'expression 9-3+2*3-4/2. Dans quel ordre les opérateurs -, *, / et + sont-ils exécutés? Quelle est la valeur de cette expression ? Vérifiez avec codeBoot.
iii)
Retirez les parenthèses redondantes du calcul suivant et vérifier que l'expression résultante s'évalue à la meme valeur:
   ((-256) + ((5 + 3) * (4 / 2)) - (22 - (44 + 6)))
iv)
Dites si les expressions suivantes sont valides en JavaScript : Pour les expressions valides, donnez leur valeur
    a.  1 + 1
    b.  -1 - -1
    c.  +-1
    d.  -+-+-1 -+-+-1
    e.  - 5 - 5 - 5 - 5
    f.  +3 +3 +3 +3
    g.  ((2 * 3) + 4
    h.  6 / 1 + 5 - 6 / (1 + 5)
v)
Soit x une variable de valeur 10, y de valeur 2 et b de valeur false. Que valent les expressions suivantes ? Si certaines de ces expressions ne sont pas correctes, alors indiquez le en précisant le problème. Aidez vous de codeBoot pour vérifier vos réponses.
(a) x * y > 22 && !b || y % 3 !=== 22        (i) 10 < 12 < 15
(b) y * 5 === 4 || (b != true)               (j) 7 == "7"
(c) 5 / 0                                    (k) 0 == ""
(d) 0 / 0                                    (l) "123" <= 123
(e) 0 / 4                                    (m) " " == 0
(f) Infinity + Infinity                      (n) 0 === ""
(g) Math.sqrt(Infinity)                      (o) 0 === false
(h) infinity * Infinity                      (p) "3+47="+3+47

Expressions booléennes

i)
Que valent les expressions suivantes:
(a) 10 < 20 < 30                              (b) 10 < 8 <= 10
(c) Math.random() < 1                         (d) Math.random() < 0.5
(e) true || false && true                     (f) true && false || true
ii)
Simplifiez les expressions suivantes (par simplifier, on veut dire trouver l'expression de même valeur la plus simple possible); on supposera que x une variable numérique:
(a) (x < 10) && (x < 12)                      (b) (x < 10) || (x < 12)
(c) Math.floor(Math.random() * 6 + 1) < 7     (d) Math.floor(Math.random()) * 6 + 1

Textes

Évaluez les expressions suivantes:

(a) "Some text".charAt(3);                     (b) "Some text".indexOf("me");
(c) "Pomme melon".indexOf("me");               (d) "Pomme Melon".lastIndex("me");
(e) "Some text".substring(3,4);                (f) "Some text".substring(3,3);
(g) "Some text".substring(0,100);              (h) "bonjour".substring(0,3)+" " + "bon matin".substring(4)
Vous trouverez utile de regarder la description des méthodes (nous verrons la définition de ce concept plus tard) disponibles pour les éléments de type chaine. Voici une documentation.

Mes premiers programmes

Évaluez (sans codeboot) ce qu'imprime chacun de ces programmes:

// programme #1
var m = 5;
m = m = m;
print(m);

// Programme #2
var m = 5;
m = m == m;
print(m);

// Programme #3
var m = 5;
m = m * m;
print(m);

// Programme #4
var m = 5;
print(m--);
print(--m);


// Programme #5
var m = 5;
m++;
m *= 2;
m /= 3;
print(m);

Refonte de code

Nous pouvons représenter une date avec 3 variables a, m, q qui sont liées respectivement à l'année, le mois et le quantième. Les mois sont encodés par le numéro du mois (i.e. 1=janvier, 2=février, etc) et le quantième c'est le jour dans le mois (i.e. 1=premier jour du mois). Nous pouvons donc représenter le 16 octobre 2012 avec ces déclarations de variables :

var a = 2012;
var m = 10;
var q = 16;

La déclaration de variable suivante permet de lier la variable j au jour de la semaine correspondant aux valeurs de a, m et q :

var j = (Math.floor(23*m/9) + 
        Math.floor((a*12+m-3)/12) + 
        Math.floor((m+9)/12)*4 + 
        Math.floor(Math.floor((a*12+m-3)/12)/4) - 
        Math.floor(Math.floor((a*12+m-3)/12)/100) + 
        Math.floor(Math.floor((a*12+m-3)/12)/400) + q + 5) % 7 + 1;

où le jour de la semaine est un entier dans l'intervalle 1 à 7. La valeur 1 représente dimanche, 2 représente lundi, etc. Donc dans cet exemple, j sera liée à la valeur 3 puisque le 16 octobre 2012 est un mardi.

La formule utilisée est difficile à lire car elle contient des parties répétées. Utilisez des déclarations de variables pour décomposer le calcul de j en plusieurs étapes. Il faut éviter autant que possible de refaire un calcul plus d'une fois.

Exercice noté #1

Écrivez un programme quiz1.js dont l'exécution affiche dans l'ordre vos réponses à ces questions. Lorsque vous ne savez pas répondre à une question ou que vous avez des doutes, votre réponse à la question doit être NOP. Vous devez réfléchir par vous même à ces questions, vous aider au besoin de codeBoot. Assurez vous que l'exécution de votre programme (une séquence d'instructions print) affiche une réponse à chaque question dans l'ordre où elles ont été posées. Ainsi votre programme devrait ressembler à ceci.

i)
Soit l'expression 100-4+5*7. Dans quel ordre les opérateurs -, + et * sont-ils exécutés? Si l'ordre d'exécution est -, + et *, alors répondre: -+* . Il faut essayer de trouver la réponse par vous même, puis utiliser codeBoot pour faire l'exécution pas à pas et vérifier votre réponse.
ii)
Soit l'expression -4*6/(3+5). Dans quel ordre les opérateurs -, *, / et + sont-ils exécutés? Si l'ordre d'exécution est -, *, / et +, alors répondre: -*/+ . Il faut essayer de trouver la réponse par vous même, puis utiliser codeBoot pour faire l'exécution pas à pas et vérifier votre réponse.
iii)
1010001 est l'encodage binaire non-signé de quelle valeur ?
iv)
Quel est l'encodage binaire non-signé de la valeur 43 ?
v)
Quelle expression obtient-on si on enlève toutes les parenthèses redondantes de l'expression : (((8-5)+3)-((2)*(1+1)))?
vi)
Trouver l'expression la plus petite possible (en terme de nombre de caractères) ayant pour résultat 88 en utilisant les nombres 5 8 9 14 une et une seule fois chacun, les opérateurs +, - et * (autant que nécessaire) et des parenthèses au besoin
vii)
Trouver l'expression la plus petite possible ayant pour résultat 239 en utilisant les nombres 3 8 10 19 une et une seule fois chacun, les opérateurs +, - et * (autant que nécessaire) et des parenthèses au besoin

Votre programme est à remettre studium sous l'onglet exo#1. Vous serez encadrés en démonstration pour cela.