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|Énoncé dans le [[:File:775-M2_DILIPEM_TechnosAv2.pdf|support de cours]] diapo 25 |
+ | |||
+ | 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> | <syntaxhighlight lang="javascript" line> | ||
/************************************ | /************************************ |
Version du 29 janvier 2020 à 10:09
Énoncé dans le support de cours diapo 25
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 arrayToTable(means, tableId);
181 }
182 }