OVH Cloud OVH Cloud

Casse-Tête

43 réponses
Avatar
B. Neve
Bonsoir à tous,

Petit casse-tête entre amis...

Je voudrais dans une appli obliger de choisir une quantité qui doit être une
combinaison d'emballages possibles.

Comme chacun sait qu'un bon exemple vaut tous les discours...

J'ai des assiettes que je peux conditionner par 15, 25, 40. Dans une
rubrique texte, on met alors
25/15/40 pour dire que 25 sera la quantité par défaut et les autres des
alternatives.
On peut bien évidemment mélanger plusieurs emballages...

Quels quantités sont valides ?

10 non... ne correspond à aucun conditionnement
15 oui facile
20 non, 1 x 15 puis ???
30 oui, 2 x 15
45 oui, 3 x 15
48 non
50 oui, 2 x 25
55 oui, 2 x 15 + 1 x 25
60 oui, 4 x 15
65, oui 1 x 40 + 1 x 25 ou 2 x 25 + 1 x 15
69, non
... Et ainsi de suite

Comment feriez vous une fonction qui me renverrait Vrai/Faux en lui envoyant
2 paramètres : "Quantité" (60) et "chaine de conditionnement" (25/15/40)

Des remerciements en pagaille au premier qui trouve la sympathique fonction.

B. Nève
nospam-bne@dagico.com

10 réponses

1 2 3 4 5
Avatar
Eric Marcastel
Bonjour,
Interressant, mais il y a surement plein de solutions surtous si la quantité
de départ est grande, y'a t'il des régles : un maxi de 25, le reste avec
les autres, ou autant de chaque, cela facilitera le mode de calcul.

eric marcastel

"B. Neve" a écrit dans le message de
news:3fb94759$0$15807$
Bonsoir à tous,

Petit casse-tête entre amis...

Je voudrais dans une appli obliger de choisir une quantité qui doit être


une
combinaison d'emballages possibles.

Comme chacun sait qu'un bon exemple vaut tous les discours...

J'ai des assiettes que je peux conditionner par 15, 25, 40. Dans une
rubrique texte, on met alors
25/15/40 pour dire que 25 sera la quantité par défaut et les autres des
alternatives.
On peut bien évidemment mélanger plusieurs emballages...

Quels quantités sont valides ?

10 non... ne correspond à aucun conditionnement
15 oui facile
20 non, 1 x 15 puis ???
30 oui, 2 x 15
45 oui, 3 x 15
48 non
50 oui, 2 x 25
55 oui, 2 x 15 + 1 x 25
60 oui, 4 x 15
65, oui 1 x 40 + 1 x 25 ou 2 x 25 + 1 x 15
69, non
... Et ainsi de suite

Comment feriez vous une fonction qui me renverrait Vrai/Faux en lui


envoyant
2 paramètres : "Quantité" (60) et "chaine de conditionnement" (25/15/40)

Des remerciements en pagaille au premier qui trouve la sympathique


fonction.

B. Nève






Avatar
Michel Herrscher
Dans un message B. Neve disait :

Bonsoir à tous,

Petit casse-tête entre amis...

Je voudrais dans une appli obliger de choisir une quantité qui doit
être une combinaison d'emballages possibles.

Comme chacun sait qu'un bon exemple vaut tous les discours...

J'ai des assiettes que je peux conditionner par 15, 25, 40. Dans une
rubrique texte, on met alors
25/15/40 pour dire que 25 sera la quantité par défaut et les autres
des alternatives.
On peut bien évidemment mélanger plusieurs emballages...




Avec les modulo de tailles décroissantes :

x est le nb à envoyer
nb40 = mod ( x, 40)
xx = x - nb40*40
nb25 = mod(xx,25)
yy = xx - nb25*25
nb15 = mod(yy,15)
si (yy - (nb15*15)) <> 0 alors nb15++

HTH
Michel Herrscher Consultant
Président de WindevAsso - Association des Développeurs WINDEV(c)
http://www.windevasso.org
Tel=+33 450 870912 Fax=+33 450 871741 GSM=+33 609044711
Avatar
Roumegou
En lisant le truc, j'ai cru que c'était évident :-?
genre combien j'ai de cond 1, puis avec le reste, combien en cond 2, puis
avec le reste combien en cond 3 car j'avais eu le mème pb à résoudre pour
des coupures. Mais à la différence, c'est que j'avais un ordre croissant
dans l'attrib des coupures (dans ton ex cela serait 40 25 15) et je
disposais de coupure de 1 pour faire l'appoint.

Donc rien à voir, et la cela fait 15 mn que je triture cela sur le papier et
rien ne sort ;(
Peut être en générant des tables de chiffres possibles ? Quels règles fixer
? Faut-il privilégier le nbre de cond 25 ou le plus petit nbre de cond ?
Définir un montant maxi.
Ensuite génerer les multiples de 25, puis les multiples de 15 (si pas existe
déjà), puis les multiples de 40(si pas existe déjà),
Ensuite generer les +15 aux multiples de 25(si pas existe déjà),
Ensuite generer les +40 aux multiples de 25(si pas existe déjà),
Ensuite generer les +40 aux multiples de 15(si pas existe déjà),

cela dans une limite fixée au départ.

et ci cela marche pas, tu fais débarquer un éléphant dans ton magasin de
porcelaine Non mais !

mais c'est sympa comme problème.
Eric

Eric Marcastel wrote:
Bonjour,
Interressant, mais il y a surement plein de solutions surtous si la
quantité de départ est grande, y'a t'il des régles : un maxi de 25,
le reste avec les autres, ou autant de chaque, cela facilitera le
mode de calcul.

eric marcastel

"B. Neve" a écrit dans le message de
news:3fb94759$0$15807$
Bonsoir à tous,

Petit casse-tête entre amis...

Je voudrais dans une appli obliger de choisir une quantité qui doit
être une combinaison d'emballages possibles.

Comme chacun sait qu'un bon exemple vaut tous les discours...

J'ai des assiettes que je peux conditionner par 15, 25, 40. Dans une
rubrique texte, on met alors
25/15/40 pour dire que 25 sera la quantité par défaut et les autres
des alternatives.
On peut bien évidemment mélanger plusieurs emballages...

Quels quantités sont valides ?

10 non... ne correspond à aucun conditionnement
15 oui facile
20 non, 1 x 15 puis ???
30 oui, 2 x 15
45 oui, 3 x 15
48 non
50 oui, 2 x 25
55 oui, 2 x 15 + 1 x 25
60 oui, 4 x 15
65, oui 1 x 40 + 1 x 25 ou 2 x 25 + 1 x 15
69, non
... Et ainsi de suite

Comment feriez vous une fonction qui me renverrait Vrai/Faux en lui
envoyant 2 paramètres : "Quantité" (60) et "chaine de
conditionnement" (25/15/40)

Des remerciements en pagaille au premier qui trouve la sympathique
fonction.

B. Nève






--
Avatar
Firetox
Bonjour,

voila une procedure qui fait ca , j'ai fait pas mal de test avec les exemple
que tu as donne plus d'autre
ca marche, mais c'est chaud pour voir les cas possible : exemple avec 65 2
fois 25 + 15 le probleme
est que pour les test on decide d'un ordre. j'avais teste avec 15 avant .
donc je me suis penche plus serieusement sur le probleme : voila le resultat
:

//--------------------------------------------------------------------------
----------------------
PROCEDURE TestEmballage(emballage est une chaîne, quantite est une chaîne)

// format de emballage : 15/25/40
// format de quantite : 65

rest est un entier
i,j est un entier
qte est un entier = Val(quantite)

emb est un tableau dynamique
Divis est un tableau dynamique

emb = allouer un tableau de 0 entier
Divis = allouer un tableau de 0 entiers

Dimension(emb,ChaîneOccurrence(emballage,"/")+1)
Dimension(Divis,ChaîneOccurrence(emballage,"/")+1)

rest = qte

POUR i = 1 A Dimension(emb)
emb[i] = Val(ExtraitChaîne(emballage,i,"/"))
Divis[i] = PartieEntière(qte/emb[i])
FIN

POUR j = 1 A Dimension(Divis)
rest = qte - ((Divis[j] * emb[j]))
i = 1
TANTQUE i <= Dimension(emb)
SI rest = emb[i] ALORS
rest = rest - emb[i]
i=1
FIN
SI rest = 0 ALORS SORTIR
i++
FIN
SI rest = 0 ALORS SORTIR
FIN

SI rest = 0 ALORS RENVOYER Vrai
RENVOYER Faux

//--------------------------------------------------------------------------
---------------------------

ca marche meme si on inverse les emballage ex : 15/60/25/40
du moins sans les trier

Bon dev
@+

Firetox
"B. Neve" a écrit dans le message de news:
3fb94759$0$15807$
Bonsoir à tous,

Petit casse-tête entre amis...

Je voudrais dans une appli obliger de choisir une quantité qui doit être


une
combinaison d'emballages possibles.

Comme chacun sait qu'un bon exemple vaut tous les discours...

J'ai des assiettes que je peux conditionner par 15, 25, 40. Dans une
rubrique texte, on met alors
25/15/40 pour dire que 25 sera la quantité par défaut et les autres des
alternatives.
On peut bien évidemment mélanger plusieurs emballages...

Quels quantités sont valides ?

10 non... ne correspond à aucun conditionnement
15 oui facile
20 non, 1 x 15 puis ???
30 oui, 2 x 15
45 oui, 3 x 15
48 non
50 oui, 2 x 25
55 oui, 2 x 15 + 1 x 25
60 oui, 4 x 15
65, oui 1 x 40 + 1 x 25 ou 2 x 25 + 1 x 15
69, non
... Et ainsi de suite

Comment feriez vous une fonction qui me renverrait Vrai/Faux en lui


envoyant
2 paramètres : "Quantité" (60) et "chaine de conditionnement" (25/15/40)

Des remerciements en pagaille au premier qui trouve la sympathique


fonction.

B. Nève






Avatar
Roumegou
Michel Herrscher wrote:
Dans un message B. Neve disait :
Avec les modulo de tailles décroissantes :

x est le nb à envoyer
nb40 = mod ( x, 40)
xx = x - nb40*40
nb25 = mod(xx,25)
yy = xx - nb25*25
nb15 = mod(yy,15)
si (yy - (nb15*15)) <> 0 alors nb15++



oui mais non ;-) meme chose que moi qui a cru que c'était la solution.
D'abord parce que tu prends les 40 en premiers et que 45 par ex ne fn pas
avec ta soluce (alors que c'est 15*3)

Eric

HTH
Michel Herrscher Consultant
Président de WindevAsso - Association des Développeurs WINDEV(c)
http://www.windevasso.org
Tel=+33 450 870912 Fax=+33 450 871741 GSM=+33 609044711



--
Eric Roumegou
Avatar
Michel Herrscher
Dans un message Roumegou disait :

Michel Herrscher wrote:
Dans un message B. Neve disait :
Avec les modulo de tailles décroissantes :

x est le nb à envoyer
nb40 = mod ( x, 40)
xx = x - nb40*40
nb25 = mod(xx,25)
yy = xx - nb25*25
nb15 = mod(yy,15)
si (yy - (nb15*15)) <> 0 alors nb15++



oui mais non ;-) meme chose que moi qui a cru que c'était la solution.
D'abord parce que tu prends les 40 en premiers et que 45 par ex ne fn
pas avec ta soluce (alors que c'est 15*3)




Il est demandé de remplitr au mieux les plus grands, puis de plus en plus
petit non ?

dans ta reponse, est il mieux d'avoir 3 paquets de 15 ou 1 paquet de 40 et
un de 15 ?
en terme de manipulation 2 est mieux que 3, cout, transport etc ...



Eric

HTH
Michel Herrscher Consultant
Président de WindevAsso - Association des Développeurs WINDEV(c)
http://www.windevasso.org
Tel=+33 450 870912 Fax=+33 450 871741 GSM=+33 609044711





--
Michel Herrscher Consultant
Président de WindevAsso - Association des Développeurs WINDEV(c)
http://www.windevasso.org
Tel=+33 450 870912 Fax=+33 450 871741 GSM=+33 609044711
Avatar
Firetox
Voici la meme avec le detail du calcul en retour la fonction te renovie vrai
et dans
la Chaine "chaineRetour" : une chaine de la forme : 1 x 40 / 1 x 25 pour 65

//--------------------------------------------------------------------------
---------
PROCEDURE TestEmballage(emballage est une chaine, quantite est une
chaine,ChaineRetour est une chaine = "")

// format de emballage : 15/25/40
// format de quantite : 65

rest est un entier
i,j est un entier
qte est un entier = Val(quantite)
res,Res2 est une chaîne

emb est un tableau dynamique
Divis est un tableau dynamique

emb = allouer un tableau de 0 entier
Divis = allouer un tableau de 0 entiers

Dimension(emb,ChaîneOccurrence(emballage,"/")+1)
Dimension(Divis,ChaîneOccurrence(emballage,"/")+1)

rest = qte

POUR i = 1 A Dimension(emb)
emb[i] = Val(ExtraitChaîne(emballage,i,"/"))
Divis[i] = PartieEntière(qte/emb[i])
FIN

POUR j = 1 A Dimension(Divis)
rest = qte - ((Divis[j] * emb[j]))
i = 1
SI Divis[j]> 0 ALORS
res = Divis[j] + " x "+emb[j] + " / "
TANTQUE i <= Dimension(emb)
SI rest >= emb[i] ALORS
Res2 = "1 x "+emb[i] + " / "
rest = rest - emb[i]
i=1
FIN
SI rest = 0 ALORS SORTIR
Res2 = ""
i++
FIN
FIN
SI rest = 0 ALORS SORTIR
res = ""
FIN

chaineRetour = res +Res2
si rest = 0 alors renvoyer vrai
renvoyer faux

//--------------------------------------------------------------------------
-------------------------------
"Firetox" a écrit dans le message de news:
bpckt7$olr$
Bonjour,

voila une procedure qui fait ca , j'ai fait pas mal de test avec les


exemple
que tu as donne plus d'autre
ca marche, mais c'est chaud pour voir les cas possible : exemple avec 65 2
fois 25 + 15 le probleme
est que pour les test on decide d'un ordre. j'avais teste avec 15 avant .
donc je me suis penche plus serieusement sur le probleme : voila le


resultat
:




//--------------------------------------------------------------------------
----------------------
PROCEDURE TestEmballage(emballage est une chaîne, quantite est une chaîne)

// format de emballage : 15/25/40
// format de quantite : 65

rest est un entier
i,j est un entier
qte est un entier = Val(quantite)

emb est un tableau dynamique
Divis est un tableau dynamique

emb = allouer un tableau de 0 entier
Divis = allouer un tableau de 0 entiers

Dimension(emb,ChaîneOccurrence(emballage,"/")+1)
Dimension(Divis,ChaîneOccurrence(emballage,"/")+1)

rest = qte

POUR i = 1 A Dimension(emb)
emb[i] = Val(ExtraitChaîne(emballage,i,"/"))
Divis[i] = PartieEntière(qte/emb[i])
FIN

POUR j = 1 A Dimension(Divis)
rest = qte - ((Divis[j] * emb[j]))
i = 1
TANTQUE i <= Dimension(emb)
SI rest = emb[i] ALORS
rest = rest - emb[i]
i=1
FIN
SI rest = 0 ALORS SORTIR
i++
FIN
SI rest = 0 ALORS SORTIR
FIN

SI rest = 0 ALORS RENVOYER Vrai
RENVOYER Faux




//--------------------------------------------------------------------------
---------------------------

ca marche meme si on inverse les emballage ex : 15/60/25/40
du moins sans les trier

Bon dev
@+

Firetox
"B. Neve" a écrit dans le message de news:
3fb94759$0$15807$
> Bonsoir à tous,
>
> Petit casse-tête entre amis...
>
> Je voudrais dans une appli obliger de choisir une quantité qui doit être
une
> combinaison d'emballages possibles.
>
> Comme chacun sait qu'un bon exemple vaut tous les discours...
>
> J'ai des assiettes que je peux conditionner par 15, 25, 40. Dans une
> rubrique texte, on met alors
> 25/15/40 pour dire que 25 sera la quantité par défaut et les autres des
> alternatives.
> On peut bien évidemment mélanger plusieurs emballages...
>
> Quels quantités sont valides ?
>
> 10 non... ne correspond à aucun conditionnement
> 15 oui facile
> 20 non, 1 x 15 puis ???
> 30 oui, 2 x 15
> 45 oui, 3 x 15
> 48 non
> 50 oui, 2 x 25
> 55 oui, 2 x 15 + 1 x 25
> 60 oui, 4 x 15
> 65, oui 1 x 40 + 1 x 25 ou 2 x 25 + 1 x 15
> 69, non
> ... Et ainsi de suite
>
> Comment feriez vous une fonction qui me renverrait Vrai/Faux en lui
envoyant
> 2 paramètres : "Quantité" (60) et "chaine de conditionnement" (25/15/40)
>
> Des remerciements en pagaille au premier qui trouve la sympathique
fonction.
>
> B. Nève
>
>
>
>




Avatar
Bob Lamar
Dans l'article <3fb94759$0$15807$,
, dit 'B. Neve', a écrit...
Bonsoir à tous,

Petit casse-tête entre amis...

Je voudrais dans une appli obliger de choisir une quantité qui doit être une
combinaison d'emballages possibles.

Comme chacun sait qu'un bon exemple vaut tous les discours...

J'ai des assiettes que je peux conditionner par 15, 25, 40. Dans une
rubrique texte, on met alors
25/15/40 pour dire que 25 sera la quantité par défaut et les autres des
alternatives.
On peut bien évidemment mélanger plusieurs emballages...

Quels quantités sont valides ?

10 non... ne correspond à aucun conditionnement
15 oui facile
20 non, 1 x 15 puis ???
30 oui, 2 x 15
45 oui, 3 x 15
48 non
50 oui, 2 x 25
55 oui, 2 x 15 + 1 x 25
60 oui, 4 x 15
65, oui 1 x 40 + 1 x 25 ou 2 x 25 + 1 x 15
69, non
... Et ainsi de suite

Comment feriez vous une fonction qui me renverrait Vrai/Faux en lui envoyant
2 paramètres : "Quantité" (60) et "chaine de conditionnement" (25/15/40)

Des remerciements en pagaille au premier qui trouve la sympathique fonction.

B. Nève




s'il faut juste verifier si la quantite peut se conditionner.
de facon bourrin (sans tester desole) ca devrait donner :
(je passe sur la facon de recuperer les 4 parametres )

- Q : quantite
- C1,C2,C3 pour les 3 differents conditionnement

si Q > 0 alors
pour i = Q/C1 a 0 pas -1
pour j = (Q-i*C1)/C2 a 0 pas -1
si mod( (Q-i*C1-j*C2) , C3 ) = 0 alors renvoyer vrai
fin
fin
fin
renvoyer faux

si tu passes C1/C2/C3 dans l'ordre de tes preferences , ca renvoie vrai
pour la combinaison optimale (que tu peux donc recuperer)

--
o laisser la ligne contenant la mention de la personne à qui l'on répond
o ne citer que le strict nécessaire, mais citer quelque chose
o répondre point par point, en dessous du texte cité
o répondre sur usenet:<http://www.giromini.org/usenet-fr/repondre.html>
Avatar
Roumegou
Impressionnant mais comme je ne comprenais pas comment cela marchait
vraiment, j'ai testé ta proc

PROCEDURE TestEmballage(emballage est une chaîne, quantite est une
chaîne)

i = 1
TANTQUE i <= Dimension(emb)
SI rest = emb[i] ALORS



ici je crois que ce serait plutôt SI rest>=emb[i] ALORS ????


rest = rest - emb[i]
i=1
FIN



Mais en faisant des tests, Prenons la valeur 4780 qui est renvoyée
innéligible par ta proc.
C'est vrai que PartieEntiere(4780/25)= 191 soit 4475 et donc reste 5 et ça
le fait plus.
Pourtant 4780=(5 * 190) + (15 * 2)



Moralité : la bête n'est pas morte ;-)
Eric
Avatar
Firetox
si tu rajoute dans l'appel a la procedure /5 pour prendre les colis de 5 car
sinon ca fonctionne pas tu obtient : OK avec 119 x 40 / 1 x 5

ca fonctionne

faites des test avec la deuxieme celle qui donne le resultat et la chaine en
retour
pour voir le dispatch


"Roumegou" a écrit dans le message de news:
bpcnig$dtv$
Impressionnant mais comme je ne comprenais pas comment cela marchait
vraiment, j'ai testé ta proc

> PROCEDURE TestEmballage(emballage est une chaîne, quantite est une
> chaîne)
>
> i = 1
> TANTQUE i <= Dimension(emb)
> SI rest = emb[i] ALORS

ici je crois que ce serait plutôt SI rest>=emb[i] ALORS ????


> rest = rest - emb[i]
> i=1
> FIN

Mais en faisant des tests, Prenons la valeur 4780 qui est renvoyée
innéligible par ta proc.
C'est vrai que PartieEntiere(4780/25)= 191 soit 4475 et donc reste 5 et ça
le fait plus.
Pourtant 4780=(5 * 190) + (15 * 2)



Moralité : la bête n'est pas morte ;-)
Eric




1 2 3 4 5