Un projet de départ vous est fourni (archive zip), il comprend un fichier LIFAP5-TP1.html
qui charge LIFAP5-TP1.js
. Le fichier JavaScript comprend tout l’outillage de base pour la gestion des événements HTML. Le fichier LIFAP5-TP1.css
est également fourni pour le dernier exercice.
Utilisez les outils de développement (F12) de firefox pour activer la console javascript et mettre au point vos programmes.
typeof
et instanceof
typeof "John";
typeof 3.14;
typeof NaN;
typeof false;
typeof null;
typeof undefined;
typeof un_truc_pas_declare;
typeof {};
typeof { name: "John", age: 34 };
({} instanceof Object);
typeof [1, 2, 3, 4];
[1, 2] instanceof Array;
[1, 2] instanceof Object;
typeof new Date();
typeof new Date("2020-02-02");
new Date() instanceof Date;
new Date() instanceof Object;
typeof function () {};
typeof (() => {});
(() => {}) instanceof Function;
(() => {}) instanceof Object;
LIFAP5-TP1-equality.js
, réfléchir pour prévoir la valeur de retour attendue puis vérifier dans la console. Résumer la différence entre les comparaisons ==
et ===
let n = 42;
let b = false;
let s = "test";
let o = { name: "Romuald", age: 37 };
let a = [0, 1, 1, 2, 3, 5, 8];
let f = function () {
return 42;
};
function test1(num, bool, str, obj, arr) {
num++;
bool = !bool;
str += "foo";
obj.name = "Olivier";
arr.push(13);
console.log(num, bool, str, obj, arr);
}
// test1(n,b,s,o,a);
function test2(obj, arr, fun) {
obj = { foo: "bar" };
arr = [42];
fun = function () {
return 0;
};
console.log(obj, arr, fun());
}
// test2(o,a,f);
my_object
qui contient un champ x
, un champ y
et une méthode do()
qui va afficher les valeurs des champs x
et y
dans la console.iterate_array(arr)
qui va afficher les éléments du tableau passé en paramètre dans la console. Une fonction test()
est prévue pour tester la fonction. Essayer les différentes variantes de boucles :
fibonacci(n)
qui pour n > 1 renvoie un tableau de longueur n
contenant les n
premiers termes de la suite de Fibonacci, e.g., fibonacci(8) = [0,1,1,2,3,5,8,13]
.Number.isInteger(n)
.Écrire un programme qui génère les paroles de “99 Bottles of Beer” et renvoie une chaîne les contenant. Complétez pour cela la fonction bottles(beers)
de LIFAP5-TP1.js
.
Analyser la fonction bottles(beers)
avec ESLint. Quels sont les erreurs remontées ? Certaines sont-elles normales ?
+
.range
La fonction range(stop, [start], [step])
prend trois arguments en paramètre et renvoie le tableau des entiers compris entre start
(inclus) et stop
(exclu) avec un pas de step
:
start
n’est pas défini, sa valeur par défaut est 0;step
n’est pas défini, sa valeur par défaut est 1;stop
est inférieur ou égal à start
, alors la liste vide est retournée.Exemples :
/* les tests suivants sont tous vrais */
(range(10, 0) == range(10)) == [0, 1, 2, 3, 4, 5, 6, 8, 9];
range(10, 4, 2) == [4, 6, 8];
range(-2, 0) == [];
Complétez la fonction range(stop, start, step)
de LIFAP5-TP1.js
.
Analyser la fonction range(stop, start, step)
avec ESLint.
Proposez une version récursive range_rec
de la fonction en utilisant la fonction Array.prototype.concat()
L’exercice consiste à écrire une calculatrice qui évalue des expressions arithmétiques en notation polonaise inverse.
La principale fonction à réaliser est evaluate(expr)
qui renvoie la valeur de l’expression expr
passée en paramètre sous forme d’une chaîne de caractères.
L’expression est construite à partir d’entiers et des opérations +
, -
, *
et /
.
Par exemple l’expression 5 1 2 + 4 * + 3 -
, écrite 5 + ((1 + 2) * 4) - 3
dans la notation infixe usuelle, doit s’évaluer en 14
.
L’expression vide doit s’évaluer en 0.
Pour simplifier l’exercice, on supposera que les entiers et les opérateurs sont toujours séparés par des espaces dans l’expression fournie en paramètre, ainsi, 1 3 +
est une expression valide mais 1 3+
ne l’est pas.
De même, on ne gérera pas les erreurs comme la division par zéro ou les chaînes invalides.
Un algorithme d’évaluation consiste à lire de gauche à droite les éléments qui composent l’expression :
Complétez la fonction evaluate(expr)
de LIFAP5-TP1.js
.
Analyser la fonction evaluate(expr)
avec ESLint.
split
permet de transformer une chaîne en un tableau en décomposant les termes de la chaîne séparés par des espaces ;parseFloat
pour transformer une chaîne en nombre ;isNaN
pour tester si quelque chose est bien un nombre.my_object
dans un <span>
à ajouter.LIFAP5-TP1.css
pour positionner et colorier les éléments header
, nav
, main
etc.