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 modifié, 13 décembre 2025 - 21:38