« Technologies avancées du eLearning 2/exercices/Saisie de nombres » : différence entre les versions
De GBLL, TAL, ALAO, etc.
Aucun résumé des modifications |
|||
| Ligne 61 : | Ligne 61 : | ||
== Fonction {{code|estNombre}} == | == Fonction {{code|estNombre}} == | ||
Votre fonction est nombre doit passer le test suivant : | |||
<syntaxhighlight lang="javascript" line> | <syntaxhighlight lang="javascript" line> | ||
console.debug("Test de estNombre()"); | console.debug("Test de estNombre()"); | ||
| Ligne 110 : | Ligne 110 : | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Fonction {{code|saisieNombres}} == | |||
Cette fonction demande à l’utilisateur d’entrer des nombres, n’accepte que les nombres et les stocke dans un tableau tant qu’il n’a pas entré "stop" et ensuite renvoie le tableau. | |||
=== Correction === | |||
<syntaxhighlight lang="javascript" line>function saisieNombres(){ | |||
var thePrompt = "Saisissez un nombre", | |||
input = prompt(thePrompt), | |||
res = []; | |||
while (input != "stop"){ | |||
if(estNombre(input)){ | |||
thePrompt = "Saisissez un nombre" | |||
res.push(input); | |||
} | |||
else{ | |||
thePrompt = "On a dit un NOMBRE !!!" | |||
} | |||
input = prompt(thePrompt); | |||
} | |||
return res; | |||
}</syntaxhighlight> | |||
Version du 11 décembre 2018 à 12:28
Énoncés dans le support de cours (diapos 15 et 17).
Un codepen avec tout le code ci-dessous : https://codepen.io/lzbk/pen/gQvNXw
Fonction estChiffre
Nous avons vu plusieurs solutions possibles :
//En utilisant un switch/case
function estChiffre1(car){
var resultat=false;
switch(car){
case "0":
case "1":
case "2":
case "3":
case "4":
case "5":
case "6":
case "7":
case "8":
case "9":
resultat = true;
}
return resultat;
}
function estChiffre2(car){
//en utilisant l'ordre alphabétique (attention ça ne marche pas avec car<"10")
return (car>="0" && car<="9");
}
function estChiffre3(car){
//en utilisant un tableau des caractères autorisés
var resultat = false ;
var tabChiffres = ["0","1","2","3","4","5","6","7","8","9"];
for(let i=0;i<tabChiffres.length;i++){
if(tabChiffres[i] == car){
resultat = true;
}
}
return resultat;
}
function estChiffre4(car){
//avec un if
var resultat = false;
if ( car=="0"
|| car=="1"
|| car=="2"
|| car=="3"
|| car=="4"
|| car=="5"
|| car=="6"
|| car=="7"
|| car=="8"
|| car=="9"
){
resultat = true;
}
return resultat;
}Fonction estNombre
Votre fonction est nombre doit passer le test suivant :
console.debug("Test de estNombre()");
console.log("Chaine vide : false attendu → " , estNombre(""));
console.log("romains : false attendu → " ,estNombre("XIV"));
console.log("1 : true attendu → " , estNombre("1"));
console.log("123546590143 : true attendu → " , estNombre("123546590143"));
console.log("1.62345 : true attendu → " , estNombre("1.62345"));
console.log("-1 : true attendu → " , estNombre("-1"));
console.log("-13240,2303458 : true attendu → " , estNombre("-13240,2303458"));
console.log("12345a12235 : false attendu → " , estNombre("12345a12235"));
console.log("12345-12235 : false attendu → " , estNombre("12345-12235"));
console.log("23.34562.234 : false attendu → " , estNombre("23.34562.234"));
console.log(".345 : true attendu → " , estNombre(".345"));
console.log(", : false attendu → " , estNombre(","));
console.log("- : false attendu → " , estNombre("-"));Correction
//Prend une chaine de caractère et dit si c'est un nombre
function estNombre(mot){
//déclaration de variables
//aVirgule : booléen qui dit si le “mot” comporte (déjà) une virgule
var aVirgule = mot.charAt(0)==","
|| mot.charAt(0)==".",
//resultat : booléen qui dit si le mot est (pour le moment) un nombre
resultat = estChiffre1(mot.charAt(0))
|| ( mot.length > 1
&& (aVirgule || mot.charAt(0)=="-"));
//On initialise resultat à vrai si le premier caractère est un chiffre ou
//si c'est une virgule ou un moins, mais que le mot contient d'autres caractères
/*On parcourt le reste du mot (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, (resultat && i<mot.length) sera faux.*/
for(let i=1;resultat && i<mot.length;i++){
if(mot.charAt(i)=="," || mot.charAt(i)=="."){
if(aVirgule){
resultat = false;
}
else{
aVirgule = true;
}
}
else if(!estChiffre1(mot.charAt(i))){
resultat = false;
}
}
return resultat;
}Fonction saisieNombres
Cette fonction demande à l’utilisateur d’entrer des nombres, n’accepte que les nombres et les stocke dans un tableau tant qu’il n’a pas entré "stop" et ensuite renvoie le tableau.
Correction
function saisieNombres(){
var thePrompt = "Saisissez un nombre",
input = prompt(thePrompt),
res = [];
while (input != "stop"){
if(estNombre(input)){
thePrompt = "Saisissez un nombre"
res.push(input);
}
else{
thePrompt = "On a dit un NOMBRE !!!"
}
input = prompt(thePrompt);
}
return res;
}