« Technologies avancées du eLearning 2/exercices/Saisie de notes » : différence entre les versions
De GBLL, TAL, ALAO, etc.
Aucun résumé des modifications |
Aucun résumé des modifications |
||
| 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 à 09:04
Le code écrit ici réutilise des fonctions issues des exercices de saisie de nombres
/************************************
* 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));
}
}
}