Différences entre versions de « Technologies avancées du eLearning 2/exercices/Saisie de notes »
De GBLL, TAL, ALAO, etc.
< Cours:Technologies avancées du eLearning 2
Ligne 1 : | Ligne 1 : | ||
{{encart|Le code écrit ici réutilise des fonctions issues des [[Utilisateur:Mathieu_Loiseau/Cours/Master_DDL_—_Parcours_DILIPEM/M2_—_technologies_avancées_du_eLearning_2/exercices/Saisie_de_nombres|exercices de saisie de nombres]]}} | {{encart|Le code écrit ici réutilise des fonctions issues des [[Utilisateur:Mathieu_Loiseau/Cours/Master_DDL_—_Parcours_DILIPEM/M2_—_technologies_avancées_du_eLearning_2/exercices/Saisie_de_nombres|exercices de saisie de nombres]]}} | ||
+ | <syntaxhighlight lang="javascript" line> | ||
+ | /************************************ | ||
+ | * fonctions de existantes légèrement amendées | ||
+ | ************************************/ | ||
+ | function isDigit(caractere){ | ||
+ | var result; | ||
+ | switch(caractere.toString()){ | ||
+ | case "0": | ||
+ | case "1": | ||
+ | case "2": | ||
+ | case "3": | ||
+ | case "4": | ||
+ | case "5": | ||
+ | case "6": | ||
+ | case "7": | ||
+ | case "8": | ||
+ | case "9": | ||
+ | result = true; | ||
+ | break ; | ||
+ | default: | ||
+ | result = false; | ||
+ | } | ||
+ | return result; | ||
+ | } | ||
+ | |||
+ | //Prend une chaine de caractère et dit si c'est un nombre | ||
+ | function isNumber(word,min,max){ | ||
+ | //déclaration de variables | ||
+ | //isFloat : booléen qui dit si le “word” comporte (déjà) une virgule | ||
+ | var isFloat = word.charAt(0)=="," | ||
+ | || word.charAt(0)==".", | ||
+ | //result : booléen qui dit si le word est (pour le moment) un nombre | ||
+ | result = isDigit(word.charAt(0)) | ||
+ | || ( word.length > 1 | ||
+ | && (isFloat || word.charAt(0)=="-")); | ||
+ | //On initialise result à vrai si le premier caractère est un chiffre ou | ||
+ | //si c'est une virgule ou un moins, mais que le word contient d'autres caractères | ||
+ | /*On parcourt le reste du word (mais on s'arrête dès qu'on est sûr que ce n'est pas un | ||
+ | nombre. Dès que résultat sera faux, (result && i<word.length) sera faux.*/ | ||
+ | for(let i=1;result && i<word.length;i++){ | ||
+ | if(word.charAt(i)=="," || word.charAt(i)=="."){ | ||
+ | if(isFloat){ | ||
+ | result = false; | ||
+ | } | ||
+ | else{ | ||
+ | isFloat = true; | ||
+ | } | ||
+ | } | ||
+ | else if(!isDigit(word.charAt(i))){ | ||
+ | result = false; | ||
+ | } | ||
+ | } | ||
+ | //modification pour pouvoir demander un nombre compris entre min et max | ||
+ | if( (result!==false) | ||
+ | && (typeof min != "undefined")//paramètre optionnel | ||
+ | && (min !== false) // pas pris en compte s'il vaut faux | ||
+ | && (Number(word) < min)){ | ||
+ | result = false ; | ||
+ | } | ||
+ | if( (result!==false) | ||
+ | && (typeof max != "undefined")//paramètre optionnel | ||
+ | && (max !== false) // pas pris en compte s'il vaut faux | ||
+ | && (Number(word) > max)){ | ||
+ | result = false ; | ||
+ | } | ||
+ | return result; | ||
+ | } | ||
+ | |||
+ | function arrayToTable(theArray, tableId){ | ||
+ | var elt = document.getElementById(tableId), | ||
+ | res = theArray; | ||
+ | if(elt == null){ | ||
+ | //L'identifiant n'existe pas | ||
+ | console.error("arrayToTable : "+tableId + " n'existe pas dans le document."); | ||
+ | res = false; | ||
+ | } | ||
+ | else if(elt.tagName != "TABLE"){ | ||
+ | //L'identifiant n'existe pas | ||
+ | console.error("arrayToTable : "+tableId + " n'est pas une table ("+elt.tagName+")."); | ||
+ | res = false; | ||
+ | } | ||
+ | else{ | ||
+ | //on crée du contenu | ||
+ | var line = document.createElement("tr"); | ||
+ | for(let i=0;i<theArray.length;i++){ | ||
+ | line.innerHTML += "<td>"+theArray[i]+"</td>"; | ||
+ | } | ||
+ | //on le met dans l'élément | ||
+ | elt.appendChild(line); | ||
+ | } | ||
+ | return res; | ||
+ | } | ||
+ | |||
+ | /************************************* | ||
+ | * Nouvelles fonctions | ||
+ | *************************************/ | ||
+ | |||
+ | //renvoie un nombre de notes (≥ 1) ou false | ||
+ | function getNbCount(){ | ||
+ | var res = window.prompt("Combien y a-t-il eu de notes dans le trimestre ?"); | ||
+ | //Tant que l'utilisateur saisit une valeur qui n'est pas un nombre ≥ 1 on continue | ||
+ | while(res == "" || !isNumber(res,1) ){ | ||
+ | res = window.prompt("Combien y a-t-il eu de notes dans le trimestre ?"); | ||
+ | } | ||
+ | if(res == null){ | ||
+ | res = false; | ||
+ | } | ||
+ | else{ | ||
+ | res = Number(res); | ||
+ | } | ||
+ | return res; | ||
+ | } | ||
+ | |||
+ | //Renvoie un nom (ou false) | ||
+ | function getName(){ | ||
+ | var userText = window.prompt("Entrez le nom de l'élève"); | ||
+ | //on renvoie faux si l'utilisateur dit stop (ou annuler) | ||
+ | if((userText == null) || (userText =="stop")){ | ||
+ | userText = false; | ||
+ | } | ||
+ | return userText ; | ||
+ | } | ||
+ | |||
+ | //Récupère le nom et les notes | ||
+ | function getLine(nb){ | ||
+ | var res = false, | ||
+ | userText = getName(); | ||
+ | //si la saisie ne demande pas la fin du travail, on modifie res | ||
+ | if(userText!==false){ | ||
+ | nb = Number(nb); | ||
+ | res = [] ; | ||
+ | res.push(userText); | ||
+ | //on ajoute les notes (on interrompt le travail si l'utilisateur appuie sur annuler) | ||
+ | while( (res.length <= nb) && (userText != null) ){ | ||
+ | userText = window.prompt("Entrez la note n°"+res.length+"/"+nb+" de "+res[0]); | ||
+ | if(userText=="-"){ | ||
+ | //autoriser les absences | ||
+ | res.push("-"); | ||
+ | } | ||
+ | else if(isNumber(userText,0,20)){ | ||
+ | //refuser les notes non comprises entre 0 et 20 | ||
+ | res.push(Number(userText)); | ||
+ | } | ||
+ | } | ||
+ | if(userText == null){ | ||
+ | res = false; | ||
+ | } | ||
+ | } | ||
+ | return res ; | ||
+ | } | ||
+ | |||
+ | //Gère les interactions pour remplir la table | ||
+ | function fillTable(tableId){ | ||
+ | var count = getNbCount(); | ||
+ | if(count !== false){ | ||
+ | line = getLine(count); | ||
+ | while(line !== false){ | ||
+ | line.push(mean(line,false,1)); | ||
+ | arrayToTable(line, tableId); | ||
+ | line = getLine(count); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | //Remplit les tables et ajouter des moyennes | ||
+ | function fillTableWithMeans(tableId){ | ||
+ | var count = getNbCount(); | ||
+ | let completeTable = [] ; | ||
+ | if(count !== false){ | ||
+ | line = getLine(count); | ||
+ | while(line !== false){ | ||
+ | line.push(mean(line,false,1)); | ||
+ | completeTable.push(line); | ||
+ | arrayToTable(line, tableId); | ||
+ | line = getLine(count); | ||
+ | } | ||
+ | let means=["Moyenne"]; | ||
+ | for(let i=1;i<count;i++){ | ||
+ | means.push(mean(completeTable,i)); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </syntaxhighlight> |
Version du 29 janvier 2020 à 10:04
Le code écrit ici réutilise des fonctions issues des exercices de saisie de nombres
1 /************************************
2 * fonctions de existantes légèrement amendées
3 ************************************/
4 function isDigit(caractere){
5 var result;
6 switch(caractere.toString()){
7 case "0":
8 case "1":
9 case "2":
10 case "3":
11 case "4":
12 case "5":
13 case "6":
14 case "7":
15 case "8":
16 case "9":
17 result = true;
18 break ;
19 default:
20 result = false;
21 }
22 return result;
23 }
24
25 //Prend une chaine de caractère et dit si c'est un nombre
26 function isNumber(word,min,max){
27 //déclaration de variables
28 //isFloat : booléen qui dit si le “word” comporte (déjà) une virgule
29 var isFloat = word.charAt(0)==","
30 || word.charAt(0)==".",
31 //result : booléen qui dit si le word est (pour le moment) un nombre
32 result = isDigit(word.charAt(0))
33 || ( word.length > 1
34 && (isFloat || word.charAt(0)=="-"));
35 //On initialise result à vrai si le premier caractère est un chiffre ou
36 //si c'est une virgule ou un moins, mais que le word contient d'autres caractères
37 /*On parcourt le reste du word (mais on s'arrête dès qu'on est sûr que ce n'est pas un
38 nombre. Dès que résultat sera faux, (result && i<word.length) sera faux.*/
39 for(let i=1;result && i<word.length;i++){
40 if(word.charAt(i)=="," || word.charAt(i)=="."){
41 if(isFloat){
42 result = false;
43 }
44 else{
45 isFloat = true;
46 }
47 }
48 else if(!isDigit(word.charAt(i))){
49 result = false;
50 }
51 }
52 //modification pour pouvoir demander un nombre compris entre min et max
53 if( (result!==false)
54 && (typeof min != "undefined")//paramètre optionnel
55 && (min !== false) // pas pris en compte s'il vaut faux
56 && (Number(word) < min)){
57 result = false ;
58 }
59 if( (result!==false)
60 && (typeof max != "undefined")//paramètre optionnel
61 && (max !== false) // pas pris en compte s'il vaut faux
62 && (Number(word) > max)){
63 result = false ;
64 }
65 return result;
66 }
67
68 function arrayToTable(theArray, tableId){
69 var elt = document.getElementById(tableId),
70 res = theArray;
71 if(elt == null){
72 //L'identifiant n'existe pas
73 console.error("arrayToTable : "+tableId + " n'existe pas dans le document.");
74 res = false;
75 }
76 else if(elt.tagName != "TABLE"){
77 //L'identifiant n'existe pas
78 console.error("arrayToTable : "+tableId + " n'est pas une table ("+elt.tagName+").");
79 res = false;
80 }
81 else{
82 //on crée du contenu
83 var line = document.createElement("tr");
84 for(let i=0;i<theArray.length;i++){
85 line.innerHTML += "<td>"+theArray[i]+"</td>";
86 }
87 //on le met dans l'élément
88 elt.appendChild(line);
89 }
90 return res;
91 }
92
93 /*************************************
94 * Nouvelles fonctions
95 *************************************/
96
97 //renvoie un nombre de notes (≥ 1) ou false
98 function getNbCount(){
99 var res = window.prompt("Combien y a-t-il eu de notes dans le trimestre ?");
100 //Tant que l'utilisateur saisit une valeur qui n'est pas un nombre ≥ 1 on continue
101 while(res == "" || !isNumber(res,1) ){
102 res = window.prompt("Combien y a-t-il eu de notes dans le trimestre ?");
103 }
104 if(res == null){
105 res = false;
106 }
107 else{
108 res = Number(res);
109 }
110 return res;
111 }
112
113 //Renvoie un nom (ou false)
114 function getName(){
115 var userText = window.prompt("Entrez le nom de l'élève");
116 //on renvoie faux si l'utilisateur dit stop (ou annuler)
117 if((userText == null) || (userText =="stop")){
118 userText = false;
119 }
120 return userText ;
121 }
122
123 //Récupère le nom et les notes
124 function getLine(nb){
125 var res = false,
126 userText = getName();
127 //si la saisie ne demande pas la fin du travail, on modifie res
128 if(userText!==false){
129 nb = Number(nb);
130 res = [] ;
131 res.push(userText);
132 //on ajoute les notes (on interrompt le travail si l'utilisateur appuie sur annuler)
133 while( (res.length <= nb) && (userText != null) ){
134 userText = window.prompt("Entrez la note n°"+res.length+"/"+nb+" de "+res[0]);
135 if(userText=="-"){
136 //autoriser les absences
137 res.push("-");
138 }
139 else if(isNumber(userText,0,20)){
140 //refuser les notes non comprises entre 0 et 20
141 res.push(Number(userText));
142 }
143 }
144 if(userText == null){
145 res = false;
146 }
147 }
148 return res ;
149 }
150
151 //Gère les interactions pour remplir la table
152 function fillTable(tableId){
153 var count = getNbCount();
154 if(count !== false){
155 line = getLine(count);
156 while(line !== false){
157 line.push(mean(line,false,1));
158 arrayToTable(line, tableId);
159 line = getLine(count);
160 }
161 }
162 }
163
164 //Remplit les tables et ajouter des moyennes
165 function fillTableWithMeans(tableId){
166 var count = getNbCount();
167 let completeTable = [] ;
168 if(count !== false){
169 line = getLine(count);
170 while(line !== false){
171 line.push(mean(line,false,1));
172 completeTable.push(line);
173 arrayToTable(line, tableId);
174 line = getLine(count);
175 }
176 let means=["Moyenne"];
177 for(let i=1;i<count;i++){
178 means.push(mean(completeTable,i));
179 }
180 }
181 }