Page 1 sur 1

boucles dans une page jusqu'à...

Posté : 05 nov. 2005, 15:27
par Invité
Bonjour,

J'ai un problème avec des boucles. Je voudrais en fait qu'un calcul se répète jusqu'à que le résultat soit 0. Je m'explique :

On a différent nombres provenant de la base de donnée :

- $nombre1
- $nombre2
- $complementnombre1
- $complementnombre2

Et en fait, j'ai essayé de faire un while et un for comme ceci

while($nombre1>0 || $nombre2 >0)
Et ici le calcul, avec des if, car cette boucle serait présente plusieurs fois dans la page, mais avec $nombre3, $nombre4 etc...

Avez-vous compris ma demande ? Si oui, comment faire, parce que quand je croyais avoir réussi, la page a fait semblant de se charger, mais elle a mis très longtemps, et m'a sorti que il avait pas trouvé la page...

Merci ;)

Posté : 05 nov. 2005, 15:31
par Truc
Salut,remplace le ou (||) par un et (&&)
while($nombre1>0 && $nombre2 >0) 
si tu as un nombre plus grand que l'autre la boucle va continuer et tu aura forcément un résultat négatif.

Mais je ne vois pas vraiment le probleme pour arreter une boucle sur 0. si tu pouvais donner plus d'explications voir une exemple ce serai plus clair :wink:

Posté : 05 nov. 2005, 16:39
par Invité
Mmm, c'est juste que ça m'embetait de mettre le code comme ça quoi :s
while($armee1!=0 && $armee6_d!=0)
{
$baston00001 = $armee6_d*$unit07vie_d-(($armee6_d*$unit07vie_d)-($armee1*2*($unit01att+$unit01deg)));
$armee6_d = round($baston00001/$unit07vie_d);
if($armee6_d<1)
{
$armee6_dz = 'tous les';
}
$texte2 .= '<br><strong>Les ' . $aaa100 .' ont tué ' . $armee6_dz .' ' . $aaa106_d . ' à coup de bêches, de pelles et de pioches.</strong>';
if($armee6_d != 0)
{
$baston00002 = $armee1*$unit01vie-(($armee1*$unit01vie)-($armee6_d*2*($unit07att_d+$unit07deg_d)));
$armee1 = round($baston00002/$unit01vie);
if($armee1<1)
{
$armee1z = 'tous les';
}
$texte2 .= '<br>Les ' . $aaa106_d .' ont massacré ' . $armee1z .' ' . $aaa100 . ' en les chargeant.<br>';
}
}

Je voudrais que ça reste pas sur le site, je n'ai pas spécialement envie que ça se voit quoi...

Donc voila un exemple : je veux que les calculs ne se fassent plus lorsque, en l'occurence, une des deux armées est décimée.

Merci

Posté : 05 nov. 2005, 16:52
par Truc
ne t'inquietes pas pour ton code tu as mis des noms de variable bien bien compliqué j'ai meme pas envi de savoir ce que c'est :wink:

Donc dans ton cas la boucle s'arretera dans tous les cas si:
$armee6_d = round($baston00001/$unit07vie_d);
ou
$armee1 = round($baston00002/$unit01vie); 
sont égal a 0. assure toi, en affichant par exemple que $armee1 soit égal a 0 a un moment donné dans la boucle.

si c'est 2 variables ne décrémentent pas pour se retrouver a 0 la boucle ne s'arretera jamais ça c'est sur
:?

Posté : 05 nov. 2005, 17:00
par Invité
Bah disons que ^^ en fait, elles ne se décrémentent pas vraiment, le calcul fait qu'elles diminuent au fur et à mesure.

mais apparement, quand il revient en haut de la boucle, il ne prend pas la valeur des différents calculs qui ont été fait...

Peut-être que j'aurais pas du poster ça dans débuter en php lol

Posté : 05 nov. 2005, 17:24
par Truc
Dans ce cas tu dois revoir les formules de calcul... il n'y a que $armee6_d pour une des formules qui vari et $armee1 pour l'autre formule.

tu fait des affectation donc elle varient bien dans la boucle mais vu la formule bien trop compliquée :shock: je ne peut pas te dire si ce resultat va donné 0 a un moment donné mais si tu veut sortir de la boucle c'est le seul moyen.

Je te conseile donc de revoir le calcul de $baston00001 et $baston00002

Posté : 05 nov. 2005, 17:27
par Invité
Bah en fait, ça va jusqu'à baston00018, mais en quoi veux-tu que je revois ? je t'assure qu'il n'y a pas moyen de faire plus simple. Si tu veux, je t'explique en message privé ou sur msn, si tu as.

Merci

Posté : 05 nov. 2005, 17:33
par Truc
c'est pas ça le probleme mais tu il faut que $armee6_d soit égal a 0 pour sortir....

remplace round() par floor() qui arrondi a l'entier inférieur donc dans ce cas ça décrémente.

Posté : 05 nov. 2005, 17:41
par Invité
Non, ce n'est pas ça (au pire j'ai essayé, mais la page ne se charge pas).

En fait, ce que ce bout de code calcule, c'est la rencontre de deux armées, en prenant en compte les points de vie de l'un, auquel on soustrait la force d'attaque de l'autre armée (composée de deux parties).

Et donc, à partir de la, une des deux armées perd des unités, c'est cela qui joue le role de la décrémentation. Et quand toutes les armées du joueur 1 (sans le _d) sont décimées (donc <=0), le combat s'arrête, et on enchaine sur d'autres variables.

La, ce que ça donne, c'est une page qui ne se charge pas. Apparement, lorsqu'il reviens en haut (juste après le while) il ne prend pas en compte les calculs fait lorsque la boucle a été exécutée une première fois.

...

Posté : 05 nov. 2005, 18:04
par Truc
Hum, eh bin si tu est sur que le résultat des round() décrémente au fur et a mesure la boucle doit bien s'arreter des que ce résultat est égal a 0 ça c'est sur et certain.

je comprend ce que tu essai de faire mais la formule me semble pas bonne. Comme tu dis le résulats semble ne pas changer ça se peut avec un round() tu arrondis a l'entier le plus fractionnaire, exemple 3.6 => 4 et 3.4 => 3

Or si $armee1=4 avant la boucle et ici seul une variable change a chaque tour $baston00002 mais si ce résultat est égal a 3.6 alors apres le round on recommence avec $armee1=4 ce qui va entrainer que $baston00002=3.6 et ainsi de suite...

Apres je suis désolé je ne peux t'aider plus

Posté : 05 nov. 2005, 18:09
par Invité
Hé bien, soit pour le floor, mais de toute façon, cela serait extrèmement rare qu'un résultat n'enlève que 0.4, mais c'est déjà ça de pris.

Par contre, dans l'affaire, je bloque toujours, quelqu'un pour m'aider ?

Posté : 05 nov. 2005, 19:56
par Invité
Helpppppppppppppppppppppppppppppppppppppppppppppppppppppp :oops:

Posté : 05 nov. 2005, 20:13
par Pieterjan
Je prends un peu au vol, mais bon.

pourquoi tu fais pas des "échos" des diverses variables dans la boucle, histoire de voir ce qui se passe (ça doit être un réflexe, de vérifier ses variables, sinon on se rend pas bien compte des choses). Sinon, pourquoi pas juste inférieur à 1, plutôt qu'égal à 0 ?

Posté : 05 nov. 2005, 23:59
par Invité
J'ai réglé mon problème en grande partie, je vais finir ce soir je pense. S'il y en a que ça intéresse, je peux poster le résultat ici (Truc ?)

Bonsoir

Posté : 06 nov. 2005, 01:52
par Truc
oui oui ca interesse toujours quand on n'a pas trouvé le probleme :wink: