Comment construire mon algorithme ?
Résolu
lml-mike
Messages postés
487
Statut
Contributeur
-
lml-mike Messages postés 487 Statut Contributeur -
lml-mike Messages postés 487 Statut Contributeur -
Bonjour,
Je suis en train de m'arracher la tête sur une problématique d'algorithme que je n'arrive pas à concevoir...Toute aide sur sa construction est la bienvenue !
Je vous explique la situation et les contraintes :
____________________________________________
J'ai un tableau de l'historique de mes consommations (Sandwich, boisson, chips etc...) de plusieurs colonnes et de 2 lignes constitué :
1°ligne : la nature de ma consommation
2°ligne : Son prix.
Lorsque le total de mes consommations est supérieur à 6, 15 ou 28 €, une formule est applicable mais sous certaines conditions :
6€ : Je dois avoir pris un Repas*
15€ : Je dois avoir pris un Repas*
28€ : Je dois avoir pris 2 Repas*
*Un Repas =
- une boisson d'une valeur de 1,30€ (ou moins) et un sandwich d'une valeur de 3,50€ (ou moins),
OU
- 4 boissons d'une valeur de 1,30€ (ou moins)
J'ai dans mes consommations :
Des sandwichs de 2,50€ à 4,50€
des boissons de 1€ à 2,50€
Pour les suppléments :
- Tous les sandwichs de plus de 3,50€ peuvent être utilisé dans un repas, mais un supplément correspondant à la différence du prix moins 3,50€ doit être appliqué.
- Toutes les boissons de plus de 1,30€ peuvent être utilisé dans un repas, mais un supplément correspondant à la différence du prix moins 1,30€ doit être appliqué.
J'ai 2 problématiques, une pas facile et l'autre infaisable :
1°) par quel moyen je peux calculer le prix total en appliquant les formules (ou pas) à mon tableau en quête d'un (pour la formule 6€) ou plusieurs repas (15€,28€) (sachant que 2 maximum me suffisent), sachant que les consommations les plus proches de 3,50€ (ou 1,30 s'il s'agit de 4 boissons) doivent être utilisées ?
2°) Comment je peux informer le client s'il lui manque une boisson ou un sandwich pour bénéficier d'une offre plus intéressante que ce qu'il doit payer actuellement ?
_________________________________
je pose cela si jamais un amateur de sujet d'algorithmes passe par là. Mon problème est vraiment casse-tête ^^'
Merci en tout cas pour votre attention !
Mike.
Je suis en train de m'arracher la tête sur une problématique d'algorithme que je n'arrive pas à concevoir...Toute aide sur sa construction est la bienvenue !
Je vous explique la situation et les contraintes :
____________________________________________
J'ai un tableau de l'historique de mes consommations (Sandwich, boisson, chips etc...) de plusieurs colonnes et de 2 lignes constitué :
1°ligne : la nature de ma consommation
2°ligne : Son prix.
Lorsque le total de mes consommations est supérieur à 6, 15 ou 28 €, une formule est applicable mais sous certaines conditions :
6€ : Je dois avoir pris un Repas*
15€ : Je dois avoir pris un Repas*
28€ : Je dois avoir pris 2 Repas*
*Un Repas =
- une boisson d'une valeur de 1,30€ (ou moins) et un sandwich d'une valeur de 3,50€ (ou moins),
OU
- 4 boissons d'une valeur de 1,30€ (ou moins)
J'ai dans mes consommations :
Des sandwichs de 2,50€ à 4,50€
des boissons de 1€ à 2,50€
Pour les suppléments :
- Tous les sandwichs de plus de 3,50€ peuvent être utilisé dans un repas, mais un supplément correspondant à la différence du prix moins 3,50€ doit être appliqué.
- Toutes les boissons de plus de 1,30€ peuvent être utilisé dans un repas, mais un supplément correspondant à la différence du prix moins 1,30€ doit être appliqué.
J'ai 2 problématiques, une pas facile et l'autre infaisable :
1°) par quel moyen je peux calculer le prix total en appliquant les formules (ou pas) à mon tableau en quête d'un (pour la formule 6€) ou plusieurs repas (15€,28€) (sachant que 2 maximum me suffisent), sachant que les consommations les plus proches de 3,50€ (ou 1,30 s'il s'agit de 4 boissons) doivent être utilisées ?
2°) Comment je peux informer le client s'il lui manque une boisson ou un sandwich pour bénéficier d'une offre plus intéressante que ce qu'il doit payer actuellement ?
_________________________________
je pose cela si jamais un amateur de sujet d'algorithmes passe par là. Mon problème est vraiment casse-tête ^^'
Merci en tout cas pour votre attention !
Mike.
A voir également:
- Comment construire mon algorithme ?
- Logiciel algorithme euromillion - Télécharger - Loisirs créatifs
- Construire un organigramme - Guide
- Jeux pour construire des maisons en 3d gratuit - Télécharger - Architecture & Déco
- Algorithme application pc - Télécharger - Édition & Programmation
- Algorithme euromillion excel gratuit - Forum Algorithmes / Méthodes
4 réponses
Bonsoir,
Peux-tu détailler ce que tu appelles formule : je ne vois pas quelle est la différence entre 6 et 15€
@+
Peux-tu détailler ce que tu appelles formule : je ne vois pas quelle est la différence entre 6 et 15€
@+
Voilà l'algorithme quasi-incompréhensible que j'ai fais suivant mon problème.
Je suis désolé mais je suis pas développeur à la base, désolé si certaines fonctions de l'algorithme s'écrivent pas réellement comme ça...
(désolé, l'indentation ne fonctionne pas sur CCM sur les dernières lignes je sais pas pourquoi ...)
Pour les plus tordus, bonne chance, j'espère que vous arriverez à suivre :
___________________________________
________________________________________
J'ai deux problèmes insolubles avec cet algorithme :
- Si un client prends 8 boissons seulement, ils ne seront pas comptabilisés comme 2 repas, mais comme un seul
- Si un client prends 4 boissons et un sandwich, ils seront comptabilisés comme 2 repas alors qu'il manque une boisson.
Si un casse-cou est prêt à m'aider à régler ce problème, je lui en serait vraiment reconnaissant !!
Merci pour votre attention !
Je suis désolé mais je suis pas développeur à la base, désolé si certaines fonctions de l'algorithme s'écrivent pas réellement comme ça...
(désolé, l'indentation ne fonctionne pas sur CCM sur les dernières lignes je sais pas pourquoi ...)
Pour les plus tordus, bonne chance, j'espère que vous arriverez à suivre :
___________________________________
Début Case tableau(Colonne1,Ligne1) Tant que .active <> « » Si .active = « Salade » alors Nbsandwich <- nbsandwich + 1 Sandwich <- 1 Sinon si .active = « Sandwich » alors Nbsandwich <- nbsandwich + 1 Sandwich <- 1 Sinon si .active = « Pizza » alors Nbsandwich <- nbsandwich + 1 Sandwich <- 1 Sinon si .active = « Pâtes » alors Nbsandwich <- nbsandwich + 1 Sandwich <- 1 Sinon si .active = « Frites » alors Nbsandwich <- nbsandwich + 1 Sandwich <- 1 Sinon si .active = « boisson » alors Nbboisson <- nbboisson + 1 Boisson <- 1 Fin si Case suivante Prix_conso <- .active Si sandwich = 1 alors Si prix_formule < prix_conso alors Prix_formule <- prix_conso Sinon si prix_formuleb < prix_conso alors Prix_formuleb <- prix_conso Fin si Fin si Si boisson = 1 alors Si prix_formule2 < prix_conso alors Prix_formule2 <- prix_conso Sinon si prix_formule2b < prix_conso alors Prix_formule2b <- prix_conso Sinon si prix_formule2c < prix_conso alors Prix_formule2c <- prix_conso Sinon si prix_formule2d < prix_conso alors Prix_formule2d <- prix_conso Fin si Sandwich <- 0 Boisson <- 0 Colonne suivante Case -1 Fin tant que Si prix_formule > 3.5 alors Diff_Prix_formule <- Diff_prix_formule - 3.5 Fin si Si prix_formuleb > 3.5 alors Diff_prix_formule2 <- Diff_prix_formule2 - 3.5 Fin si Si prix_formule2 > 1.3 alors Diff_prix_formule2 <- Diff_prix_formule2 - 1.3 Fin si Si prix_formule2b > 1.3 alors Diff_prix_formule2b <- Diff_prix_formule2b - 1.3 Fin si Si prix_formule2c > 1.3 alors Diff_prix_formule2c <- Diff_prix_formule2c - 1.3 Fin si Si prix_formule2b > 1.3 alors Diff_prix_formule2d <- Diff_prix_formule2d - 1.3 Fin si Si prix_formule2 <> « » et prix_formule2b <> « » et prix_formule2c <> « » et prix_formule2d <> « » et repas < 2 alors Déduction_repas = Déduction_repas + prix_formule2 + prix_formule2b + prix_formule2c + prix_formule2d Supp_repas = supp_repas + Diff_prix_formule2 + Diff_prix_formule2b + Diff_prix_formule2c + Diff_prix_formule2d Repas <- Repas + 1 Fin si Si prix_formule <> « » et prix_formule2 <> « » et repas < 2 alors Déduction_repas = Déduction_repas + prix_formule + prix_formule2 Supp_repas = Supp_repas + diff_prix_formule + diff_prix_formule2 Repas <- Repas + 1 Fin Si Si prix_formuleb <> « » et prix_formule2b <> « » < 2 alors Déduction_repas = Déduction_repas + prix_formuleb + prix_formule2b Supp_repas = Supp_repas + diff_prix_formuleb + diff_prix_formule2b Repas <- Repas + 1 Fin si Si prix_total_conso > 28 alors Si repas = 2 alors Prix_total_conso = prix_total_conso - Déduction_repas Prix_total_conso = prix_total_conso + 28 Prix_total_conso = prix_total_conso + Supp_repas Afficher « Formule 28€ appliquée ! » Sinon Afficher « Il vous manque » & 2 - Repas & « Repas pour valider une formule journée ! » Fin si Sinon si prix_total_conso > 15 alors Si repas = 1 alors Prix_total_conso = prix_total_conso - Déduction_repas Prix_total_conso = prix_total_conso + 15 Prix_total_conso = prix_total_conso + Supp_repas Afficher « Formule 15€ appliquée ! » Sinon Afficher « Il vous manque un repas pour valider une formule Demi-journée ! » Fin si Sinon si prix_total_conso > 6 alors Si repas = 1 alors Prix_total_conso = prix_total_conso - Déduction_repas Prix_total_conso = prix_total_conso + 6 Prix_total_conso = prix_total_conso + Supp_repas Afficher « Formule 15€ appliquée ! » Sinon Afficher « Il vous manque un repas pour valider une formule à toute heure ! » Fin si Fin si Afficher « Vous devez payer » & prix_total_conso & « euros » Fin
________________________________________
J'ai deux problèmes insolubles avec cet algorithme :
- Si un client prends 8 boissons seulement, ils ne seront pas comptabilisés comme 2 repas, mais comme un seul
- Si un client prends 4 boissons et un sandwich, ils seront comptabilisés comme 2 repas alors qu'il manque une boisson.
Si un casse-cou est prêt à m'aider à régler ce problème, je lui en serait vraiment reconnaissant !!
Merci pour votre attention !
Bonjour,
L'application des formules n'est pas très clair (en tout cas pour moi) :
si le client prend 2 sandwichs et 4 boissons : a-t-il deux repas et deux boissons ou un repas et deux sandwichs?
@+
L'application des formules n'est pas très clair (en tout cas pour moi) :
si le client prend 2 sandwichs et 4 boissons : a-t-il deux repas et deux boissons ou un repas et deux sandwichs?
@+
Pour ton exemple de 2 sandwichs et 4 boissons :
Selon la logique de l'algorithme, il a 2 repas, composé d'un repas de 4 boissons, et d'un sandwich avec...une boisson déjà utilisé pour le repas...
Mon algorithme est faux, il faut que je trouve un moyen de faire sauter le ou les boissons dans la boucle tant que lorsqu'elle(s) est ou sont déjà utilisée(s) dans un repas ....
Rahhhhh c'est dûr ...
Selon la logique de l'algorithme, il a 2 repas, composé d'un repas de 4 boissons, et d'un sandwich avec...une boisson déjà utilisé pour le repas...
Mon algorithme est faux, il faut que je trouve un moyen de faire sauter le ou les boissons dans la boucle tant que lorsqu'elle(s) est ou sont déjà utilisée(s) dans un repas ....
Rahhhhh c'est dûr ...
En fait c'est pas le plus rentable que je veux, c'est le plus profitable pour le client (4 boissons font 5.20€, 1 sandwich et une boisson fait 3.50+1.3 = 4.80€).
Avec ton exemple, si le gars prends deux sandwichs et 4 boissons, il faut que ce soit comptabilisé comme 2 repas (Sandwich + boisson)+ les deux boissons restantes comptabilisées.
Dans mon algorithme qui est faux, cela compte comme 2 repas mais sous forme 1 repas 4 boissons et 1 repas Sandwich + boisson, alors que les 4 boissons sont déjà comptabilisées en tant que repas. Il y a donc une boisson qui est comptée comme double.
Ma nouvelle problématique serait : comment faire pour que quand une boisson est utilisée dans une formule elle ne puisse pas etre réutilisée pour une autre ?
plusieurs exemples :
- 2 sandwichs et 4 boissons = 2 repas + 2 boissons
- 1 sandwich et 4 boissons = 1 repas (4 boissons) + 1 sandwich
- 1 sandwich et 5 boissons = 2 repas (4 boissons + Sandwich&boisson)
- 2 sandwichs et 6 boissons = 2 repas (4 boissons + Sandwich&boisson) +1 sandwich + 1 boisson
Vous avez compris la logique ? Je suis désolé, je vous l'ai dis c'est vraiment pas facile ...
Avec ton exemple, si le gars prends deux sandwichs et 4 boissons, il faut que ce soit comptabilisé comme 2 repas (Sandwich + boisson)+ les deux boissons restantes comptabilisées.
Dans mon algorithme qui est faux, cela compte comme 2 repas mais sous forme 1 repas 4 boissons et 1 repas Sandwich + boisson, alors que les 4 boissons sont déjà comptabilisées en tant que repas. Il y a donc une boisson qui est comptée comme double.
Ma nouvelle problématique serait : comment faire pour que quand une boisson est utilisée dans une formule elle ne puisse pas etre réutilisée pour une autre ?
plusieurs exemples :
- 2 sandwichs et 4 boissons = 2 repas + 2 boissons
- 1 sandwich et 4 boissons = 1 repas (4 boissons) + 1 sandwich
- 1 sandwich et 5 boissons = 2 repas (4 boissons + Sandwich&boisson)
- 2 sandwichs et 6 boissons = 2 repas (4 boissons + Sandwich&boisson) +1 sandwich + 1 boisson
Vous avez compris la logique ? Je suis désolé, je vous l'ai dis c'est vraiment pas facile ...
J'ai trouvé un moyen plutôt long mais qui est sûr pour pouvoir gérer ça... Le code est en VB mais c'est plutôt simple à comprendre (il s'agit juste de la partie contrôle pour les boissons :
If nbboisson = 8 Then
déduction_repas = déduction_repas - prix_formuleb - prix_formuleb2 _
- prix_formuleb3 - prix_formuleb4 _
- prix_formuleb5 - prix_formuleb6 _
- prix_formuleb7 - prix_formuleb8
Supp_repas = Supp_repas + diff_prix_formuleb + diff_prix_formuleb2 + diff_prix_formuleb3 _
+ diff_prix_formuleb4 + diff_prix_formuleb5 + diff_prix_formuleb6 _
+ diff_prix_formuleb7 + diff_prix_formuleb8
Repas = Repas + 2
ElseIf nbboisson > 4 And Repas < 2 Then
If nbsandwich >= 1 Then
déduction_repas = déduction_repas - prix_formule - prix_formuleb _
- prix_formuleb2 - prix_formuleb3 _
- prix_formuleb4 - prix_formuleb5
Supp_repas = Supp_repas + diff_prix_formule + diff_prix_formuleb + diff_prix_formuleb2 _
+ diff_prix_formuleb3 + diff_prix_formuleb4 + diff_prix_formuleb5
Repas = Repas + 2
Else
déduction_repas = déduction_repas - prix_formuleb - prix_formuleb2 _
- prix_formuleb3 - prix_formuleb4
Supp_repas = Supp_repas + diff_prix_formuleb + diff_prix_formuleb2 _
+ diff_prix_formuleb3 + diff_prix_formuleb4
Repas = Repas + 1
End If
ElseIf nbboisson = 4 And Repas < 2 Then
If nbsandwich >= 2 Then
déduction_repas = déduction_repas - prix_formule - prix_formule2 _
- prix_formuleb - prix_formuleb2
Supp_repas = Supp_repas + diff_prix_formule + diff_prix_formule2 _
+ diff_prix_formuleb + diff_prix_formuleb2
Repas = Repas + 2
Else
déduction_repas = déduction_repas - prix_formuleb - prix_formuleb2 _
- prix_formuleb3 - prix_formuleb4
Supp_repas = Supp_repas + diff_prix_formuleb + diff_prix_formuleb2 _
+ diff_prix_formuleb3 + diff_prix_formuleb4
Repas = Repas + 1
End If
ElseIf nbboisson >= 2 And Repas < 2 Then
If nbsandwich >= 2 Then
déduction_repas = déduction_repas - prix_formule - prix_formule2 _
- prix_formuleb - prix_formuleb2
Supp_repas = Supp_repas + diff_prix_formule + diff_prix_formule2 _
+ diff_prix_formuleb + diff_prix_formuleb2
Repas = Repas + 2
ElseIf nbsandwich = 1 Then
déduction_repas = déduction_repas - prix_formule - prix_formuleb
Supp_repas = Supp_repas + diff_prix_formule + diff_prix_formuleb
Repas = Repas + 1
End If
End If
Le problème est résolu !
Il ne faut pas qu'il y ai 3 repas, car 2 repas sont nécessaires seulement pour valider une formule journée.
formule et formule2 sont le prix des sandwich les plus chers
formuleb a b8 sont les prix des boissons.
En fait l'algorithme récupère le prix de toutes les consommations et garde pour la formule seulement les plus chers, qui seront utilisées dans le cadre de cette formule. Ensuite, il regarde s'ils sont dans le prix, sinon ils extraient le supplément par rapport au plafond (3,50 pour le sandwich, 1,30 pour la boisson) et le rajoute dans le prix final. Enfin, il privilégie le type de repas en fonction du plus intéressant, soit 4 boissons en premier choix, ou sandwich+boisson en deuxième.
Le soucis venait de là, car en fonction du nombre de boissons et de l'ordre dont il les prenait, l'algorithme agissait différemment.
Exemple : (B pour boisson commandée, S pour sandwich commandé)
B B B B B B B B = 2 repas, jusque là simple.
B B S B B B = là il faut privilégier le repas 4 boissons + le repas Sandwich/boisson = 2 repas
B B B S B = Plus dur, là seul les 4 boissons sont compabilisées, il manque une boisson pour faire un deuxième repas en complément du sandwich.
S S B B B B = Ici, si on comptabilise les 4 boissons on a qu'un repas. Par contre, si on comptabilise 2 sandwichs+2 boissons, on en a deux...
C'est ce que le programme au dessus vérifie :-)
Oui je travaille sous excel :)
Merci de m'avoir aidé dans mon raisonnement, et de t'être pris la peine de lire mes pavés ! Je suis à ta disposition si t'as d'autres questions.
Mike.
P.S.: j'ai rajouté dans le code la partie elseif nbboisson > 0 et nbsandwich > 0 pour comptabiliser un repas, et j'ai toutes mes possibilités :)
Il ne faut pas qu'il y ai 3 repas, car 2 repas sont nécessaires seulement pour valider une formule journée.
formule et formule2 sont le prix des sandwich les plus chers
formuleb a b8 sont les prix des boissons.
En fait l'algorithme récupère le prix de toutes les consommations et garde pour la formule seulement les plus chers, qui seront utilisées dans le cadre de cette formule. Ensuite, il regarde s'ils sont dans le prix, sinon ils extraient le supplément par rapport au plafond (3,50 pour le sandwich, 1,30 pour la boisson) et le rajoute dans le prix final. Enfin, il privilégie le type de repas en fonction du plus intéressant, soit 4 boissons en premier choix, ou sandwich+boisson en deuxième.
Le soucis venait de là, car en fonction du nombre de boissons et de l'ordre dont il les prenait, l'algorithme agissait différemment.
Exemple : (B pour boisson commandée, S pour sandwich commandé)
B B B B B B B B = 2 repas, jusque là simple.
B B S B B B = là il faut privilégier le repas 4 boissons + le repas Sandwich/boisson = 2 repas
B B B S B = Plus dur, là seul les 4 boissons sont compabilisées, il manque une boisson pour faire un deuxième repas en complément du sandwich.
S S B B B B = Ici, si on comptabilise les 4 boissons on a qu'un repas. Par contre, si on comptabilise 2 sandwichs+2 boissons, on en a deux...
C'est ce que le programme au dessus vérifie :-)
Oui je travaille sous excel :)
Merci de m'avoir aidé dans mon raisonnement, et de t'être pris la peine de lire mes pavés ! Je suis à ta disposition si t'as d'autres questions.
Mike.
P.S.: j'ai rajouté dans le code la partie elseif nbboisson > 0 et nbsandwich > 0 pour comptabiliser un repas, et j'ai toutes mes possibilités :)
J'ai trouvé une idée d'algorithme, je le publie d'ici 5mn le temps de le vérifier...