Boucle en PHP : problème de compréhension

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Boucle en PHP : problème de compréhension

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

par didoune » 24 avr. 2014, 19:50

Ok je crois que j'ai compris merci à xTG, à sirakawa et à telnes pour vos explication c'est super sympa

Bonne soirée

Didoune

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

par telnes » 24 avr. 2014, 11:15

hello

n'hésite pas a ajouter des 'echo/print' dans ton code pour comprendre ce qu'il se passe

si tu exécute dans le navigateur
$j=6;
echo '$j ='.$j."<br/>";
$result=3;
echo '$result='.$result."<br/>";
While ($j>0 {
echo '  dans le wile'."<br/>";
$j=$j-2;
echo '  $j ='.$j."<br/>";
$result=$result+$j;
echo '  $result='.$result."<br/>"; 
}
echo 'fin while';
la j'en ai mis bcp mais c'est pour l'idée

en ligne de commande il faut remplacer <br /> par \n

enjoy

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

par xTG » 23 avr. 2014, 20:40

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.

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

par didoune » 23 avr. 2014, 20:24

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

par xTG » 23 avr. 2014, 20:14

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

par didoune » 23 avr. 2014, 20:04

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

par sirakawa » 23 avr. 2014, 19:16

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

par didoune » 23 avr. 2014, 18:49

$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

par sirakawa » 23 avr. 2014, 18:32

$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

par didoune » 23 avr. 2014, 18:14

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

par didoune » 23 avr. 2014, 18:06

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

par sirakawa » 23 avr. 2014, 18:05

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

par didoune » 23 avr. 2014, 17:55

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

par xTG » 23 avr. 2014, 15:55

$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

par didoune » 23 avr. 2014, 13:44

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