Actions

Cours

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 }