Actions

Cours

« 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 180 : Ligne 180 :
means.push(mean(completeTable,i));
means.push(mean(completeTable,i));
}
}
arrayToTable(means, tableId);
}
}
}
}
</syntaxhighlight>
</syntaxhighlight>

Version du 29 janvier 2020 à 09:06

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));
		}
		arrayToTable(means, tableId);
	}
}