8791 sujets

Développement web côté serveur, CMS

bonjour,

j'aimerais faire un calcule mathematique:
par exemple j'ai une valeur $a=100;
j'aimerais obtenir 3 valeur generer aléatoirement avec rand() de 0 a 100.
ca je sais faire:

$a=100;
for($i=0;$i<3;$i++)
{
$var= rand(0,$a);
echo "var".$i."=".$var."<br>";
}

mon soucis est comment avoir ces 3 valeurs aléatoires dont leur somme doivent être égale à $a Smiley eek
merci
Smiley eek Smiley eek Smiley eek Smiley eek Smiley eek Smiley eek
Modifié par timo (25 Nov 2009 - 21:05)
Salut,

il y a plusieurs façons de faire comme par exemple :
$a = 100;
$val1 = mt_rand(0, $a);
$val2 = mt_rand(0, $a - $val1) ;
$val3 = $a - ($val1 + $val2);
echo '<p>'.$val1.'</p>';
echo '<p>'.$val2.'</p>';
echo '<p>'.$val3.'</p>';

Modifié par Heyoan (25 Nov 2009 - 18:42)
Heyoan a écrit :
Salut,

il y a plusieurs façons de faire comme par exemple :
$a = 100;
$val1 = mt_rand(0, $a);
$val2 = mt_rand(0, $a - $val1) ;
$val3 = $a - ($val1 + $val2);
echo '<p>'.$val1.'</p>';
echo '<p>'.$val2.'</p>';
echo '<p>'.$val3.'</p>';



bonsoir,
merci pour votre réponse. c'est vrais qu'à la fin j'ai la somme exacte.
mais c'est vraiment pas dynamique, si j'aimerais avoir plus que 3valeur(par exemple 10 ou 20)
ca marcheras pas, il faudras toujour prevoir de faire des soustraction !!!!!!
merci encore pour votre réponse
Hem... c'est plus facile de répondre quand on a toutes les données du problème dès le début. Smiley rolleyes

$total = 100; 
$nb_valeurs = 5;
$total_valeurs = 0;
$valeurs = array();
for($i = 0; $i < $nb_valeurs-1; $i++) {
	$valeurs[$i] = mt_rand(0, $total - $total_valeurs); 
	$total_valeurs += $valeurs[$i];
}
$valeurs[$nb_valeurs-1] = $total - $total_valeurs;
foreach($valeurs as $valeur) {
	echo '<p>'.$valeur.'</p>';
}
Heyoan a écrit :
Hem... c'est plus facile de répondre quand on a toutes les données du problème dès le début. Smiley rolleyes

$total = 100; 
$nb_valeurs = 5;
$total_valeurs = 0;
$valeurs = array();
for($i = 0; $i < $nb_valeurs-1; $i++) {
	$valeurs[$i] = mt_rand(0, $total - $total_valeurs); 
	$total_valeurs += $valeurs[$i];
}
$valeurs[$nb_valeurs-1] = $total - $total_valeurs;
foreach($valeurs as $valeur) {
	echo '<p>'.$valeur.'</p>';
}


vous êtes génial, merci beaucoup, ce n'étais pas évident pour moi de trouver la solution, faut que je pratique encore plus.
un trés grand merci à heyoan Smiley cligne Smiley cligne Smiley cligne Smiley cligne