Inscription / Connexion Nouveau Sujet
Niveau algorithmique
Partager :

production journalière et bénéfice maxi

Posté par
tot
23-04-13 à 16:32

Bonjour,

Je doit réaliser un programme qui calcul et retourne  la production journalière de rouleau de papier peint et de pot de peinture ainsi que le bénéfice maxi.
Voici les donnée:

390 heures de travail possible
12 000 € d'investissement possible
1 lot de papier = 120 rouleau, coute 250 € par lot, 12 heure de travail par lot
1 lot de peinture = 90 pots, coute 310 € par lot, 8 heure de travail par lot

voici ce que j'ai fait en java mais sa va pas. Pouvez-vous m'aidez à trouver mes erreur

int nbPapierPeint = 0;
int nbPeinture = 0;
int beneficeMaximal = 0;

int nbHeureTravail = 0;
int argentInvestie = 0;

nbHeureTravail = (nbPapierPeint / 12) + (nbPeinture / 8);
argentInvestie = (nbPapierPeint / 250) + (nbPeinture / 310);

while (nbHeureTravail <=390 && argentInvestie <= 12000)
{

nbPapierPeint = nbPapierPeint + 1;
nbPeinture = nbPeinture + 1;
}

beneficeMaximal = (nbPapierPeint * 45) + (nbPeinture * 40);

        
System.out.println("Le nombre de lots de rouleaux de papier peint est de " + nbPapierPeint);
        System.out.println("Le nombre de lots de pots de peinture est de " + nbPeinture);
        System.out.println("Le bénéfice maximal est de " + beneficeMaximal);

Posté par
Iamat
re : production journalière et bénéfice maxi 23-04-13 à 16:46

il faut mettre

nbHeureTravail = (nbPapierPeint / 12) + (nbPeinture / 8);
argentInvestie = (nbPapierPeint / 250) + (nbPeinture / 310);

dans la boucle

Posté par
tot
re : production journalière et bénéfice maxi 23-04-13 à 16:57

Je l'ai fait et sa me donne 1880 en lot pour chacun. C pas possible je pense

Posté par
Iamat
re : production journalière et bénéfice maxi 23-04-13 à 19:13

tes équay=tions sont fausses


nbHeureTravail = (nbPapierPeint * 12) + (nbPeinture * 8);
argentInvestie = (nbPapierPeint * 250) + (nbPeinture * 310);

mais je ne sais si tonprogramme va fonctionner car selon moinbpapier=nbpeinture n'est pa forcément à respecter

Posté par
tot
re : production journalière et bénéfice max 23-04-13 à 21:45

je comprend pas ce que tu ve dire pour nbpapier = nbpeinture

Posté par
Iamat
re : production journalière et bénéfice maxi 23-04-13 à 22:24

à chaque boucle tu augmentes de 1 la quantité de papier et de peinture

comme les 2 valent au départ 0

après x boucles les 2 valent x

Posté par
tot
re : production journalière et bénéfice max 23-04-13 à 22:29

c sa qui me bloque justement, je c pas trop quoi faire

Posté par
Iamat
re : production journalière et bénéfice maxi 23-04-13 à 22:34

tu ferais comment à la main?

Posté par
tot
re : production journalière et bénéfice max 23-04-13 à 22:42

comme j'avais fait, je rejouterai un a chaque fois

Posté par
Iamat
re : production journalière et bénéfice maxi 23-04-13 à 22:49

ce n'est pas comme ça que tu trouveras la meilleur profit pour 390h ou 12000€ d'investissement

mais je connais plus les méthodes qui permettent de trouver la réponse

un algorithme permet de faire à un ordinateur ce qu'on sait faire soit même.

Posté par
Iamat
re : production journalière et bénéfice maxi 23-04-13 à 22:49

un algorithme permet de faire faire à un ordinateur ce qu'on sait faire soit même.

Posté par
Iamat
re : production journalière et bénéfice maxi 23-04-13 à 23:36

le profit max est 1715€ pour 15 papier et 26 peinture

j'ai fait ça grâce à un simple fichier excel, si ça t'interesse je t'expliquerais demain

Posté par
tot
re : production journalière et bénéfice maxi Posté le 23-04-13 à 23-04-13 à 23:40

volontier

Posté par
Iamat
re : production journalière et bénéfice maxi 24-04-13 à 09:44

Le principe que j'ai imaginé est de calculer le nombre maxi de papier qu'on peut produire (si il n'ya avait que ça à produire)
Puis de faire une boucle qui calcule la peinture réalisable avec le reste d'argent et d'heures
A chaque tour, on calcule le bénéfice réaliser avec les x peinture et les y papier peint
Puis on garde le meilleur des cas.


Je ne connais pas JAVA donc il y aura peut-être des erreurs de syntaxe (pour les formules  j'utilise les formules d'excel à traduire peut-être)

int nbPapierPeint = 0;
int nbPapierOptimal = 0;
int nbPapierPeintMax =0;
int nbPeintureOptimal  = 0;
int nbPeinture = 0;
int benefice = 0;
int beneficeMaximal = 0;
int nbHeureTravail = 0;
int nbHeureTravailRestant = 0;
int argentInvestie = 0;
int argentRestant = 0;
string Verification = « Attention le montant d'argent à investir et/ou le nombre d'heure dépassent la limite »;

nbPapierPeintMax = ent(min(12000/250;390/12));
« je calcule ici la production de papier peint si c'était la production prioritaire et que la peinture n'est fait que pour utiliser les ressources restantes »
while (nbPapierPeint nbPapierPeintMax)
{
argentRestant = 12000-nbPapierPeint*250;
nbHeureTravailRestant = 390-nbPapierPeint*12;
nbPeinture = ent(min(argentRestant/310;nbHeureTravailRestant/8));
« je calcule ici la production possible de peinture en utilisant ce qui est laissé par le papier peint »

benefice = 45*nbPapierPeint+40*nbPeinture;

if benefice > beneficeMaximal
{
« j'enregistre ici les information si le bénéfice est plus grand que ceux trouvés jusqu'à présent »
beneficeMaximal = benefice;
nbPapierOptimal = nbPapierPeint;
nbPeintureOptimal = nbPeinture;
}
nbPapierPeint = nbPapierPeint+1;
}

if 12000 >= nbPeintureOptimal *310+ nbPapierOptimal*250
{
if 390 >=  nbPeintureOptimal *8+ nbPapierOptimal*12
{
Verification  = « Le montant d'argent à investir et le nombre d'heure ne sont pas dépassés » ;
« je vérifie que les contraintes d'argent et heures maxi sont vérifiées »
}
}
        System.out.println (Verification );
System.out.println("Le nombre de lots de rouleaux de papier peint est de " + nbPapierOptimal);
        System.out.println("Le nombre de lots de pots de peinture est de " + nbPeintureOptimal);
        System.out.println("Le bénéfice maximal est de " + beneficeMaximal);

Personnellement je remplacerait tout les nombre du programme par des variables

int argentInvestieMax = 0;
int NbHeuresMax = 0;
int CoutPeinture = 0;
int CoutPapier = 0;
int HeuresPeinture = 0;
int HeuresPapier = 0;
int BenefPeinture = 0;
int BenefPapier = 0;
Et je demanderais au programme de demander les valeurs de ces variables.



Si il y avait  3  ressources, il y aurait une 3e boucle imbriquée

Calcul papierpeint max
Boucle de sur le papier peint
Calcul peinture max (compte tenu de ce qui reste en argent et heures)
Boucle sur la peinture
Calcul quantité3 (compte tenu de ce qui reste en argent et heures)
Bénéfice(papier peint, peinture, quantité3)
Enregitrement
Peinture+1
papier peint+1

Posté par
tot
re : production journalière et bénéfice maxi 25-04-13 à 10:30

j'aurai jamais pu trouvé sa

Posté par
Iamat
re : production journalière et bénéfice maxi 25-04-13 à 11:17

avec le fichier excel c'est plus simple,

si tu veux que je te l'envoie mets une adresse mail dans ton profil.

Une fois de plus je ne connais pas java, je n'ai donc pas testé l'algorithme, dis moi s'il fonctionne ou si tu ne comprends pas certaines formules

Posté par
tot
re : production journalière et bénéfice maxi 25-04-13 à 11:29

je ve bien que tu me l'envoie
j'ai une adresse mail sur mon profil

Posté par
Iamat
re : production journalière et bénéfice maxi 25-04-13 à 12:15

elle doit être masquée rend la visible ou fais en une bidon et poste là ici, je t'enverrai le fichier

Dans tous les cas refais un message quand c'est fait

Posté par
tot
re : production journalière et bénéfice maxi 25-04-13 à 12:19

c bon j'avais pas coché la case

Posté par
tot
re : production journalière et bénéfice maxi 26-04-13 à 15:00

j'ai fait mais sa va pas: je trouve 1 lots de papier et 39 lots de peinture

int nbPapierPeint = 0;
int nbPeinture = 0;
int beneficeMaximal = 0;

int nbHeureTravail = 0;
int argentInvestie = 0;



while (nbHeureTravail <=390 && argentInvestie <= 12000)
{
nbHeureTravail = (nbPapierPeint * 12) + (nbPeinture * 8);
argentInvestie = (nbPapierPeint * 250) + (nbPeinture * 310);

nbPapierPeint = nbPapierPeint + 1;

while (nbHeureTravail <=390 && argentInvestie <= 12000)
{
nbHeureTravail = (nbPapierPeint * 12) + (nbPeinture * 8);
argentInvestie = (nbPapierPeint * 250) + (nbPeinture * 310);
nbPeinture = nbPeinture + 1;
}
}
beneficeMaximal = (nbPapierPeint * 45) + (nbPeinture * 40);

System.out.println("Le nombre de lots de rouleaux de papier peint est de " + nbPapierPeint);
        System.out.println("Le nombre de lots de pots de peinture est de " + nbPeinture);
        System.out.println("Le bénéfice maximal est de " + beneficeMaximal);

Posté par
Iamat
re : production journalière et bénéfice maxi 26-04-13 à 15:27

tu veux dire que mon algorithme ne donne pas la bonne réponse ou que le tient donne 39?

Posté par
tot
re : production journalière et bénéfice maxi 26-04-13 à 15:32

le mien donne 39
j'ai pas tester le tien car je pense que j'aurai jamai pu trouvé sa

Posté par
Iamat
re : production journalière et bénéfice maxi 26-04-13 à 15:34

si tu n'utilises pas le mien ou un truc qui fonctionne de la même façon, tu ne trouveras pas la bonne réponse

Posté par
Eric1
re : production journalière et bénéfice maxi 28-04-13 à 21:08

Bonjour
Dans ton exemple, tu ne calcule pas le bénéfice maximal, mais le bénéfice dans le cas où tu achetes autant de lots de peinture et de papier.

Il faut donc faire varier le nombre de lots de papier peint et de peinture pour attendre un bénéfice maximal en respectant les contraintes de l'énoncé.


int beneficeActuel=0;
int beneficeMaximal = 0;


for(int nbLotPapierPeint=0; nbLotPapierPeint<32;nbLotPapierPeint++)
//ici 390/12=32.5 et 12000/250=48, donc c'est le nombre d'heure qui est limitant, donc on va jusqu'à 32
{
for(int nbLotPeinture=0; nbLotPeinture<38;nbLotPeinture++)
//ici 390/8=48.75 et 12000/310=38.70, donc c'est l'investissement qui est limitant, donc on va jusqu'à 38
  {
  //verification des contraintes
  if((nbLotPapierPeint*12+nbLotPeinture*8 <=390) &&(nbLotPapierPeint*250+nbLotPeinture*310 <= 12000))
   {
   //calcul du bénéfice pour ce cas (pas forcément le maximal)
   beneficeActuel=(nbLotPapierPeint * 45) + (nbLotPeinture * 40);
   //je me fie à ton calcul, je sais pas si ces valeurs sont vraiement des bénéfices par lot pour par rouleau/pot
   if(beneficeActuel>beneficeMaximal)
   //si le bénéfice de cette configuration est plus grand que le record, on met à jour le record
    {
    beneficeMaximal=beneficeActuel;
    }
  }
}
}

Tu as ici le bénéfice maximal en sortie de boucle. Par contre, il faudrait également à chaque changement du maximum, enregistrer le nombre de lots de chaque qui maximise le bénéfice

Posté par
Eric1
re : production journalière et bénéfice maxi 28-04-13 à 21:11

Par contre, c'est inférieur ou égal à 32 et 38

Posté par
tot
re : production journalière et bénéfice maxi 29-04-13 à 23:00

Je suis pas censé de savoir que c égal ou inférieur à 32 et 38
Je doit rien calculer moi, c le programme qui calcul tout

Posté par
Eric1
re : production journalière et bénéfice maxi 29-04-13 à 23:04

Bah tu peux, c'est le min de 390/12 et 12000/250 d'une part et le min de 390/8 et 12000/310 d'autre part.
Comme lamat l'indiquait

Posté par
Eric1
re : production journalière et bénéfice maxi 29-04-13 à 23:06

Et c'est juste pour borner les boucles. C'est utile si tu veux changer les valeurs d'entrée, enfin fait comme tu veux

Posté par
Eric1
re : production journalière et bénéfice maxi 29-04-13 à 23:08

C'est surtout pour améliorer la performance de l'algorithme de savoir ces valeurs
Le fait que ce soit le programme qui calcule ne t'empeche pas de lui faciliter la tache, et de l'empecher de faire des calculs inutiles. Donc apporter un peu d'intelligence à une machine

Posté par
tot
re : production journalière et bénéfice maxi 29-04-13 à 23:10

Mais dans le for je fait comment si je mais pas 32 et 38?
je met une variable nbPapierPeintMax et nbPeintureMax?

Posté par
Eric1
re : production journalière et bénéfice maxi 29-04-13 à 23:12

bah calcule les ouais

Posté par
tot
re : production journalière et bénéfice maxi 29-04-13 à 23:17

JE vois pas trop ce que je doit modifier dans mon dernier programme que j'ai posté. Peut-tu me dire ou je doit rajouter et supprimer des truc stp

Posté par
Iamat
re : production journalière et bénéfice maxi 29-04-13 à 23:24

tot le dernier programme que tu as posté 26-04-13 à 15:00, ne fonctionne pas et ne fonctionnera jamais

pour que ça focntionne, il faut faire ce que Eric1 et mi avons fait:

2 boucles imbriquées

Posté par
Eric1
re : production journalière et bénéfice maxi 29-04-13 à 23:26

le problème, c'ets qu'avec ton algo, tu ne trouves pas le bénéfice maximal, mais le premier bénéfice qui sort de la boucle
Il faut tester toutes les possibilités

Essaie de la dérouler pas à pas, tu verras

Posté par
Eric1
re : production journalière et bénéfice maxi 29-04-13 à 23:35

imagine un tableau à deux dimensions, dans lequel tu as le nombre de lots de peinture en abscisse et le nombre de lots de papier en ordonnées.
Si tu ne prends pas de papier, mais que de la peinture, tu peux prendre maximum 38 lots de peinture.
Si tu ne prends pas de peinture, mais que du papier, tu peux prendre maximum 32 lots.

Et il y a toutes les valeurs intermédiaires: genre 10 lots de peinture 15 lots de papier, en fait toutes les valeurs entre [0 et 38] de peinture, et [0 et 32 ] de papier

Tout en respectant les contraintes, car 38 de peinture + 32 de papier fait bien le maximum des bénéfices, mais ne respecte pas le budget et les heures



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !