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?

Trois fois:

1) présence de poils,

2) présence de pics d'écailles ET des mamelles,

3) monotrème


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"&nbsp; en html + body html):


let nombre = 8;

let ligne1="+";

let ligne2="|";


while(nombre>0)

{

ligne1+="-+";

ligne2+="&nbsp; &nbsp;|";

nombre--

}


let bodyHtml= document.querySelector("body");

bodyHtml.innerHTML= "<p>" + ligne1 + "</p> <p>"+ligne2 + "</p> <p>"+ ligne1 + "</p> ";