Equation

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 : Equation

par Exp9 » 25 janv. 2007, 17:55

Si ca vous peut vous aider, je verifie en javascript puis en php si les données sont cohérantes :p

par Ajoloca » 25 janv. 2007, 17:49

Re,

Justement, tu trouves logique d'enregistrer une commande avec une une ligne de 0 articles ???

Si l'utilisateur rentre 0 c'est surement (à 99,99% de chances) une faute de frappe.
De toutes manières, il faut toujours avertir l'utilisateur.

Tu ne le préviens pas et tu enregistres une ligne avec 0, je ne suis pas sur que ton Boss apprécierait.

par orgerix » 25 janv. 2007, 17:42

Je ne comprend pas pourquoi le problème ne se pose que quand $commande < $paquetsSachet * $piecesPaquet

Si j'ia bien compris, tu dis que si $commande<<$paquetsSachet * $piecesPaquet, alors la fonction renverra 0.

Cependant, le problème se pose toujours si $commande-1000<<$paquetsSachet * $piecesPaquet, la fonction renverra 1...

Si l'utilisateur entre 0, la fonction renverra 0, ce qui est logique, vu qu'il ne commende rien...

par Ajoloca » 25 janv. 2007, 17:37

Re,

Je ne sais pas quelle est la précision (de plus elle ne doit être la même dans tous les systèmes).

Ma politique c'est, des que je peu contrôler un éventuel souci, je le fais sans laisser le hasard faire les choses.
De plus si l'utilisateur rentre en valeur de commande 0 (zéro) que se passera-t-il d'après toi ??? :?: :?: :?:

par orgerix » 25 janv. 2007, 17:33

La je suis pas d'accord...

Normalement, $commande/($paquetsachet*$piecesachet) sera un double entre 0 et 1, donc la fonction ceil revera 1

par Ajoloca » 25 janv. 2007, 17:26

Re,

ATTENTION:

Comme tu le vois aucun test n'est fait, il te faudra ajouter le cas ou la commande soit < à $paquetsSachet * $piecesPaquet, que tu devras forcer à cette valeur : $paquetsSachet * $piecesPaquet

par Exp9 » 25 janv. 2007, 17:14

Merci Ajoloca, c'est parfaitement ce que je souhaitai. Me reste a comprendre comment ca marche réelement pour m'en souvenir.

Merci aussi Ryle.

Bonne journée.
Linkside

par Ajoloca » 25 janv. 2007, 17:01

Bonjour,

Ceci devrait convenir.
<?php
	$piecesPaquet = 3;
	$paquetsSachet = 1000;
	$commande = 50000;
	$paquetsCmde = ceil($commande / ($piecesPaquet * $paquetsSachet));
	echo 'A commander : ' . $paquetsCmde * $paquetsSachet * $piecesPaquet;
?>

par Exp9 » 25 janv. 2007, 16:54

Ta boucle est limitée puisque tu vas au maximum ajouter 2 soldats pour obtenir un multiple de 3. Le code que tu as donné est donc très bien :)
Et bien pas forcément 2 soldats car dans le cas de 50000 soldats ce sera 1000 soldats de plus pour rester en cohérance avec la régle "les sachets sont vendu par tranche de 1000 (donc 1000*3 = par tranche de 3000 soldats"

La boucle marche effectivement bien, mais j'ai peur qu'il n'y ai pas de résultat possible pour un nombre donné et donc de tomber en boucle infinie.

par Ryle » 25 janv. 2007, 16:44

Ah ben oui, mais avec le contexte ca n'a plus rien à voir !! :)
C'est plus une equation à résoudre, c'est un nombre à calculer, et tu as effectivement des bornes !! :)

Ta boucle est limitée puisque tu vas au maximum ajouter 2 soldats pour obtenir un multiple de 3. Le code que tu as donné est donc très bien :)

par Ryle » 25 janv. 2007, 16:29

Mais c'est quoi concrêtement le problème ? trouver toutes les valeurs de $x qui conviennent ? tu en as une infinité !! :)

Tu peux simplifier en appliquant au préalable le modulo à chacun des éléments de ton équation. Je ne sais pas si c'est une règle, mais en tout cas c'est un constat ;)

Personnellement je simplifierais ainsi :

<=> ((1000 * $x) + 50000) %3 = 0
<=> ((1000%3 * $x) + 50000%3) %3 = 0

1000 % 3 = 1
50000 % 3 = 1

<=> (1*$x + 1) % 3 = 0
<=> ($x+1)%3 = 0

Il te faut donc trouver toutes les valeurs de $x pour lesquelles $x+1 est multiple de 3.

par exp9 » 25 janv. 2007, 16:23

En gros, ca reviendrait à chercher les valeurs de x pour lesquelles ( $x * 1000 ) + $iValue ) est multiple de 3 ...
Désolé mauvais quote :)

Sinon pour apporter du sens:

[Ex: Sur une boutique en ligne qui vend des soldats de plomb]

1 sachet de soldat de plomb contient 3 soldats.

Les sachets sur le site ne se vendent que par tranche de 1000 sachet.

Seulement sur ce site, l'utilisateur ne saisit pas le nombre de sachet qu'il desire mais le nombre de soldat de plomb.

Donc si l'utilisateur saisie 50 000 soldat, mon code doit le corriger en toute logique à 51 000. (valeur logique superieur).

En esperant que cela soit plus clair.

par exp9 » 25 janv. 2007, 16:07

tu es sur que c'est un "%" qu'il y a dans ton equation ? et donc c'est quoi %3 ???
Oui c'est tout à fait çà.

J'avais effectivement utilisé une boucle (sans limite), mais je ne trouve vraiment pas çà propre et je pense qu'il est possible de résoudre le problème par une équation.


$x = 50000;
while($x%3!=0)
{
$x+=1000;
}
echo $x; // 51000

par Ryle » 25 janv. 2007, 15:56

tu es sur que c'est un "%" qu'il y a dans ton equation ? et donc c'est quoi %3 ???
En principe c'est un Modulo :)

En gros, ca reviendrait à chercher les valeurs de x pour lesquelles ( $x * 1000 ) + $iValue ) est multiple de 3 ...

Mais sans bornes tu vas avoir une infinité de résultats, et je vois pas trop ce que tu veux obtenir... Si par contre tu as une valeur max pour $x, tu peux faire une boucle et tester tes résultats un par un... encore que ton équation doit pouvoir se simplifier puisque dès que tu as trouvé le premier $x qui convient (genre $x=1), tous les autres seront nécessairement multiples de $x+3

par exp9 » 25 janv. 2007, 15:54

le % veux dire modulo où "Le reste de la division" (existe en php); doc -> http://fr2.php.net/operators.arithmetic

Donc :

echo 3 % 3; // Donne 0 en php car le reste de la division de 3/3 vaut 0;

echo 4 % 3; // Donne 1 en php car le reste de la division de 4/3 vaut 1;

Voila :)