les boucles en php for-d-while exercices corrigés TP avec solution

Le traitement itératif en PHP5 : La boucle For - la boucle While - La boucle Do...While

Exercice 1 : 


Effectuer une suite de tirages de nombres aléatoires jusqu’à obtenir une suite composée d’un nombre pair suivi de deux nombres impairs.

Solution :



<?php
$compteur=0;
do
{
$x=rand(0,1000);
$y=rand(0,1000);
$z=rand(0,1000);
$compteur++;
echo $x, "," , $y, "," , $z,"<br />";
}
while($x%2==1 OR $y%2==0 OR $z%2==0);
echo "Résultat obtenu en $compteur coups";
?>

Exemple de résultat obtenu :

194,285,494
435,759,162
237,292,768
366,533,397
Résultat obtenu en 4 coups


Exercice 2 : 



Créer et afficher des numéros d’immatriculation automobile (pour Paris, par exemple) en commençant au numéro 100 PHP 75. Effectuer ensuite la même procédure en mettant en réserve les numéros dont le premier groupe de chiffres est un multiple de 100. Stocker ces numéros particuliers dans un tableau.

Si on réalise le script complet, il affiche plusieurs millions de numéros de 100 PHP 75 à 999 ZZZ 75. L’exécution est donc très longue et risque de bloquer le serveur. Pour effectuer un test, les valeurs des chiffres sont limitées ci-dessous entre 100 et 120.


Solution :



<?php
$initx=80;//lettre P
$inity=72;//lettre H
$initz=80;//lettre P

//Boucles imbriquées
for($x=$initx;$x<=90;$x++)
{
for($y=$inity;$y<=90;$y++)
{
for($z=$initz;$z<=90;$z++)
{
for($num=100;$num<120;$num++)
{
echo "Numéro : $num ",chr($x),chr($y),chr($z)," 75<br />";
}
$initz=65;//on repart à la lettre A pour le troisième
caractère
}
$inity=65;//on repart à la lettre A pour le deuxième caractère
}
}
?>


Pour ne conserver que les nombres multiples de 100 nous remplaçons l’instruction echo par le stockage des numéros dans un tableau. Il est affiché à la fin de toutes les boucles à l’aide de la fonction print_r(). On constate alors qu’il contient déjà 65150 éléments !

<?php
$initx=80;//lettre P
$inity=72;//lettre H
$initz=80;//lettre P
//Boucles imbriquées
for($x=$initx;$x<=90;$x++)
{
for($y=$inity;$y<=90;$y++)
{
for($z=$initz;$z<=90;$z++)
{
for($num=100;$num<1000;$num+=100)
{
$tab[]="$num".chr($x).chr($y).chr($z)." 75";
}
$initz=65;//on repart à la lettre A pour le troisième caractère

}
$inity=65;//on repart à la lettre A pour le deuxième caractère
}
}
print_r($tab);
?>







Exercice 3 : 



Choisir un nombre de trois chiffres. Effectuer ensuite des tirages aléatoires et compter le nombre de tirages nécessaire pour obtenir le nombre initial. Arrêter les tirages et afficher le nombre de coups réalisés. Réaliser ce script d’abord avec l’instruction while puis avec l’instruction for.


Solution :




Avec une boucle while


<?php
//Nombre à trouver
$nb=789;
//compteur
$coup=0;
//boucle de tirage
while($x!=$nb)
{
$x=rand(0,1000);
$coup++;
//echo $x,"<br />";//pour afficher tous les tirages
}
echo "$nb trouvé en $coup coups ";
?>

Avec une boucle for


<?php
//Nombre à trouver
$nb=789;
//boucle de tirage
for($coup=1;$x!=$nb;$coup++)
{
$x=rand(0,1000);
//echo $x,"<br />";//pour afficher tous les tirages
}
echo "$nb trouvé en $coup coups ";
?>

Notez qu’il est rare d’obtenir le nombre cherché en moins de 100 tirages.




Exercice 4 : 



Créer un tableau dont les indices varient de 11 à 36 et dont les valeurs sont des lettres de A à Z. Lire ensuite ce tableau avec une boucle for puis une boucle foreach et afficher les indices et les valeurs (la fonction chr(n) retourne le caractère dont le code ASCII vaut n).

Solution :



<?php
for($i=11;$i<=36;$i++)
{
$tab[$i]=chr(54+$i);
}
//Lecture avec for
for($i=11;$i<=36;$i++)
{
echo "Elément d'indice $i : $tab[$i] <br />";
}
echo "<hr />";
//Lecture avec foreach
foreach($tab as $cle=>$valeur)
{
echo "Elément d'indice $cle : $valeur <br />";
}
?>




Exercice 6 : 



Utiliser une boucle while pour déterminer le premier entier obtenu par tirage aléatoire qui soit un multiple d’un nombre donné.

Écrire la variante utilisant la boucle do…while.


Solution :




Avec une boucle while, notez qu’il faut initialiser $x avant la boucle.


<?php
$nb=57;
$compteur=0;
$x=rand(0,1000);
//Boucle while
while($x%$nb!=0)
{
$x=rand(0,1000);
$compteur++;
}
echo "$x est multiple de $nb: Résultat obtenu en $compteur coups";
?>



Avec une boucle do…while il n’est pas nécessaire d’initialiser $x.




<?php
$nb=57;
$compteur=0;
do
{
$x=rand(0,1000);
$compteur++;
}
while($x%$nb!=0);
echo "$x est multiple de $nb: Résultat obtenu en $compteur coups";
?>



Exercice 7 : 



Rechercher le PGCD (plus grand commun diviseur) de deux nombres donnés. Gérer au moyen d’une exception le cas où au moins un des nombres n’est pas entier.


Si vous avez oublié l’algorithme d’Euclide pour calculer le PGCD visitez le site :

http://villemin.gerard.free.fr/ThNbDemo/AlgoEucl.htm




Solution :




<?php
//Il faut $A > $B
$A=56952;
$B=3444;
try
{
if(!(is_integer($A) OR is_integer($b)))
{throw new Exception("Nombre(s) non entiers !",99);}
else
{
echo "Le PGCD de $A et $B est : ";
do
{
$R=$A%$B;
$A=$B;
$B=$R;
}
while($R!=0);
echo $A ;
}
}
catch(Exception $except)
{
echo $except->getMessage();
}
?>

Le résultat affiché est ici :

Le PGCD de 56952 et 3444 est : 84



Article plus récent Article plus ancien

Leave a Reply