Les 1989 et une conditions...

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 : Les 1989 et une conditions...

par X_a_v_i_e_r » 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à ^^

par Truc » 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:

par X_a_v_i_e_r » 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é

^^

par Truc » 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:

par X_a_v_i_e_r » 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 ?

par Truc » 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);

par X_a_v_i_e_r » 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 ?

par mere-teresa » 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

}

par Truc » 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);

par Cyrano » 06 oct. 2005, 19:07

Qu'est-ce qui détermine ce par quoi tu dois multiplier $taux exactement ?

Les 1989 et une conditions...

par X_a_v_i_e_r » 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: