Exercice Boucle
Exercice 1
Considérons le pseudo-code suivant:
Les critères d'un mammifère sont: [présence de poils, présence de pics d'écailles ET des mamelles, monotrème ]
Tant qu'il y a encore des critères:
Si le critère est respecté, alors d'animal est un mammifère
Question 1: Quelles sont les types de bloc d'instructions que l'on retrouve dans ce pseudo code?
1) Une boucle (tant qu'il y a des critères)
2) Une condition Si-alors
Question 2: Combien de fois entre-t-on dans la boucle? Quelles sont, dans ordre, les conditions que l'on va vérifier dans la boucle?
Question 3: Si on a un animal à poil et sans mamelle, est-ce un mammifère selon cet algorithme? Pourquoi?
Ou, car le premier critère est respectée: il a des poils.
Question 4: Si on a un animal à plumes et avec mamelles, est-ce un mammifère selon cet algorithme et pourquoi?
Non:
Présence de poils n'est pas vrai
présence de pics d'écailles ET des mamelles n'est pas vrai
monotrème n'est pas vrai.
Question 5: Si on a un animal à écailles, sans mamelles et qui n'est pas un monotrème, est-ce un mammifère selon cet algorithme et pourquoi?
Non.
Présence de poils n'est pas vrai
présence de pics d'écailles ET des mamelles n'est pas vrai
monotrème n'est pas vrai.
Question 6: Le.s.quel.s parmi ces programmes correspondent à l'implémentation du pseudo-code de l'exercice et pourquoi ? :
Programme 1:
mammifere=false;
criteres=
if (poils==true)
{
mammifere=true;
}
else if (ecailles==true || pics==true)
{
if (mamelles==true)
{mammifere=true;}
else if (monotreme==true)
{mammifere=true;}
}
else {
mammifere=false;
}
Programme 2:
if (poils==true)
{
mammifere=true;
}
else if (ecailles==true || pics==true)
{
if (mamelles==true)
{mammifere=true;}
else
{mammifere=true;}
}
else if (monotreme==true){
mammifere=false;
}
Programme 3:
if (poils)
{
mammifere=true;
}
else if (ecailles || pics)
{
if (mamelles)
{mammifere=true;}
else if (monotreme)
{mammifere=true;}
}
else {
mammifere=false;
}
Pour la correction: cliquer sur la ligne juste après:
Programme 1 fonctionne.
Programme 2 non: on a interverti le else et le else-if
Programme 3 fonctionne.
Exercice 2
Considérons le programme suivant:
//Instanciation de compteur + efface le texte de la page
compteur=Number(prompt("Combien?"));
let bodyHtmlEfface= document.querySelector("body");
bodyHtmlEfface.innerHTML=""; //efface le cord de la page web
if (isNaN(compteur))
{
let bodyHtml= document.querySelector("body");
bodyHtml.innerHTML=bodyHtml.innerHTML+ "<p> Compteur n'est pas un nombre (NaN). Entrer un nombre s'il vous plait </p>";
}
else
{
while (compteur >0)
{
let bodyHtml= document.querySelector("body");
bodyHtml.innerHTML=bodyHtml.innerHTML+ "<p> Bonjour "+ compteur + "</p>";
compteur--;
}
}
Question 1: Que fait ce code de manière générale?
Il efface le texte d'une page web (tout ce qui est dans le body) et il inscrit "Compteur n'est pas un nombre (NaN). Entrer un nombre s'il vous plait " si l'utilisateur n'a pas entré un nombre. Si l'utilisateur à rentrer un nombre, il affiche à chaque ligne "Bonjour" suivi d'un nombre qui vaut moins un à chaque ligne
Question 2: Quelle est la condition pour continuer la boucle while ?
si compteur est supérieur à 0
Question 3: Que fait ce code si l'utisateur entre 1
Il affiche une page web qui dit
Bonjour 1
(code html dans les balises body: <p> Bonjour 1 </p> )
Question 4: Que fait ce code si l'utisateur entre 2
Il affiche une page web qui dit
Bonjour 2
Bonjour 1
(code html dans les balises body: <p> Bonjour 2 </p> <p> Bonjour 1 </p> )
Question 5: Que fait ce code si l'utisateur entre ejarhfjrferk
Il affiche une page web qui dit
Compteur n'est pas un nombre (NaN). Entrer un nombre s'il vous plait
(code html dans les balises body: <p> Compteur n'est pas un nombre (NaN). Entrer un nombre s'il vous plait </p>" )
Question 6: Modifier ce code avec une boucle pour que la page web re-commence sans cesse
(demande "Combien" et modifier la page)
Il faut rajouter une boucle "autour" :
while (true)
{
compteur=Number(prompt("Combien?"));
let bodyHtmlEfface= document.querySelector("body");
bodyHtmlEfface.innerHTML=""; //efface le cord de la page web
if (isNaN(compteur))
{
let bodyHtml= document.querySelector("body");
bodyHtml.innerHTML=bodyHtml.innerHTML+ "<p> Compteur n'est pas un nombre (NaN). Entrer un nombre s'il vous plait </p>";
}
else
{
while (compteur >0)
{
let bodyHtml= document.querySelector("body");
bodyHtml.innerHTML=bodyHtml.innerHTML+ "<p> Bonjour "+ compteur + "</p>";
compteur--;
}
}
}
Question Bonus: mettre le code de la consigne dans une fonction, et utiliser cette fonction dans la boucle pour que la page web re-commence sans cesse
(demande "Combien" et modifier la page)
Il faut rajouter une boucle "autour" :
function codeExercice6()
{
compteur=Number(prompt("Combien?"));
let bodyHtmlEfface= document.querySelector("body");
bodyHtmlEfface.innerHTML=""; //efface le cord de la page web
if (isNaN(compteur))
{
let bodyHtml= document.querySelector("body");
bodyHtml.innerHTML=bodyHtml.innerHTML+ "<p> Compteur n'est pas un nombre (NaN). Entrer un nombre s'il vous plait </p>";
}
else
{
while (compteur >0)
{
let bodyHtml= document.querySelector("body");
bodyHtml.innerHTML=bodyHtml.innerHTML+ "<p> Bonjour "+ compteur + "</p>";
compteur--;
}
}
}
while (true)
{
codeExercice6();
}
Exercice 3
L'idée de l'exercice est de faire un tableau avec les caractères + - |
Question 1: Décrire en pseudo code comment concatener autant de fois -+ que souhaité.
Par exemple:
1 fois : -+
2 fois : -+-+
3 fois : -+-+-+
10 fois : -+-+-+-+-+-+-+
Solution 1:
nombre = nombre de fois
Tant que nombre est supérieur à 0
concaténer une fois de plus -+
soustraire 1 à nombre
Solution 2:
nombre = nombre de fois
Faire autant de fois que nombre:
concaténer une fois de plus -+
On peut également utiliser une variable supplémentaire pour stocker la chaine de caractère qui sert à concaténer les -+
Solution 1bis:
nombre = nombre de fois
ligne = une chaine de caractères
Tant que nombre est supérieur à 0
ajouter -+ à la suite de ligne
soustraire 1 à nombre
Solution 2:
nombre = nombre de fois
ligne = une chaine de caractères
Faire autant de fois que nombre:
ajouter -+ à la suite de ligne
Question 2: Ecrire le code en Javascript pour afficher la ligne telle que décrit question 1 (au choix: dans un alert ou dans le corps du texte d'une page web).
L'utilisateur peut entrer un chiffre ou vous pouvez simplement modifier la variable dans le code source.
Solution 1 (entrée utilisateur via prompt+ alert):
let nombre = prompt("Taille de la ligne");
let ligne="";
while(nombre>0)
{
ligne+="-+";
nombre--
}
alert(ligne);
Solution 2 (valeur dans le code source, ici 8 + body html):
let nombre = 8;
let ligne="";
while(nombre>0)
{
ligne+="-+";
nombre--
}
let bodyHtml= document.querySelector("body");
bodyHtml.innerHTML=ligne;
Question 3: Modifier le pseudo code de la question 1 pour commencer et finir par un "+"
Par exemple:
1 fois : +-+
2 fois : +-+-+
3 fois : +-+-+-+
10 fois : +-+-+-+-+-+-+-+
Solution 1:
nombre = nombre de fois
commencer par un +
Tant que nombre est supérieur à 0
concaténer une fois de plus -+
soustraire 1 à nombre
Solution 2:
nombre = nombre de fois
commencer par un +
Faire autant de fois que nombre:
concaténer une fois de plus -+
On peut également utiliser une variable supplémentaire pour stocker la chaine de caractère qui sert à concaténer les -+
Solution 1bis:
nombre = nombre de fois
ligne = une chaine de caractères égale au caractère +
Tant que nombre est supérieur à 0
ajouter -+ à la suite de ligne
soustraire 1 à nombre
Solution 2:
nombre = nombre de fois
ligne = une chaine de caractères égale au caractère +
Faire autant de fois que nombre:
ajouter -+ à la suite de ligne
Question 4: modifier le code de la question 2 pour commencer et finir par un "+"
L'utilisateur peut entrer un chiffre ou vous pouvez simplement modifier la variable dans le code source.
Solution 1 (entrée utilisateur via prompt+ alert):
let nombre = prompt("Taille de la ligne");
let ligne="+";
while(nombre>0)
{
ligne+="-+";
nombre--
}
alert(ligne);
Solution 2 (valeur dans le code source, ici 8 + body html):
let nombre = 8;
let ligne="+";
while(nombre>0)
{
ligne+="-+";
nombre--
}
let bodyHtml= document.querySelector("body");
bodyHtml.innerHTML=ligne;
Question 5: Quelle modification doit-on faire au pseudo-code et au code de la question 2 et 3 pour faire des lignes alterant les caractères | et (espace)?
Par exemple:
1 fois : | |
2 fois : | | |
3 fois : | | | |
10 fois : | | | | | | | | |
Il suffit de replace le caractère - par espace, et + par |
Question 6: Adapter le code de la question 4 pour faire une ligne avec le nombre de case donnée:
Par exemple:
1 fois :
+-+
| |
+-+
2 fois :
+-+-+
| | |
+-+-+
3 fois :
+-+-+-+
| | | |
+-+-+-+
10 fois :
+-+-+-+-+-+-+-+
| | | | | | | | |
+-+-+-+-+-+-+-+
appuyer sur la ligne pour afficher la solution:
Solution 1 (faire trois boucles+ alert) :
let nombre = prompt("Taille de la ligne");
let ligne="+";
let compteurBoucle=nombre;
while(compteurBoucle>0)
{
ligne+="-+";
compteurBoucle--
}
ligne+="\n|"; //retour à la ligne et première barre de la ligne suivante
compteurBoucle=nombre; //remettre le compteure à zéro
while(compteurBoucle>0)
{
ligne+=" |";
compteurBoucle--
}
ligne+="\n+"; //retour à la ligne et première croix de la ligne suivante
compteurBoucle=nombre; //remettre le compteure à zéro
while(compteurBoucle>0)
{
ligne+="-+";
compteurBoucle--
}
alert(ligne);
Solution 2 (faire plusieurs lignes dans une boucle et les concaténer plus tard + body html):
let nombre = 8;
let ligne1="+";
let ligne2="|";
while(nombre>0)
{
ligne1+="-+";
ligne2+=" |";
nombre--
}
let bodyHtml= document.querySelector("body");
bodyHtml.innerHTML= "<p>" + ligne1 + "</p> <p>"+ligne2 + "</p> <p>"+ ligne1 + "</p> ";
Solution 2bis (idem avec le code "espace" en html + body html):
let nombre = 8;
let ligne1="+";
let ligne2="|";
while(nombre>0)
{
ligne1+="-+";
ligne2+=" |";
nombre--
}
let bodyHtml= document.querySelector("body");
bodyHtml.innerHTML= "<p>" + ligne1 + "</p> <p>"+ligne2 + "</p> <p>"+ ligne1 + "</p> ";