Utilisation des boucles ou fct récursives ?
Posté : 29 févr. 2008, 15:31
Bonjour à tous,
je viens vous demander de m'aider car là je bloque un peu.
Je travaille sur un calcul de frais de port et voici l'algorithme que je n'arrive à traduire en php :
Ce que je dois faire, c'est calculer un frais de port en répartissant les articles dans des colis de 10kg maximum.
Sachant que :
un article de 7 kg et deux articles de 3,5kg = 2 colis de 7kg
deux articles de 8 kg = 2 colis de 8kg
4 articles de 2 kg plus 1 article de 1.5kg = 1 colis de 9.5kg...
Pouvez vous m'aidez ?
Voici un code que j'avais fait auparavant mais qui ne correspondait pas puisqu'avaec ce code on aait :
un article de 7 kg et deux articles de 3,5kg = 1 colis de 10kg et un colis de 0.5kg
je viens vous demander de m'aider car là je bloque un peu.
Je travaille sur un calcul de frais de port et voici l'algorithme que je n'arrive à traduire en php :
<?
// ========== EXPLICATION DE L'ALGORITHME ================
/*****************************************************************
* Tant que le poids restant est > 10KG
* On classe le poids des articles par ordre décroissant
* On fait des paquets de 10KG en partant du poids le plus élevé (n)
* Ensuite, on prend l'article dont le poids est juste aud essus (plus léger, n-1
* Si avec cet article (n-1), on peut faire un article de max 10kg,
* alors on l'ajoute au colis
* On regarde ensuite si on peut ajouter l'article n-2, n-3, n-n...
* Sinon, si on ne peut ajouter l'article ?
* alors on regarde si on peut ajouter l'article n-2, si on peut pas n-3... n-n
******************************************************************/
?>
Et de mon côté voici le code que j'ai fait pour l'instant arpès de nombreux essais.<?
echo "nbre articles : ".count($nb_article_moins_10)."<br />";
for($i=0; $i<count($nb_article_moins_10); $i++){
echo "poids article : ".$nb_article_moins_10[$i]['poids']."<br />";
echo "qte article : ".$nb_article_moins_10[$i]['quantite']."<br />";
$qte_article = $nb_article_moins_10[$i]['quantite'];
for($j=0; $j<=$qte_article; $j++){
$poids_colis += str_replace(",",".",$nb_article_moins_10[$i]['poids']);
if($poids_colis > 10){
$poids_colis -= str_replace(",",".",$nb_article_moins_10[$i]['poids']);
break;
}
else{
$nb_article_moins_10[$i]['poids']--;
}
echo $poids_colis;
}
}
?>
Ici nb_article_moins_10 est un tableau dans lequel se trouve les produits dont le poids est < 10 kg et la quantité commandée de ces produits.Ce que je dois faire, c'est calculer un frais de port en répartissant les articles dans des colis de 10kg maximum.
Sachant que :
un article de 7 kg et deux articles de 3,5kg = 2 colis de 7kg
deux articles de 8 kg = 2 colis de 8kg
4 articles de 2 kg plus 1 article de 1.5kg = 1 colis de 9.5kg...
Pouvez vous m'aidez ?
Voici un code que j'avais fait auparavant mais qui ne correspondait pas puisqu'avaec ce code on aait :
un article de 7 kg et deux articles de 3,5kg = 1 colis de 10kg et un colis de 0.5kg
<?
// ANCIEN CODE QUI NE FONCTIONNE PAS :
$nb_colis_10_kg = floor($poids_restant/10);
connexion();
$tnt = mysql_query("SELECT * FROM frais_port WHERE port_a > 10 AND port_de <= 10") or die(mysql_error());
$res_tnt = mysql_fetch_array($tnt);
$resultat_fp2 += $res_tnt['tarif_z'.$zone];
$poids_restant = ($poids_restant - (10*$nb_colis_10_kg)); //le nouveau poids restant = poids restant - poids de tous les colis de 10kg qu'on a pu faire
deconnexion();
// FIN DE ANCIEN CODE
?>