...
 
Commits (7)
/package-lock.json
/startnb.sh
/.bin/
/.ipynb_checkpoints/
.ipynb_checkpoints/
/.lib/
{
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# TD1 d'algorithmie − Formation développeur Web"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 0. Ceci est un notebook Jupyter…\n",
"\n",
"Il s'agit d'un document, éditable, contenant une suite de cellules soit textuelles (*Markdown*), soit de code (*Code*).\n",
"\n",
"Ce document est **éditable**, à la fois :\n",
" - pour y inclure vos réponses textuelles\n",
" - pour y inclure vos réponses sous forme de code\n",
" \n",
"### Mémo\n",
"\n",
"- double-clic pour éditer une cellule\n",
"- <kbd>Ctrl</kbd> + <kbd>Entrée</kbd> ou bouton de la barre d'outils <button disabled><i class=\"fa-step-forward fa\"></i></button> pour valider un cellule (exécuter son code si c'est un bloc de code).\n",
"- N'oubliez pas d'enregistrer votre travail.\n",
"- La syntaxe dans les cellules textuelles est [la syntaxe markdown](https://blog.wax-o.com/2014/04/tutoriel-un-guide-pour-bien-commencer-avec-markdown/).\n",
"- **Si votre playbook plante**, c'est à dire que quand vous exécutez un bloc de code, rien ne se produit (peut arriver en cas de boucle infinie), utilisez le bouton <button disabled><i class=\"fa-repeat fa\"></i></button> et attentez qu'une petite boite « *kernel ready* »apparaisse en haut à droite de l'écran."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1. Flux d'exécution\n",
"\n",
"Soit l'algorithme suivant\n",
"\n",
"```\n",
"var a, b, c;\n",
"\n",
"a = 12;\n",
"a = 2 + 4;\n",
"\n",
"b = a + 2;\n",
"// a = 2;\n",
"a = 11;\n",
"c = \"b + 1\";\n",
"\n",
"alert(a);\n",
"alert(b);\n",
"alert(c);\n",
"```\n",
"\n",
"**A.** Quels seraient les affichages successifs produits par l'exécution de cet algorithme ?\n",
"\n",
"Répondre **sans exécuter l'algorithme**, en déroulant l'algorithme à la main, sur papier, et en notant les affichages produits dans la celule ci-dessous :"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- 11\n",
"- 8\n",
"- b + 1"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"## 2. Quelle pagaille…\n",
"\n",
"L'algorithme ci-dessous, en JavaScript, contient 3 erreurs, corrigez-les (il n'est pas nécessaire d'exécuter la cellule, une lecture attentive devrai suffire)."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"var message1, message2;\n",
"var a; // déclaration manquante\n",
"\n",
"message1 = \"Bonjour\"; // guillemet manquant\n",
"message2 = \"Au revoir\"; // point-virgule manquant\n",
"\n",
"a = 2;"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"L'algorithme ci-dessous, en JavaScript, contient 2 erreurs, corrigez-les."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"var salutation;\n",
"\n",
"salutation = \"Bonjour\"; // 1. Guillemets manquants\n",
"\n",
"var a, b;\n",
"\n",
"b = 12; // 2. lignes inversées\n",
"a = 3 + b; // (on utilisait b avant qu'il soit initialisé)\n",
"\n",
"alert(salutation);\n",
"alert(a);"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Le programme ci-dessous, en JavaScript, contient quatre erreurs, corrigez-les."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"var a, b;\n",
"var c; // 1. déclaration manquante\n",
"\n",
"b = 0; // 2. b n'a pas été initialisé\n",
"\n",
"a = b + 3;\n",
"\n",
"c = a+2; // 3. point-virgule manquant\n",
"\n",
"a = a + 1; // 4. solution 1: guillements en trop (on veut manipuler un nombre)\n",
"a = String(a) + \"1\"; // 4. solution 2: concaténation"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 3. Plus deux !\n",
"\n",
"Écrire un algorithme (en JavaScript) qui demande un nombre à l'utilisateur, le stocke dans une variable, y ajoute deux, puis l'affiche à l'utilisateur. Exécutez-le autant que nécessaire pour le tester !"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Saisir un nombre 2\n",
"4\n"
]
}
],
"source": [
"var a, b;\n",
"\n",
"a = Number(prompt(\"Saisir un nombre\"));\n",
"b = a + 2;\n",
"alert(b);"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 4. BONUS noms de variables\n",
"\n",
"Dire pour chacun des **noms de variables** ci-dessous :\n",
"\n",
"- si il est valide (en JavaScript)\n",
"- si il respecte la convention de nommage des variables en JavaScript\n",
"\n",
"\n",
"1. NB_ELEMENTS\n",
"2. a\n",
"3. z,b\n",
"4. 12\n",
"5. nombre.positif\n",
"6. sha1\n",
"7. checkSum\n",
"8. A\n",
"9. CHECKSUM\n",
"10. nombre_tentatives\n",
"11. a12\n",
"12. nbÉclairsVus\n",
"13. @mail\n",
"\n",
"Réponses :\n",
"\n",
"1. oui non\n",
"2. oui oui \n",
"3. non non\n",
"4. non\n",
"5. non non\n",
"6. oui oui\n",
"7. oui oui\n",
"8. oui non\n",
"9. oui non\n",
"10. oui non\n",
"11. oui oui\n",
"12. oui non\n",
"13. non non"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Javascript (Node.js algo)",
"language": "javascript",
"name": "javascript"
},
"language_info": {
"file_extension": ".js",
"mimetype": "application/javascript",
"name": "javascript",
"version": "8.11.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
{
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# TD2 d'algorithmie − Formation développeur Web"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 0. Ceci est un notebook Jupyter…\n",
"\n",
"Il s'agit d'un document, éditable, contenant une suite de cellules soit textuelles (*Markdown*), soit de code (*Code*).\n",
"\n",
"Ce document est **éditable**, à la fois :\n",
" - pour y inclure vos réponses textuelles\n",
" - pour y inclure vos réponses sous forme de code\n",
" \n",
"### Mémo\n",
"\n",
"- double-clic pour éditer une cellule\n",
"- <kbd>Ctrl</kbd> + <kbd>Entrée</kbd> ou bouton de la barre d'outils <button disabled><i class=\"fa-step-forward fa\"></i></button>pour valider un cellule (exécuter son code si c'est un bloc de code).\n",
"- N'oubliez pas d'enregistrer votre travail.\n",
"- La syntaxe dans les cellules textuelles est [la syntaxe markdown](https://blog.wax-o.com/2014/04/tutoriel-un-guide-pour-bien-commencer-avec-markdown/).\n",
"- **Si votre playbook plante**, c'est à dire que quand vous exécutez un bloc de code, rien ne se produit (peut arriver en cas de boucle infinie), utilisez le bouton <button disabled><i class=\"fa-repeat fa\"></i></button> et attentez qu'une petite boite « *kernel ready* »apparaisse en haut à droite de l'écran."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1. Propositions logiques\n",
"\n",
"Soient les propositions logiques suivantes :\n",
"\n",
"```\n",
"true && (2 > 3)\n",
"true || (2 > 3)\n",
"(3 < 4) || (2 > 3) && vrai\n",
"(4 >= 3) && (4 >= 5)\n",
"```\n",
"\n",
"Donner (en les résolvant « à la main ») la valeur booléenne chacune de ces propositions logiques.\n",
"\n",
"- réponse : false\n",
"- réponse : true\n",
"- réponse : true\n",
"- réponse : false"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 2. Propositions logiques et variables\n",
"\n",
"\n",
"\n",
"Soient les propositions logiques suivantes :\n",
"\n",
"- `15 > (c - 30)`\n",
"- `a != b`\n",
"- `(d > c) && (a == \"plouf\")`\n",
"- `(a > c) && true`\n",
"- `(c > 3) && (c > 2)`\n",
"\n",
"\n",
"**A** Considérant qu'on initialise les variables comme suit…\n",
"\n",
"```javascript\n",
"var a, b, c, d;\n",
"\n",
"var a = \"plouf\";\n",
"var b = \"pif\";\n",
"var c = 42;\n",
"var d = 22;\n",
"```\n",
"\n",
"… Donner la valeur booléenne de chaque expression logique (raisonner de tête, sans exécuter de code)\n",
"\n",
" - réponse : false\n",
" - réponse : true\n",
" - réponse : false\n",
" - réponse : false (si le langage JavaScrit était rigoureux, il renverrait une erreur car on compare une chaîne avec un nombre)\n",
" - réponse : true\n",
" \n",
"**B** Deux des expressions sont simplifiables (réductibles), trouver lesquelles et les simplier (sans prendre en compte l'initialisation du *A*).\n",
"\n",
" - réponse : `(c > 3) && (c > 2)` devient `c > 3`\n",
" - réponse : `(a > c) && true` devient `a > c`"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"## 3. Traduction\n",
"\n",
"Traduire en JavaScript les propositions logiques suivantes exprimées par les phrases suivantes :\n",
"\n",
"1. le contenu de la variable `c` est supérieur au nombre 3\n",
"2. le contenu de la variable `c` est supérieur à la chaîne de caractères 3\n",
"3. le contenu de la variable `c` est différent du contenu de la variable `d`\n",
"4. le contenu de la variable `c` est supérieur ou égal au nombre 3 et inférieur au nombre 10\n",
"5. l'inverse de la proposition de la ligne du dessus\n",
"6. le contenu de la variable `c` est différent de la chaîne de caractères \"blabla\"\n",
"\n",
"Réponses (à compléter) :"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"1. c > 3\n",
"2. c > \"3\"\n",
"3. c != d\n",
"4. (c >= 3) && (c < 10)\n",
"5. ! ( (c >= 3) && (c < 10) )\n",
"6. c != \"blabla\""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 4. BONUS Comparaisons, types & bizareries\n",
"\n",
"Pour chacune des propositions logiques rédigées en JavaScript ci-dessous (une par ligne):\n",
"\n",
"- dire (sans exécuter quoi que ça soit) à quel résultat vous vous attendriez\n",
"- trouvez un moyen d'évaluer réellement les propositions pour vérifier vos prédictions\n",
"- cherchez sur le web la syntaxe (incluse dans le langage JavaScript) permettant de faire les mêmes tests avec plus de rigueur (ce qui devrait donner des résultats davantage conformes à vos attentes)\n",
"- ré-écrire les expressions avec cette nouvelle syntaxe."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"// On peut réécrire avec les « === »\n",
"var r1, r2, r3;\n",
"\n",
"r1 = 1 === \"1\"; // false (serait une erreur si le langage était plus strict) \n",
"r2 = true === 1; // false (serait une erreur si le langage était plus strict)\n",
"r3 = \"\" !== false; // true (serait une erreur si le langage était plus strict)\n",
"\n",
"alert(r1);\n",
"alert(r2);\n",
"alert(r3);"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Javascript (Node.js algo)",
"language": "javascript",
"name": "javascript"
},
"language_info": {
"file_extension": ".js",
"mimetype": "application/javascript",
"name": "javascript",
"version": "8.11.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
{
{
......@@ -165,8 +165,8 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"<details>\n",
"<summary style=\"cursor: help\">AIDE: Si vous ne savez pas comment démarrer, cliquez pour afficher des étapes pour vous guider dans la conception du programme</summary> \n",
"<details style=\"border: 1px solid #E6C808; padding: 1em\" >\n",
"<summary style=\"cursor: help; color: #E6C808\">AIDE: Si vous ne savez pas comment démarrer, cliquez pour afficher des étapes pour vous guider dans la conception du programme</summary> \n",
" \n",
"1. Réfléchir aux variables qui vont être nécessaires, et les déclarer\n",
"2. Demander à l'utilisateur un premier nombre, le stocker dans une variable et ré-afficher le nombre saisi à l'utilisateur\n",
......@@ -191,14 +191,15 @@
"- 0€ les 30 premières minutes\n",
"- 0.50€ la 2e demi-heure\n",
"- 1€ la troisième demi-heure\n",
"- 2€ par demi-heure supplémentaire\n",
"- 2€ par demi-heure supplémentaire (les demi-heures de cette tranche sont comptées au pro-rata, cf exemple)\n",
"\n",
"Exemples :\n",
"\n",
"- pour 22min de vélo, je paye 0€\n",
"- pour 50min je paye 0.50€\n",
"- pour 1h30 je paye 1.50€\n",
"- pour 3h je paye 7.50€\n",
"- pour 50min je paye 0.50€ (0 + 0.50)\n",
"- pour 1h30 je paye 1.50€ (0 + 0.5 + 1)\n",
"- pour 1h45 je paye 2.50€ (0 + 0.5 + 1 + 0.5x2) ;\n",
"- pour 3h je paye 7.50€ (0 + 0.5 + 1 + 3x2)\n",
"\n",
"**A.** Réaliser un programme JavaScript demandant un nombre de minutes à l'utilisateur, et lui indiquant si il doit payer quelque-chose ou non (sans préciser le montant)."
]
......@@ -236,7 +237,7 @@
" \n",
"\n",
"1. Demander l'heure de début (sans les minutes)\n",
"2. Demander les minutes de l'heure de début\n",
"2. Demander les minutes de l'heure de début (on considère qu'on reste sur une même journée)\n",
"3. Demander l'heure de l'heure de fin (sans les minutes)\n",
"4. Demander les minutes de l'heure de fin\n",
"5. Afficher le prix dû par le cycliste\n"
......@@ -257,6 +258,49 @@
"source": [
"// votre code ici"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**E.** Partir du code précédent en en produire un nouveau pour gérer le cas où l'utilisateur ne rend pas son vélo sur la même journée (ex: on emprunte le vélo le 10/9 à 23h et on le rend le 11/9 à 1h du matin). Il faut donc demander la date d'emprunt et la date de rendu à l'utilisateur·ice. On ne prend pas en compte l'année, on considère que l'on est en 2018.\n",
"\n",
"- On pourra dans un premier temps considérer que tous les mois font 30 jours\n",
"- Réaliser ensuite l'implémentation en prenant en compte le fait que les mois n'ont pas tous le même nombre de jours\n",
"\n",
"*NB:* Il existe des bibliothèques pour gérer les calculs de calendrier automatiquement, nous ne les utiliserons pas dans le cadre de cet exercice."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"// votre code ici "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**F.** Refaire une version du code qui évite que l'utilisateur ne saisisse systématiquement la date (alors que la plupart du temps, il rendra le jour de l'emprunt):\n",
"\n",
"1. demander la date d'emprunt et l'heure d'emprunt\n",
"2. demander si le vélo est rendu le même jour\n",
" - si oui, demander la date et l'heure de rendu\n",
" - si non, utiliser la date d'emprunt comme date de rendu et demander uniquement l'heure\n",
" "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"// votre code ici "
]
}
],
"metadata": {
......
{
{
......@@ -57,7 +57,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"* fonction `supercocorico` qui prend un argument, nommé `n`, un nombre, et affiche le message « cocorico » `n` fois. Par ex `supercocorico(5)` affiche 5 fois « cocorico »."
"* fonction `superCocorico` qui prend un argument, nommé `n`, un nombre, et affiche le message « cocorico » `n` fois. Par ex `superCocorico(5)` affiche 5 fois « cocorico »."
]
},
{
......@@ -85,7 +85,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"- fonction `plusdeux` qui prend un nombre en argument, et retourne ce nombre ajouté de deux"
"- fonction `plusDeux` qui prend un nombre en argument, et retourne ce nombre ajouté de deux"
]
},
{
......