Bonjour a tous en ce weekend ensoleille (je sais c'est pas un jour a
travailler! ;) )
Ceci s'adresse au mateux.
je cherche un algorithme de selection un peu special:
soit une liste de valeurs monetaires:
15.05
10.00
4.56
120.54
340.5
44.00
et ce jusqu'a environ 500 nombres.
a partir d'un parametre en % du style 40% ou 15% ou 80%
je dois separer la liste en deux ou une partie de la liste represente le
Prc% et l'autre le reste
Ex. pour la liste ci dessus qui fait 534,65, si je demande 40%
alors je dois separer la liste en 2 listes: une qui devrait etre 213,86 et
l'autre 320,79
bien sur il va etre rare d'avoir les valeurs exactes alors on doit
s'approcher au mieux..
si quelqu'un a une idee.... car mes connaissance en math sont lointaine
(25ans en arriere ;) )
Merci d'avance pour vos suggestions
A+
Stephane D.
http://www.diamondsoftware.net
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Gilles TOURREAU
Le 16/07/2006, Stephane Dujourdy a supposé :
Bonjour a tous en ce weekend ensoleille (je sais c'est pas un jour a travailler! ;) ) Ceci s'adresse au mateux. je cherche un algorithme de selection un peu special: soit une liste de valeurs monetaires: 15.05 10.00 4.56 120.54 340.5 44.00 et ce jusqu'a environ 500 nombres. a partir d'un parametre en % du style 40% ou 15% ou 80% je dois separer la liste en deux ou une partie de la liste represente le Prc% et l'autre le reste Ex. pour la liste ci dessus qui fait 534,65, si je demande 40% alors je dois separer la liste en 2 listes: une qui devrait etre 213,86 et l'autre 320,79 bien sur il va etre rare d'avoir les valeurs exactes alors on doit s'approcher au mieux.. si quelqu'un a une idee.... car mes connaissance en math sont lointaine (25ans en arriere ;) )
Merci d'avance pour vos suggestions A+ Stephane D. http://www.diamondsoftware.net
J'avais posé ce genre de question sur ce forum mais en recherchant un total exacte (d'ailleurs c'était Sir Demeester qui m'avait aidé à trouver la soluce)
Exemple tu as 5 valeurs suivantes numéroté :
1/100¤ 2/50¤ 3/200¤ 4/75¤ 5/500¤
Tu cherches à trouver 225 ¤, il faut pour cela réaliser toutes les combinaisons possibles qui sont au nombre de 2^n où n est le nombre de valeurs différentes (ici 5) soir 2^5 = 32.
Avec "1" pour dire qu'il faut prendre la valeur et "0" pour ne pas la prendre...
Dans notre exemple il faudra prendre les valeurs 1, 2 et 4 pour obtenir 225 ¤...
J'espère que cela te donnera un bout de piste... L'idéal pour toi c'est de calculer pour chaque combinaison le pourcentage et on stock la combinaison qui se rapproche le mieux de ton total...
2 façon de faire l'algo :
1/L'algo dit : "je suis pressé, et je n'ai pas le temps de faire çà propre" Tu génère un tableau de tableau de booleen qui représente le tableau des différentes combinaisons de 1 à 2^n :
GénéréTableauCombinaison(Combinaison)
pour i = 1 A chaque combinaison (2^n): Total = 0 Pour i = 1 A NombreDeValeursDifférentes (n) Si Combinaison[i][j] = Vrai ALORS Total += Valeur[j] FIN FIN
Si CalculPourcentage(Total) proche de la valeur recherche Alors EnregistrerCombinaison() FIN FIN
Renvoyer CombinaisonEnregistré()
2/L'algo dit : "il me reste encore beaucoup de cheveux..." c'est-à-dire de façon récursive :
Pour cela je te renvoi à la LST 63 page 18 "Rapprochement". C'est un exemple qui montre comment faire un rapprochement bancaire...
Cordialement
-- Gilles TOURREAU Responsable informatique
Société P.O.S Spécialiste en motoculture depuis + de 30 ans ! http://www.pos.fr
Le 16/07/2006, Stephane Dujourdy a supposé :
Bonjour a tous en ce weekend ensoleille (je sais c'est pas un jour a
travailler! ;) )
Ceci s'adresse au mateux.
je cherche un algorithme de selection un peu special:
soit une liste de valeurs monetaires:
15.05
10.00
4.56
120.54
340.5
44.00
et ce jusqu'a environ 500 nombres.
a partir d'un parametre en % du style 40% ou 15% ou 80%
je dois separer la liste en deux ou une partie de la liste represente le
Prc% et l'autre le reste
Ex. pour la liste ci dessus qui fait 534,65, si je demande 40%
alors je dois separer la liste en 2 listes: une qui devrait etre 213,86 et
l'autre 320,79
bien sur il va etre rare d'avoir les valeurs exactes alors on doit
s'approcher au mieux..
si quelqu'un a une idee.... car mes connaissance en math sont lointaine
(25ans en arriere ;) )
Merci d'avance pour vos suggestions
A+
Stephane D.
http://www.diamondsoftware.net
J'avais posé ce genre de question sur ce forum mais en recherchant un
total exacte (d'ailleurs c'était Sir Demeester qui m'avait aidé à
trouver la soluce)
Exemple tu as 5 valeurs suivantes numéroté :
1/100¤
2/50¤
3/200¤
4/75¤
5/500¤
Tu cherches à trouver 225 ¤, il faut pour cela réaliser toutes les
combinaisons possibles qui sont au nombre de 2^n où n est le nombre de
valeurs différentes (ici 5) soir 2^5 = 32.
Avec "1" pour dire qu'il faut prendre la valeur et "0" pour ne pas la
prendre...
Dans notre exemple il faudra prendre les valeurs 1, 2 et 4 pour obtenir
225 ¤...
J'espère que cela te donnera un bout de piste...
L'idéal pour toi c'est de calculer pour chaque combinaison le
pourcentage et on stock la combinaison qui se rapproche le mieux de ton
total...
2 façon de faire l'algo :
1/L'algo dit : "je suis pressé, et je n'ai pas le temps de faire çà
propre"
Tu génère un tableau de tableau de booleen qui représente le tableau
des différentes combinaisons de 1 à 2^n :
GénéréTableauCombinaison(Combinaison)
pour i = 1 A chaque combinaison (2^n):
Total = 0
Pour i = 1 A NombreDeValeursDifférentes (n)
Si Combinaison[i][j] = Vrai ALORS
Total += Valeur[j]
FIN
FIN
Si CalculPourcentage(Total) proche de la valeur recherche Alors
EnregistrerCombinaison()
FIN
FIN
Renvoyer CombinaisonEnregistré()
2/L'algo dit : "il me reste encore beaucoup de cheveux..." c'est-à-dire
de façon récursive :
Pour cela je te renvoi à la LST 63 page 18 "Rapprochement".
C'est un exemple qui montre comment faire un rapprochement bancaire...
Bonjour a tous en ce weekend ensoleille (je sais c'est pas un jour a travailler! ;) ) Ceci s'adresse au mateux. je cherche un algorithme de selection un peu special: soit une liste de valeurs monetaires: 15.05 10.00 4.56 120.54 340.5 44.00 et ce jusqu'a environ 500 nombres. a partir d'un parametre en % du style 40% ou 15% ou 80% je dois separer la liste en deux ou une partie de la liste represente le Prc% et l'autre le reste Ex. pour la liste ci dessus qui fait 534,65, si je demande 40% alors je dois separer la liste en 2 listes: une qui devrait etre 213,86 et l'autre 320,79 bien sur il va etre rare d'avoir les valeurs exactes alors on doit s'approcher au mieux.. si quelqu'un a une idee.... car mes connaissance en math sont lointaine (25ans en arriere ;) )
Merci d'avance pour vos suggestions A+ Stephane D. http://www.diamondsoftware.net
J'avais posé ce genre de question sur ce forum mais en recherchant un total exacte (d'ailleurs c'était Sir Demeester qui m'avait aidé à trouver la soluce)
Exemple tu as 5 valeurs suivantes numéroté :
1/100¤ 2/50¤ 3/200¤ 4/75¤ 5/500¤
Tu cherches à trouver 225 ¤, il faut pour cela réaliser toutes les combinaisons possibles qui sont au nombre de 2^n où n est le nombre de valeurs différentes (ici 5) soir 2^5 = 32.
Avec "1" pour dire qu'il faut prendre la valeur et "0" pour ne pas la prendre...
Dans notre exemple il faudra prendre les valeurs 1, 2 et 4 pour obtenir 225 ¤...
J'espère que cela te donnera un bout de piste... L'idéal pour toi c'est de calculer pour chaque combinaison le pourcentage et on stock la combinaison qui se rapproche le mieux de ton total...
2 façon de faire l'algo :
1/L'algo dit : "je suis pressé, et je n'ai pas le temps de faire çà propre" Tu génère un tableau de tableau de booleen qui représente le tableau des différentes combinaisons de 1 à 2^n :
GénéréTableauCombinaison(Combinaison)
pour i = 1 A chaque combinaison (2^n): Total = 0 Pour i = 1 A NombreDeValeursDifférentes (n) Si Combinaison[i][j] = Vrai ALORS Total += Valeur[j] FIN FIN
Si CalculPourcentage(Total) proche de la valeur recherche Alors EnregistrerCombinaison() FIN FIN
Renvoyer CombinaisonEnregistré()
2/L'algo dit : "il me reste encore beaucoup de cheveux..." c'est-à-dire de façon récursive :
Pour cela je te renvoi à la LST 63 page 18 "Rapprochement". C'est un exemple qui montre comment faire un rapprochement bancaire...
Cordialement
-- Gilles TOURREAU Responsable informatique
Société P.O.S Spécialiste en motoculture depuis + de 30 ans ! http://www.pos.fr
Emmanuel Lecoester
Je proposerais : - Un tri du tableau décroissant (du plus grand au plus petit) - Un calcul de la somme totale => determination de mes 40_pourc - Un parcours pour determiner mes deux listes.
mavaleur=0 Liste_KO est un tableau dynamique // je te laisse le soin de gérer ceà Liste_OK est un tableau dynamique // je te laisse le soin de gérer ceà
Pour i=1 a Taille(TAB) si TAB[i]+ma_valeur <= 40_pourc alors mavaleur = mavaleur +TAB[i] ajout de i dans Liste_OK sinon ajout de i dans Liste_KO finsi fin pour
Voilà c'est fini.
"Stephane Dujourdy" a écrit dans le message de news:C0DFD815.3255%
Bonjour a tous en ce weekend ensoleille (je sais c'est pas un jour a travailler! ;) ) Ceci s'adresse au mateux. je cherche un algorithme de selection un peu special: soit une liste de valeurs monetaires: 15.05 10.00 4.56 120.54 340.5 44.00 et ce jusqu'a environ 500 nombres. a partir d'un parametre en % du style 40% ou 15% ou 80% je dois separer la liste en deux ou une partie de la liste represente le Prc% et l'autre le reste Ex. pour la liste ci dessus qui fait 534,65, si je demande 40% alors je dois separer la liste en 2 listes: une qui devrait etre 213,86 et l'autre 320,79 bien sur il va etre rare d'avoir les valeurs exactes alors on doit s'approcher au mieux.. si quelqu'un a une idee.... car mes connaissance en math sont lointaine (25ans en arriere ;) )
Merci d'avance pour vos suggestions A+ Stephane D. http://www.diamondsoftware.net
Je proposerais :
- Un tri du tableau décroissant (du plus grand au plus petit)
- Un calcul de la somme totale => determination de mes 40_pourc
- Un parcours pour determiner mes deux listes.
mavaleur=0
Liste_KO est un tableau dynamique // je te laisse le soin de gérer ceà
Liste_OK est un tableau dynamique // je te laisse le soin de gérer ceà
Pour i=1 a Taille(TAB)
si TAB[i]+ma_valeur <= 40_pourc alors
mavaleur = mavaleur +TAB[i]
ajout de i dans Liste_OK
sinon
ajout de i dans Liste_KO
finsi
fin pour
Voilà c'est fini.
"Stephane Dujourdy" <diamonds@skynet.be> a écrit dans le message de
news:C0DFD815.3255%diamonds@skynet.be...
Bonjour a tous en ce weekend ensoleille (je sais c'est pas un jour a
travailler! ;) )
Ceci s'adresse au mateux.
je cherche un algorithme de selection un peu special:
soit une liste de valeurs monetaires:
15.05
10.00
4.56
120.54
340.5
44.00
et ce jusqu'a environ 500 nombres.
a partir d'un parametre en % du style 40% ou 15% ou 80%
je dois separer la liste en deux ou une partie de la liste represente le
Prc% et l'autre le reste
Ex. pour la liste ci dessus qui fait 534,65, si je demande 40%
alors je dois separer la liste en 2 listes: une qui devrait etre 213,86 et
l'autre 320,79
bien sur il va etre rare d'avoir les valeurs exactes alors on doit
s'approcher au mieux..
si quelqu'un a une idee.... car mes connaissance en math sont lointaine
(25ans en arriere ;) )
Merci d'avance pour vos suggestions
A+
Stephane D.
http://www.diamondsoftware.net
Je proposerais : - Un tri du tableau décroissant (du plus grand au plus petit) - Un calcul de la somme totale => determination de mes 40_pourc - Un parcours pour determiner mes deux listes.
mavaleur=0 Liste_KO est un tableau dynamique // je te laisse le soin de gérer ceà Liste_OK est un tableau dynamique // je te laisse le soin de gérer ceà
Pour i=1 a Taille(TAB) si TAB[i]+ma_valeur <= 40_pourc alors mavaleur = mavaleur +TAB[i] ajout de i dans Liste_OK sinon ajout de i dans Liste_KO finsi fin pour
Voilà c'est fini.
"Stephane Dujourdy" a écrit dans le message de news:C0DFD815.3255%
Bonjour a tous en ce weekend ensoleille (je sais c'est pas un jour a travailler! ;) ) Ceci s'adresse au mateux. je cherche un algorithme de selection un peu special: soit une liste de valeurs monetaires: 15.05 10.00 4.56 120.54 340.5 44.00 et ce jusqu'a environ 500 nombres. a partir d'un parametre en % du style 40% ou 15% ou 80% je dois separer la liste en deux ou une partie de la liste represente le Prc% et l'autre le reste Ex. pour la liste ci dessus qui fait 534,65, si je demande 40% alors je dois separer la liste en 2 listes: une qui devrait etre 213,86 et l'autre 320,79 bien sur il va etre rare d'avoir les valeurs exactes alors on doit s'approcher au mieux.. si quelqu'un a une idee.... car mes connaissance en math sont lointaine (25ans en arriere ;) )
Merci d'avance pour vos suggestions A+ Stephane D. http://www.diamondsoftware.net
Stephane Dujourdy
Bonjour Gilles et Emmanuel, Pour Gilles: La premiere methode ne va pas aller car je peux avoir jusqu'a 500 valeurs a tester et donc 2^500 ca va faire un peu grand pour notre Windev! Je viens de regarder la LST63 et je crois que ca va aller, a moi de la traduire en WD55 car le projet est en WD55.
Piur Emmanuel: Ton algo a l'air tres rapide mais il ne choisi pas dans toutes Les combinaisons possibles. Je vais aussi l'implante pour voir Ce que cela donne et si ca suffit. Merci.
en esperant que la procedure ne mettra pas 3 jours pour faire les calculs... Merci a tous les 2 pour l'aide A+ Stephane D. http://www.diamondsoftware.net
Bonjour Gilles et Emmanuel,
Pour Gilles:
La premiere methode ne va pas aller car je peux avoir jusqu'a 500 valeurs a
tester
et donc 2^500 ca va faire un peu grand pour notre Windev!
Je viens de regarder la LST63 et je crois que ca va aller, a moi de la
traduire en WD55
car le projet est en WD55.
Piur Emmanuel:
Ton algo a l'air tres rapide mais il ne choisi pas dans toutes
Les combinaisons possibles. Je vais aussi l'implante pour voir
Ce que cela donne et si ca suffit. Merci.
en esperant que la procedure ne mettra pas 3 jours pour faire les calculs...
Merci a tous les 2 pour l'aide
A+
Stephane D.
http://www.diamondsoftware.net
Bonjour Gilles et Emmanuel, Pour Gilles: La premiere methode ne va pas aller car je peux avoir jusqu'a 500 valeurs a tester et donc 2^500 ca va faire un peu grand pour notre Windev! Je viens de regarder la LST63 et je crois que ca va aller, a moi de la traduire en WD55 car le projet est en WD55.
Piur Emmanuel: Ton algo a l'air tres rapide mais il ne choisi pas dans toutes Les combinaisons possibles. Je vais aussi l'implante pour voir Ce que cela donne et si ca suffit. Merci.
en esperant que la procedure ne mettra pas 3 jours pour faire les calculs... Merci a tous les 2 pour l'aide A+ Stephane D. http://www.diamondsoftware.net