Les 1989 et une conditions...

Eléphant du PHP | 80 Messages

06 oct. 2005, 18:48

Bonsoir à tous,

j'ai une petite question :

J'ai une information dans ma base de donnée qui peut aller de 10 à 2000, nommée $nombre1. Un autre nombre nommé $nombre2. et $diff est la différence (timestamp) entre deux consultations de la page, qui donne un résultat en seconde (marche sans problème). Le taux 1 est un %, égale à 99% au début.

Code : Tout sélectionner

<?php if($nombre1=10) { $resultat1 = round((($nombre1*$nombre2)*$taux1)*$diff); } elseif($nombre1=11) { $resultat1 = round((($nombre1*$nombre2)*($taux1*0,99))*$diff); }
Mais vous comprenez, j'ai pas forcément envie de faire 1990 fois la même condition...
Sachant que le taux est toujours mutiplié, à chaque nouvelle condition, par 0,99 par exemple. Il faudrait sans doute faire un auto increment quelque part, mais la jdois dire que je vois pas vraiment, même pas du tout comment faire. Il me semble que ceci touche plus au javascript qu'au php, donc je poste là.

Merci :wink:

EDIT : ah, j'étais dans php :oops:
XaV...
Webmaster des Larmes du Chaos

Mammouth du PHP | 19672 Messages

06 oct. 2005, 19:07

Qu'est-ce qui détermine ce par quoi tu dois multiplier $taux exactement ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

06 oct. 2005, 23:26

Salut, si j'ai bien suivis a chaque si $nombre1 vaut 11 tu multiplis 1 fois par 0.99, si $nombre1 vaut 12 tu multiplis 2 fois par 0.99 et ainsi de suite !?

alors voila ce que je te propose:

si "$nombre1" vaut 10 on multiplication par (10-10)*0.99 = 0*0.99,
si "$nombre1" vaut 11 on multiplication par (11-10)*0.99 = 1*0.99,
si "$nombre1" vaut 12 on multiplication par (12-10)*0.99 = 2*0.99,
....

un pti test juste pour la 1ere valeur pour eviter de multiplier par 0
$multi_taux=($nombre1-10)*0.99;
$resultat1 = round((($nombre1*$nombre2)*($taux1*$multi_taux))*$diff);

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

07 oct. 2005, 14:57

Tu sais d'avance que tes données sont entre 10 et 2000 ?
Utilises une boucle de type for...
for($i = 20; $i <= 2000;$i++){
//ton test en if

}
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Eléphant du PHP | 80 Messages

07 oct. 2005, 18:10

Euh, je ne comprends pas pourquoi tu as mis 20 :oops:

Je vois pas trop comment insérer le $i dans mon calcul, car dans l'affaire, le taux ne change pas... faudrait-il que je fasse un deuxième auto increment avec à chaque fois le taux précédent multiplié par 99% ? en fait, je ne vois pas trop comment faire mon calcul... ça ne me donnerai qu'une seule condition ?
XaV...
Webmaster des Larmes du Chaos

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

07 oct. 2005, 18:13

As tu testé ma proposition (ça m'interesserai de savoir si ça marche :lol:)
$multi_taux=($nombre1-10)*0.99;
$resultat1 = round((($nombre1*$nombre2)*($taux1*$multi_taux))*$diff);
Dans ce cas il y a multiplication => 2*0.99=
Mais si a chaque fois il faut multiplier par 0.99 il faut remplacer:
$multi_taux=($nombre1-10)*0.99;
par
$multi_taux=($nombre1-10);
$multi_taux=pow(0.99, $multi_taux);

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 80 Messages

07 oct. 2005, 19:40

Bah, d'une, je trouve le code de Mère Thérésa plus facile, et d'autre part, je vois pas vraiment comment marche ton code la.
$multi_taux=($nombre1-10)*0.99; 
$resultat1 = round((($nombre1*$nombre2)*($taux1*$multi_taux))*$diff); 
Pourquoi veux-tu enlever 10 au nombre1, il compte quand même !

Je vais plus détailler ce que je voudrais :

Un nombre d'employés se partage 4 taches. Par exemple, pour que ce soit plus facile, 100 personnes. On veut 25% de personnes sur la première tache, 30% sur la deuxième, 15% sur la troisième et 30% sur la 4ème tache.
Cependant, on n'a que le taux de travail en seconde de ces employés. Et on veut obtenir combien ils ont produit en $diff secondes, qui correspond à la diférence entre la dernière fois qu'on a regardé et quand on regarde maintenant. Mais en plus, pour corser le tout, on sait que plus les employés sont nombreux, moins ils produisent : la premier employé travaille à 100%, le deuxième à 99%, le troisième à 99%*99%, etc...

est-ce plus clair ?
XaV...
Webmaster des Larmes du Chaos

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

07 oct. 2005, 21:07

et pour je pensais que mon bout de code était clair...

au début tu nous propose:
if($nombre1=10)
{
$resultat1 = round((($nombre1*$nombre2)*$taux1)*$diff);
}
elseif($nombre1=11)
{
$resultat1 = round((($nombre1*$nombre2)*($taux1*0.99))*$diff);
} 
elseif($nombre1=12)
{
$resultat1 = round((($nombre1*$nombre2)*($taux1*0.99*0.99))*$diff);
} 
....
et donc je te propose de remplacer tous ces tests sur 3 ligne :o

alors tu a du remarquer que pour:
le 1er cas tu multiplis par 0.99^0
le 2eme cas tu multiplis par 0.99^1 (0.99)
le 3eme cas tu multiplis par 0.99^2 (0.99*0.99)
...

et donc mon code retire la l'exposant:
le 1er cas 0.99^0 => exposant = 0 => $nombre1-10 = 10-10=0
le 2eme cas 0.99^1 => exposant = 1 => $nombre1-10 = 11-10=1
le 2eme cas 0.99^2 => exposant = 2 => $nombre1-10 = 12-10=2
....

Calcul de l'exposant
$exposant=($nombre1-10);
Calcul du nombre par lequel il faut multiplier $taux1
$multi_taux=pow(0.99, $exposant);
resultat de ce calcul:
le 1er cas $multi_taux=0.99^0 = 1
le 2eme cas $multi_taux=0.99^1 = 0.99
le 3eme cas $multi_taux=0.99^2 = 0.99*0.99
...

donc resulat final:
$resultat1 = round((($nombre1*$nombre2)*($taux1*$multi_taux))*$diff);
Donc je pense que c'est ce que tu veut, et il me semble que c'est plus rapide qu'une boucle et des if :wink:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 80 Messages

07 oct. 2005, 21:33

Ah, mais c'est même tout si^mple, si j'ai bien compris ça donnerai presque (si on partait de 1) un 0,99^$employé

^^
XaV...
Webmaster des Larmes du Chaos

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

07 oct. 2005, 21:36

voila, mais comme tu veut démarer a 10 il faut soustraire 10 à $nombre1 pour faire démarer l'exposant de la :wink:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 80 Messages

08 oct. 2005, 00:10

Ah, j'y ai passé du temps, mais tout marche comme je veux, merci bien Truc :wink:

Ton code est impec sur ce coup là ^^
XaV...
Webmaster des Larmes du Chaos