Equation en php

Résolu
Signaler
Messages postés
14
Date d'inscription
samedi 27 décembre 2003
Statut
Membre
Dernière intervention
8 février 2010
-
Messages postés
14
Date d'inscription
samedi 27 décembre 2003
Statut
Membre
Dernière intervention
8 février 2010
-
Bonjour,
Je suis actuellement entrain d'écrire un script qui aurait pour but de calculer les inconnues d'une équation.
Je m'explique : je voudrais que l'on puisse entrer par exemple une hauteur en cm et que ce script puisse me dire combien de 'blocs' de hauteur 11,33,47cm peuvent égaler cette hauteur.

Exemple : j'entre la valeur 80 cm en hauteur, le resultat devrait être : 3*11cm + 1*47cm est possible et 1*33cm + 1*47cm est possible.
Ceci prenant compte de toutes les combinaisons possibles...

Un grand merci pour votre aide,
même une piste d'idée me serait utile,

Pilpot

8 réponses

Messages postés
373
Date d'inscription
samedi 9 juillet 2005
Statut
Membre
Dernière intervention
11 août 2008

Voilà
<?php
$hauteur = 80; // On définie la hauteur voulu
$bloc = array(4, 11, 33, 47); // On rentre les valeurs des blocs.

sort($bloc); // On trie les blocs par ordre croissant.
echo 'Avec une hauteur de ',$hauteur,' :',"
\r\n";
$i = -1;
while (isset($bloc[++$i])) {
    $j = 0;
    while ($bloc[$i]*++$j <= $hauteur) {
        if ($bloc[$i]*$j === $hauteur) echo 'Il y a ',$j,' * ',$bloc[$i],"
\r\n";
        else {
            $k = $i;
            while (isset($bloc[++$k])) {
                $l = 0;
                while ($bloc[$i]*$j+$bloc[$k]*++$l <= $hauteur) {
                    if ($bloc[$i]*$j+$bloc[$k]*$l === $hauteur) echo 'Il y a ',$j,' * ',$bloc[$i],' + ',$l,' * ',$bloc[$k],".
\r\n";
                }
            }
        }
    }
}
?>

For every choice, a consequence (Fable)
Messages postés
373
Date d'inscription
samedi 9 juillet 2005
Statut
Membre
Dernière intervention
11 août 2008

Il suffit de rajouter le code du "else" en l'adaptant :
<?php
$hauteur = 255; // On définie la hauteur voulu
$bloc = array(31, 41, 51, 61, 71); // On rentre les valeurs des blocs.

sort($bloc); // On trie les blocs par ordre croissant.
echo 'Avec une hauteur de ',$hauteur,' :',"
\r\n";
$i = -1;
while (isset($bloc[++$i])) {
    $j = 0;
    while ($bloc[$i]*++$j <= $hauteur) {
        if ($bloc[$i]*$j === $hauteur) echo 'Il y a ',$j,' * ',$bloc[$i],"
\r\n";
        else {
            $k = $i;
            while (isset($bloc[++$k])) {
                $l = 0;
                while ($bloc[$i]*$j+$bloc[$k]*++$l <= $hauteur) {
                    if ($bloc[$i]*$j+$bloc[$k]*$l === $hauteur) echo 'Il y a ',$j,' * ',$bloc[$i],' + ',$l,' * ',$bloc[$k],".
\r\n";
                    else {
                        $m = $k;
                        while (isset($bloc[++$m])) {
                            $n = 0;
                            while ($bloc[$i]*$j+$bloc[$k]*$l+$bloc[$m]*++$n <= $hauteur) {
                                if ($bloc[$i]*$j+$bloc[$k]*$l+$bloc[$m]*$n === $hauteur) echo 'Il y a ',$j,' * ',$bloc[$i],' + ',$l,' * ',$bloc[$k],' + ',$n,' * ',$bloc[$m],".
\r\n";
                                else {
                                    $o = $m;
                                    while (isset($bloc[++$o])) {
                                        $p = 0;
                                        while ($bloc[$i]*$j+$bloc[$k]*$l+$bloc[$m]*$n+$bloc[$o]*++$p <= $hauteur) {
                                            if ($bloc[$i]*$j+$bloc[$k]*$l+$bloc[$m]*$n+$bloc[$o]*$p === $hauteur) echo 'Il y a ',$j,' * ',$bloc[$i],' + ',$l,' * ',$bloc[$k],' + ',$n,' * ',$bloc[$m],' + ',$p,' * ',$bloc[$o],".
\r\n";
                                            else {
                                                $q = $o;
                                                while (isset($bloc[++$q])) {
                                                    $r = 0;
                                                    while ($bloc[$i]*$j+$bloc[$k]*$l+$bloc[$m]*$n+$bloc[$o]*$p+$bloc[$q]*++$r <= $hauteur) if ($bloc[$i]*$j+$bloc[$k]*$l+$bloc[$m]*$n+$bloc[$o]*$p+$bloc[$q]*$r === $hauteur) echo 'Il y a ',$j,' * ',$bloc[$i],' + ',$l,' * ',$bloc[$k],' + ',$n,' * ',$bloc[$m],' + ',$p,' * ',$bloc[$o],' + ',$r,' * ',$bloc[$q],".
\r\n";
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
?>

For every choice, a consequence (Fable)
Messages postés
373
Date d'inscription
samedi 9 juillet 2005
Statut
Membre
Dernière intervention
11 août 2008

Salut,
Pas le temps de le faire maintenant mais si tu peux patienter un peu ce soir je t'aide 

For every choice, a consequence (Fable)
Messages postés
14
Date d'inscription
samedi 27 décembre 2003
Statut
Membre
Dernière intervention
8 février 2010

[red]Prout !s/red
Messages postés
14
Date d'inscription
samedi 27 décembre 2003
Statut
Membre
Dernière intervention
8 février 2010

[red]Prout !s/red
Messages postés
14
Date d'inscription
samedi 27 décembre 2003
Statut
Membre
Dernière intervention
8 février 2010

Désolé pour les messages précédents, la textbox ne fonctionne apparemment pas sous minefield.
Merci pour la réponse rapide !
Je voudrais également pouvoir avoir les combinaisons suivantes : 3*41 123 et 1*31 + 1*41 + 1*51 123
Jusque 5 blocs différenciés...
Pourrais-tu m'expliquer ?

Merci
Messages postés
14
Date d'inscription
samedi 27 décembre 2003
Statut
Membre
Dernière intervention
8 février 2010

[red]Prout !s/red
Messages postés
14
Date d'inscription
samedi 27 décembre 2003
Statut
Membre
Dernière intervention
8 février 2010

Je disais donc...

Un grand merci pour les réponses rapides et adaptées...

+++