|
| Calcul Optiimisé: Je cherche une méthode |
| Started by Ralph IGCI, Dec., 13 2025 2:09 PM - 9 replies |
| |
| | | |
|
| |
Registered member 543 messages |
|
| Posted on December, 13 2025 - 2:09 PM |
Bonjour, je cherche une procédure pour optimiser un tableau J'ai une structure et je désire varier les qté pour trouver un total. Je veux une méthode pour monter l'algorithme
J'ai dans la procédure globale
stfiche est une structure id est une entier qte est une réel Val_Unit est un monétaire Val_ligne est un monétaire FIN
J'ai la procedure suivante :
Procedure Best(moMvaleur est un monétaire,tabLeaudetailsfichebase est un tableau de stfiche)
tabLeaudetailsfiche est un tableau de stfiche
RENVOYER tabLeaudetailsfiche
Dans TAF, je dois jour sur le paramètres qte de jusqu'à obtenir la somme de Val_ligne =moMvaleur
Je cherche les pistes. je ne souhaite pas jouer les Val_Unit, même comme c'est une option. En discutant avec le fournisseur, je ne dois pas depasser une variation de 3% en cas de besoinMessage modified, December, 13 2025 - 2:26 PM |
| |
| |
| | | |
|
| | |
| |
Registered member 1,015 messages |
|
| Posted on December, 13 2025 - 6:16 PM |
Bonjour,
si j'ai bien compris, vous avez une marge de 3% applicable sur : moMvaleur dans ce cas, vous pouvez faire le calcul suivant :
UnitMax = PartieEntière((moMvaleur * 1.03) / Val_Unit)
par exemple, pour moMvaleur = 50 et 3% de variation soit 51.5, et val_Unit = 2.5 UnitMax = PartieEntière(51.5 / 2.5) UnitMax = 20
donc vous pouvez faire varier votre tableau de 1 à 20 sans dépasser moMValeur + 3%
Cdlt |
| |
| |
| | | |
|
| | |
| |
Registered member 4,322 messages |
|
| Posted on December, 13 2025 - 9:31 PM |
Bonjour, L'idée est de calculer le nombre de produit le plus cher qu'il est possible d'acheter. Avec ce qu'il reste on calcule la quantité d'article possible dont le prix est juste inférieur, etc. Une fois cela terminé, on tente d'ajouter un produit dont le prix est le plus petit, et on vérifie que l'on ne dépasse pas les 3% de marge.
CArticle est une Classe PRIVÉ m_pkId_Article est entier sur 8 m_saDésignation est une chaîne m_moPrixArticle est monétaire m_nQuantité est entier
FIN
Procedure Constructeur(pkId est entier sur 8,saDésignation est chaîne,moPrix est monétaire)
:m_pkId_Article=pkId :m_saDésignation=saDésignation :m_moPrixArticle=moPrix
Procedure Constructeur()
Getter/Setter
Procedure PUBLIQUE p_pkId_Article() : entier sur 8 octets
RENVOYER m_pkId_Article Procedure PUBLIQUE p_pkId_Article(pkValeur est un entier sur 8 octets)
m_pkId_Article=pkValeur Procedure PUBLIQUE p_moPrixArticle() : monétaire
RENVOYER m_moPrixArticle Procedure PUBLIQUE p_moPrixArticle(moValeur est un monétaire)
m_moPrixArticle=moValeur Procedure PUBLIQUE p_saDésignation() : chaîne
RENVOYER m_saDésignation Procedure PUBLIQUE p_saDésignation(saValeur est une chaîne)
m_saDésignation=saValeur Procedure PUBLIQUE p_nQuantité() : entier
RENVOYER m_nQuantité Procedure PUBLIQUE p_nQuantité(nValeur est un entier)
m_nQuantité=nValeur
FONCTION PUBLIQUE ValeurCommandeArticle() :monétaire
RENVOYER :m_moPrixArticle*:m_nQuantité
Procedure QuantitéMax(moPlafond est monétaire)
SI (moPlafond>=p_moPrixArticle) ALORS m_nQuantité=PartieEntière((moPlafond)/:p_moPrixArticle) moPlafond=moPlafond-:ValeurCommandeArticle() FIN
Classe Commande
CCommande est une Classe PRIVÉ m_tabCommandeArticle est tableau de CArticle FIN
Procedure Optimisation(moPlafond est monétaire) nIndice est un entier moNouveauPlafond est monétaire
TableauTrie(m_tabCommandeArticle,ttMembre,"-m_moPrixArticle")
moNouveauPlafond=moPlafond POUR nIndice = 1 _À_ :NbArticle m_tabCommandeArticle[nIndice]:QuantitéMax(moNouveauPlafond) FIN
Ajustement(moPlafond)
:Méthodes annexe Procedure NouvelArticle(clUnArticle est un CArticle) TableauAjoute(:m_tabCommandeArticle,clUnArticle)
FONCTION PRIVÉE TotalCommande() :monétaire nIndice est un entier moTotal est un monétaire
POUR nIndice=1 _À_ :m_tabCommandeArticle..Occurrence moTotal+=:m_tabCommandeArticle[nIndice]:ValeurCommandeArticle FIN
RENVOYER moTotal
Procedure PRIVÉE Ajustement(moPlafond)
m_tabCommandeArticle[:NbArticle]:p_nQuantité++ SI :TotalCommande()>moPlafond*1.03 ALORS m_tabCommandeArticle[:NbArticle]:p_nQuantité FIN
Procedure PUBLIQUE NbArticle() RENVOYER :m_tabCommandeArticle..Occurrence
Utilisation
clUnArticle est CArticle clUneCommande est CCommande
<BLOC Initialisation exemple> clUnArticle=allouer un CArticle(1,"Art 1",37) clUneCommande.NouvelArticle(clUnArticle) clUnArticle=allouer un CArticle(2,"Art 2",49) clUneCommande.NouvelArticle(clUnArticle) clUnArticle=allouer un CArticle(3,"Art 3",12) clUneCommande.NouvelArticle(clUnArticle) clUnArticle=allouer un CArticle(4,"Art 4",25) clUneCommande.NouvelArticle(clUnArticle) <FIN>
clUneCommande.Optimisation(1561)
POUR TOUT clArticle de clUneCommande:p_tabCommandeArticle TraceConstruit("%1%4%2%4%3",clArticle:p_saDésignation,clArticle:p_moPrixArticle,clArticle:p_nQuantité,TAB) FIN
-- Il y a peut être plus simple, mais, ça tourne Quand tout a échoué, utilise l'option RTFMMessage modified, December, 13 2025 - 9:38 PM |
| |
| |
| | | |
|
| | |
| |
Registered member 902 messages |
|
| Posted on December, 13 2025 - 11:05 PM |
Waouuuuuu Voroltinquo ! 
Tu n'as pas l'algorytme pour gagner au loto ??
Ah oui, il faudrait que je joue !! Dommage que le questionneur ne paie pas à la ligne et à l'aide fournie, tu serais riche.
En tout cas, programmation propre, structurée, moderne. Même si je n'ai pas copié et testé  Bonne fin de week-end VoroltinquoMessage modified, December, 13 2025 - 11:05 PM |
| |
| |
| | | |
|
| | |
| |
Registered member 543 messages |
|
| Posted on December, 14 2025 - 8:20 AM |
Merci, J'ai reconstituer. Mais j'ai une erreur à corriger. Dans L'l'utillisation, POUR TOUT clArticle de clUneCommande:p_tabCommandeArticle TraceConstruit("%1%4%2%4%3",clArticle:p_saDésignation,clArticle:p_moPrixArticle,clArticle:p_nQuantité,TAB) FIN
p_tabCommandeArticle n'est pas reconnu. COmment corriger ? Dois rendre m_tabCommandeArticle PUBLIQUE ou créer p_tabCommandeArticle PUBLIQUE ? Merci encoreMessage modified, December, 14 2025 - 9:47 AM |
| |
| |
| | | |
|
| | |
| |
Registered member 543 messages |
|
| Posted on December, 14 2025 - 9:44 AM |
| Honnêtement, c'est plus que espéré pour la compréhension |
| |
| |
| | | |
|
| | |
| |
Registered member 4,322 messages |
|
| Posted on December, 14 2025 - 2:45 PM |
Ralph IGCI a écrit :
p_tabCommandeArticle n'est pas reconnu. COmment corriger ? Dois rendre m_tabCommandeArticle PUBLIQUE ou créer p_tabCommandeArticle PUBLIQUE ?
ça a du sauter à la copie,
Tu dois créer un getter :
Procedure PUBLIQUE p_tabCommandeArticle()
RENVOYER m_tabCommandeArticle
En POO, on ne rend visible (PUBLIC) que ce que l'utilisateur (de la classe) a le droit d'utiliser. Note: Il faut modifier la dernière ligne de la méthode Optimisation
SI moPlafond<>0 ALORS :Ajustement(moPlafond) FIN -- Il y a peut être plus simple, mais, ça tourne Quand tout a échoué, utilise l'option RTFMMessage modified, December, 14 2025 - 2:53 PM |
| |
| |
| | | |
|
| | |
| |
Registered member 4,322 messages |
|
| Posted on December, 14 2025 - 3:17 PM |
Par contre je me demande si la règle des 3% s'applique au montant total ou à l'article le moins cher. En effet, dans notre cas, si avant l'ajustement, il reste 0,04€ à "dépenser" (moNouveauPlafond après le traitement de l'article le moins cher), pourquoi ajouter 12€.
A voir avec l'utilisateur -- Il y a peut être plus simple, mais, ça tourne Quand tout a échoué, utilise l'option RTFMMessage modified, December, 14 2025 - 3:28 PM |
| |
| |
| | | |
|
| | |
| |
Registered member 543 messages |
|
| Posted on December, 15 2025 - 8:30 AM |
| |
| |
| | | |
|
| | |
| |
Registered member 543 messages |
|
| Posted on December, 15 2025 - 9:09 AM |
Bonjour Ma question était de savoir, et si on mettait un article obligatoire. C'est ce qui arrive souvent dans ce genre d'exercice, il y a une chose qui doit être là à tout prix, comment la prendre en compte proprement. je prends le cas d'une ménagère qui doit pour une cérémonie acheter tout mais l'huile et le sel sont obligatoire. Toujours dans le sens de l'optimisation, les articles peuvent être choisis de façon aleatoire pour que l'optimisation sois variant. Au besoin, fixer le budget pour l'article. Il faudrait dans ce cas faire évoluer l'OptimisationMessage modified, December, 15 2025 - 9:56 AM |
| |
| |
| | | |
|
| | | | |
| | |
|