Page 1 sur 2

Boucle en PHP : problème de compréhension

Posté : 23 avr. 2014, 12:27
par didoune
Bonjour,

Je débute en php et j'ai du mal à comprendre les bases c'est à dire le principe des boucles avec "While" et "for" et les tableaux avec "Array". Les cours vont trop vite pour moi... et j'ai du mal avec les exercices.
J'ai beau regarder sur les tutos mais cela bloque toujours à un moment.
Je vous propose trois exercices que j'ai fait et de vous noter les réponses qui me semblent logiques et si vous pouviez m'éclairer par la suite pour voir si j'ai bien compris cela serai super sympa.

Exemple n°1 : Boucle avec While

Code : Tout sélectionner

$j=6; $result=3; While ($j>0 { $j=$j-2; $result=$result+$j; }
Mon avis: Avec While la boucle sera exécuté tant que $j sera >0 donc elle va être exécuter avec $j = 6, puis quand $j =4, puis $j=2 puis arrêt car $J va être =à 0
Le $result va prendre les valeurs suivantes : 9, 7, et 5 lors de la dernière boucle
La boucle va s’exécuter 3 fois

C'est bon ?

Exemple n°2 : Boucle avec For

Code : Tout sélectionner

$j=0; for ($i=0 ; $i<=5 ; $i++) { $j++; }
Mon avis: Ici la boucle va débuter avec la valeur de 0 et sera interrompu quand $i sera < à 5 et la boucle incrémentera de 1 par 1 la valeur initiale
Donc la boucle va s'exécuter avec la première valeur qui est 0, puis 1, 2, 3, 4 et 5 : elle va donc s'exécuter 6 fois
La valeur finale de J sera donc 6

C'est bon ?

Exemple n°3 : Boucle dans un tableau (alors c'est chaud pour moi)

Code : Tout sélectionner

$tableau=array (2,5,4,5,9); $X=$tableau[2] * $tableau[3]/ $tableau[1] ; $ret=0; $result=0; for ($i=0 ; $i<5 ; $i++){ $result = $result + $tableau [$i]; If ($ret < $tableau [$i]) { ($ret=$tableau[$i]}; }
La j'ai du mal : $X vaut 10
Mais je n'arrive pas à savoir combien vaut $result à la fin de la boucle ainsi que $ret ????

Merci de prendre un peu de temps

Bonne journée

Re: Boucle en PHP : problème de compréhension

Posté : 23 avr. 2014, 13:12
par xTG
1) ok
2) ok
3) $result est la somme des valeurs stockées dans $tableau. $ret est la valeur maximum de $tableau.

Re: Boucle en PHP : problème de compréhension

Posté : 23 avr. 2014, 13:44
par didoune
1) ok
2) ok
3) $result est la somme des valeurs stockées dans $tableau. $ret est la valeur maximum de $tableau.
Merci pour les réponses.

Mais je ne comprends pas toujours le problème n°3 : Comment sais-tu tes deux affirmations ?

Si je reprends la première ligne : On m'indique 5 valeurs contenues dans un tableau. Je sais que la première case correspond à la case n°0.
Après on me donne une variable $X qui va correspondre ici à 10 en ayant fait le calcul.
Après on me donne la valeur de $ret et $result au debut de la boucle ? puis les conditions avec for ok mais après je ne comprends pas le $tableau [$i] et encore moins le dernière ligne : If ($ret < $tableau [$i]) { ($ret=$tableau[$i]};
En fait je ne comprend pas le chemin de la boucle ?

Merci

Didoune

Re: Boucle en PHP : problème de compréhension

Posté : 23 avr. 2014, 15:55
par xTG
$tableau=array (2,5,4,5,9);
$X=$tableau[2] * $tableau[3]/ $tableau[1] ;
$ret=0;
$result=0;
for ($i=0 ; $i<5 ; $i++)
{
   $result = $result + $tableau [$i];
   If ($ret < $tableau [$i]) 
   { 
      $ret=$tableau[$i];
   }
}
Itération 1 :
$i vaut 0.
$result vaut : 0 + $tableau[$i] => $tableau[$i] = $tableau[0] = 2 => $result vaut 2
Si $ret est inférieur à $tableau[$i] ($tableau[0]) alors on remplaces $ret par $tableau[$i].
$ret vaut 0, $tableau[$i] vaut 2 => on stocke 2 dans $ret.

Itération 2 :
$i vaut 1.
$result vaut : 2(valeur de $result) + $tableau[$i] => $tableau[$i] = $tableau[1] = 5 => $result vaut 2 + 5 = 7
$ret vaut 2, $tableau[$i] vaut 5 => on stocke 5 dans $ret.

Itération 3 :
$i vaut 2.
$result vaut : 7(valeur de $result) + $tableau[$i] => $tableau[$i] = $tableau[2] = 4 => $result vaut 7 + 4 = 11
$ret vaut 5, $tableau[$i] vaut 4 => on ne fait rien.

Itération 4 :
$i vaut 3.
$result vaut : 11(valeur de $result) + $tableau[$i] => $tableau[$i] = $tableau[3] = 5 => $result vaut 11 + 5 = 16
$ret vaut 5, $tableau[$i] vaut 5 => on ne fait rien.

Itération 5 :
$i vaut 4.
$result vaut : 16(valeur de $result) + $tableau[$i] => $tableau[$i] = $tableau[4] = 9 => $result vaut 16 + 9 = 25
$ret vaut 5, $tableau[$i] vaut 9 => on stocke 9 dans $ret.

Itération 6 :
$i vaut 5. On sort de la boucle.

Résultat :
$result = 25
$ret = 9

Re: Boucle en PHP : problème de compréhension

Posté : 23 avr. 2014, 17:55
par didoune
Super xTG,
J'ai tout compris.
En fait le $X ne sert à rien c'est cela qui m'a embrouillé.

J'ai refait un exercice afin d'être sur que j'ai en effet tout compris :shock:
$tableau=array (2,5,4,5,1);
$X=$count($tableau) ;
$ret=0;
$result=0;
for ($i=0 ; $i<$X ; $i++)
{
   $result = $result + $tableau [$i];
   If ($ret < $tableau [$i])
   {
      $ret=$tableau[$i];
   }
}
Donc ici $x correspond au nombre d'éléments dans le tableau = 5

Itération n°1 :
$i = 0
$result=0+2=2
$ret=0 et <2 donc $ret prend la valeur de $tableau[0] soit 2

Itération n°2:
$i = 1
$result=2+5=7
$ret=2 et <5 donc $ret prend la valeur de $tableau[1] soit 5

Itération n°3:
$i = 2
$result=7+4=11
$ret=5 et pas <4 donc $ret garde la valeur de 5

Itération n°4:
$i = 3
$result=11+5=16
$ret=5 et pas <5 donc $ret garde la valeur de 5

Itération n°5:
$i = 4
$result=16+1=17
$ret=5 et pas <1 donc $ret garde la valeur de 5

Itération n°6:
$i = 5 et comme $i plus < à $X la boucle s'arrête

La boucle à donc eut 5 itérations et les valeurs de $Result et $ret sont à la fin respectivement 17 et 5

Est-ce bon ?

Didoune

Re: Boucle en PHP : problème de compréhension

Posté : 23 avr. 2014, 18:05
par sirakawa
Bjr,
Autre façon d'aborder le problème en corrigeant plusieurs syntaxes fausses.
<!--Question 1 -->
<?PHP
/*il n'y a qu'à mettre des assertions*/
$j=6;
$result=3;
/*corrigeons déjà la syntaxe*/
while ($j>0)
{
/*$j vaut successivement 6, 4, 2, 0*/
$j=$j-2;
/*$j vaut successivement 4, 2, 0*/
/*$result vaut $result + $j : 3+4, donc 7, puis 7 =2 donc 9 * /
$result=$result+$j;
print "<br>$j $result";
}
/*$j est inférieur ou égal à 0 */
print "<br> $result final";
?>

<!--Question 3-->
<?PHP

$tableau = array (2,5,4,5,9);
/*explicitons */
echo ($tableau [0]);
echo ("<br />");
echo ($tableau [1]);
echo ("<br />");
echo ($tableau [2]);
echo ("<br />");
echo ($tableau [3]);
echo ("<br />");
echo ($tableau [4]);
echo ("<br />");
/*ou*/
print_r($tableau);
echo ("<br />");
/*ou*/
var_dump ($tableau);
echo ("<br />");

/*$X est évident */
$X=$tableau[2] * $tableau[3]/ $tableau[1] ;
print "$X";

$ret=0;
$result=0;
/*pour les éléments du tableau d'indice 0 à 4 c'est à dire tous*/
for ($i=0 ; $i<5 ; $i++)
{
/*result est la somme des éléments déjà parcourus*/
$result = $result + $tableau [$i];
/*si $ret est inférieur à l'élément courant, il prend la valeur de cet élément Il est donc le plus grand des éléments déjà parcourus*/
if ($ret < $tableau [$i])
{
$ret=$tableau[$i];
}
}
/*result est la somme des éléments du tableau*/
print "<br /> result $result";
/*$ret est le max du tableau*/
print "<br> ret $ret";
?>

Re: Boucle en PHP : problème de compréhension

Posté : 23 avr. 2014, 18:06
par didoune
Mais j'ai un doute, si je regarde mon exercice précédemment :

Exemple n°1 : Boucle avec While

Code : Tout sélectionner

$j=6; $result=3; While ($j>0 { $j=$j-2; $result=$result+$j; }
Mon avis: Avec While la boucle sera exécuté tant que $j sera >0 donc elle va être exécuter avec $j = 6, puis quand $j =4, puis $j=2 puis arrêt car $J va être =à 0
Le $result va prendre les valeurs suivantes : 9, 7, et 5 lors de la dernière boucle
La boucle va s’exécuter 3 fois
En fait pour les valeurs successives de $result=$result+$j pourquoi ici on ne conserve pas les valeurs précédentes obtenues
cela ferais $result =9, puis 13 puis 15 ?

Plus clair :cry:

Didoune

Re: Boucle en PHP : problème de compréhension

Posté : 23 avr. 2014, 18:14
par didoune
Oula sirakawa je comprends plus rien OUINNNNNNN

Dans l'exercice n° 1 la boucle débute donc avec la valeur de $j = 4 ?

Pourquoi ?

Merci pour vos apports

Didioune

Re: Boucle en PHP : problème de compréhension

Posté : 23 avr. 2014, 18:32
par sirakawa
$j=6;
$result=3;
while ($j>0)
{
/*la boucle commence avec la valeur 6 pour $j*/
/*mais $j est décrémenté aussitôt (c'est la ruse du prof) et vaut donc 4 avant l'addition*/
$j=$j-2;

$result=$result+$j;
/*$result conserve sa valeur d'une itération sur l'autre*/
}

Re: Boucle en PHP : problème de compréhension

Posté : 23 avr. 2014, 18:49
par didoune
$j=6;
$result=3;
while ($j>0)
{
/*la boucle commence avec la valeur 6 pour $j*/
/*mais $j est décrémenté aussitôt (c'est la ruse du prof) et vaut donc 4 avant l'addition*/
$j=$j-2;
Ok quel coquin ce Prof ;-)
$result=$result+$j;
/*$result conserve sa valeur d'une itération sur l'autre*/
}
La je ne comprends pas pourquoi il garde la valeur de 3 ?

Merci

Didoune

Re: Boucle en PHP : problème de compréhension

Posté : 23 avr. 2014, 19:16
par sirakawa
Il faudrait quand même comprendre quelque chose à l'affectation avant tout le reste (ça devait être le premier cours):
$var = 3;
$var = $var +5; // à partir d elà $var vaut 5
for ($i=0 ; $i<5 ; $i++)
{
	/*result est la somme des éléments déjà parcourus*/
	$result = $result + $tableau [$i]; //$result prend une nouvelle valeur qu'il conserve jusqu'à l'itération suivante
	/*si $ret est inférieur à l'élément courant, il prend la valeur de cet élément Il est donc le plus grand des éléments déjà parcourus*/
	if ($ret < $tableau [$i]) 
	{ 
		$ret=$tableau[$i];
	}
}
Et il est bien évident que si je nomme $somme_tableau la variable $result, la question comprend sa réponse. Un pb possible similaire est:
écrivez un programme qui fasse la somme des nombres d'un tableau ou des nombres pairs d'un tableau...

Re: Boucle en PHP : problème de compréhension

Posté : 23 avr. 2014, 20:04
par didoune
Il faudrait quand même comprendre quelque chose à l'affectation avant tout le reste (ça devait être le premier cours):
$var = 3;
$var = $var +5; // à partir delà $var vaut 5
Je comprends pour le tableau mais je parle du $result de :

$j=6;
$result=3;
While ($j>0 {
$j=$j-2;
$result=$result+$j;
}

La valeur initiale est 3 mais quand la boucle démarre $result va devenir 3+4 =7 puis 7+2 = 9 ok ?

Didoune

Re: Boucle en PHP : problème de compréhension

Posté : 23 avr. 2014, 20:14
par xTG
La valeur initiale est 3 mais quand la boucle démarre $result va devenir 3+4 =7 puis 7+2 = 9 ok ?
Tout à fait. :)

Re: Boucle en PHP : problème de compréhension

Posté : 23 avr. 2014, 20:24
par didoune
La valeur initiale est 3 mais quand la boucle démarre $result va devenir 3+4 =7 puis 7+2 = 9 ok ?
Tout à fait. :)
Donc la boucle ne marche que deux fois

Didoune

Re: Boucle en PHP : problème de compréhension

Posté : 23 avr. 2014, 20:40
par xTG
En vérité elle fonctionne 3 fois si on veut être strict.
La troisième fois c'est quand $j vaut 0, il faut bien vérifier la condition de sortie de la boucle.
Le contenu de la boucle n'est exécuté que 2 fois, mais la boucle (comprendre la vérification de sa condition de fin) est exécutée 3 fois.