Bénéfice maxi
Résolu
Utilisateur anonyme
-
walidovich_85 Messages postés 608 Date d'inscription Statut Membre Dernière intervention -
walidovich_85 Messages postés 608 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je réalise un programme qui me calcul le bénéfice maximal et qui me retourne le nombre de lot de papier Peint et nombre de peintu de Peinture. Le programme me donne 20 lots de chaque et 1700 € de bénéfice. Sauf quand je fé le calcul à la mains, le nombre d'heures de travail est dépassé. Pouvez vous m'aidez à voir ce qui va pas
import static java.lang.Math.*;
import java.util.Scanner;
public class bénéficeMaxi{
public static void main(String[] args) {
int nbPapierPeint = 0;
int nbPeinture = 0;
int beneficeMaximal = 0;
int nbHeureTravail = 0;
int argentInvestie = 0;
while (nbHeureTravail < 390 && argentInvestie < 12000)
{
nbPapierPeint = nbPapierPeint + 1;
nbPeinture = nbPeinture + 1;
nbHeureTravail = nbPapierPeint * 12 + nbPeinture * 8;
argentInvestie = nbPapierPeint * 250 + nbPeinture * 310;
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);
}
}
Je réalise un programme qui me calcul le bénéfice maximal et qui me retourne le nombre de lot de papier Peint et nombre de peintu de Peinture. Le programme me donne 20 lots de chaque et 1700 € de bénéfice. Sauf quand je fé le calcul à la mains, le nombre d'heures de travail est dépassé. Pouvez vous m'aidez à voir ce qui va pas
import static java.lang.Math.*;
import java.util.Scanner;
public class bénéficeMaxi{
public static void main(String[] args) {
int nbPapierPeint = 0;
int nbPeinture = 0;
int beneficeMaximal = 0;
int nbHeureTravail = 0;
int argentInvestie = 0;
while (nbHeureTravail < 390 && argentInvestie < 12000)
{
nbPapierPeint = nbPapierPeint + 1;
nbPeinture = nbPeinture + 1;
nbHeureTravail = nbPapierPeint * 12 + nbPeinture * 8;
argentInvestie = nbPapierPeint * 250 + nbPeinture * 310;
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);
}
}
A voir également:
- Bénéfice maxi
- Maxi compte - Télécharger - Comptabilité & Facturation
- Distance maxi entre box et décodeur tv - Forum Format et connectique vidéo
- Maxi casting ✓ - Forum Consommation & Internet
- Cablage a grande distance - Forum câblage
- Vitesse maxi 125 varadero debridage - Forum Loisirs / Divertissements
13 réponses
bonjour,
je pense si bien compris ta demande, c'est que tu attend un nombre d'heure de travail < 390.
si tu fait le calcul, avec nbPapierPeint et nbPeinture =20, tu trouvera nbHeureTravail =400 > 390 et argentInvestie = 11200 < 12000; alors, la condition pour sortir de la boucle while était avec celle de nbHeureTravail.
si non, je pense que je n'ai pas bien compris ta question.
je pense si bien compris ta demande, c'est que tu attend un nombre d'heure de travail < 390.
si tu fait le calcul, avec nbPapierPeint et nbPeinture =20, tu trouvera nbHeureTravail =400 > 390 et argentInvestie = 11200 < 12000; alors, la condition pour sortir de la boucle while était avec celle de nbHeureTravail.
si non, je pense que je n'ai pas bien compris ta question.
c'est sa, il faut que les deux soit inférieur, le nombre d'heure de travail doit être inférieur ou égale à 390 et l'argent investi inférieur ou égal à 12 000
bonjour,
alors tt simplement, il faut prendre la valeur final moins un, c a dire, avant la fin du programme:
//Recalcul des données avec l'avant derniere valeur des varibales
nbPapierPeint =nbPapierPeint -1;
nbPeinture = nbPeinture -1;
//Calcul des données:
nbHeureTravail = nbPapierPeint * 12 + nbPeinture * 8;
argentInvestie = nbPapierPeint * 250 + nbPeinture * 310;
//Affichage
systeme.out.pri...(...)
bonne chance
alors tt simplement, il faut prendre la valeur final moins un, c a dire, avant la fin du programme:
//Recalcul des données avec l'avant derniere valeur des varibales
nbPapierPeint =nbPapierPeint -1;
nbPeinture = nbPeinture -1;
//Calcul des données:
nbHeureTravail = nbPapierPeint * 12 + nbPeinture * 8;
argentInvestie = nbPapierPeint * 250 + nbPeinture * 310;
//Affichage
systeme.out.pri...(...)
bonne chance
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
non!!!!
je voulais dire, apré le while, il faut décrémenter les valeurs finales de tes 2 variables nbPapierPeint et nbPeinture et puis recalculer les autres données pour avoir enfin tes conditions nbHeureTravail < 390 et argentInvestie < 12000 bien remplies.
rend moi compte si je ne suis pas clair.
je voulais dire, apré le while, il faut décrémenter les valeurs finales de tes 2 variables nbPapierPeint et nbPeinture et puis recalculer les autres données pour avoir enfin tes conditions nbHeureTravail < 390 et argentInvestie < 12000 bien remplies.
rend moi compte si je ne suis pas clair.
J'ai fais sa mais sa marche pas:
while (nbHeureTravail < 390 && argentInvestie < 12000)
{
nbPapierPeint = nbPapierPeint - 1;
nbPeinture = nbPeinture - 1;
nbHeureTravail = nbPapierPeint * 12 + nbPeinture * 8;
argentInvestie = nbPapierPeint * 250 + nbPeinture * 310;
beneficeMaximal = (nbPapierPeint * 45) + (nbPeinture * 40);
}
while (nbHeureTravail < 390 && argentInvestie < 12000)
{
nbPapierPeint = nbPapierPeint - 1;
nbPeinture = nbPeinture - 1;
nbHeureTravail = nbPapierPeint * 12 + nbPeinture * 8;
argentInvestie = nbPapierPeint * 250 + nbPeinture * 310;
beneficeMaximal = (nbPapierPeint * 45) + (nbPeinture * 40);
}
bonsoir,
voila la partie du code qui t'intéresse:
while (nbHeureTravail < 390 && argentInvestie < 12000)
{
nbPapierPeint = nbPapierPeint + 1;
nbPeinture = nbPeinture + 1;
nbHeureTravail = nbPapierPeint * 12 + nbPeinture * 8;
argentInvestie = nbPapierPeint * 250 + nbPeinture * 310;
beneficeMaximal = (nbPapierPeint * 45) + (nbPeinture * 40);
}
//Décrémenter les valeurs finales (c a dire, au lieu de 20, on va utiliser 19)
nbPapierPeint = nbPapierPeint - 1;
nbPeinture = nbPeinture - 1;
//Recalcul des données à afficher
nbHeureTravail = nbPapierPeint * 12 + nbPeinture * 8;
argentInvestie = nbPapierPeint * 250 + nbPeinture * 310;
beneficeMaximal = (nbPapierPeint * 45) + (nbPeinture * 40);
//Affichage des données
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);
}
ça répond à ta demande?
voila la partie du code qui t'intéresse:
while (nbHeureTravail < 390 && argentInvestie < 12000)
{
nbPapierPeint = nbPapierPeint + 1;
nbPeinture = nbPeinture + 1;
nbHeureTravail = nbPapierPeint * 12 + nbPeinture * 8;
argentInvestie = nbPapierPeint * 250 + nbPeinture * 310;
beneficeMaximal = (nbPapierPeint * 45) + (nbPeinture * 40);
}
//Décrémenter les valeurs finales (c a dire, au lieu de 20, on va utiliser 19)
nbPapierPeint = nbPapierPeint - 1;
nbPeinture = nbPeinture - 1;
//Recalcul des données à afficher
nbHeureTravail = nbPapierPeint * 12 + nbPeinture * 8;
argentInvestie = nbPapierPeint * 250 + nbPeinture * 310;
beneficeMaximal = (nbPapierPeint * 45) + (nbPeinture * 40);
//Affichage des données
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);
}
ça répond à ta demande?
ahh ok,
pr moi, je ne comprenais pas exactement les données, mais puisque tu veux une qu'il soit 19 et l'autre 20, alors il faut séparer les conditions dans while.
autrement, il faut deux boucles while, chaqu'une pour une variable.
est ce c'est ça?
pr moi, je ne comprenais pas exactement les données, mais puisque tu veux une qu'il soit 19 et l'autre 20, alors il faut séparer les conditions dans while.
autrement, il faut deux boucles while, chaqu'une pour une variable.
est ce c'est ça?
Je pense
l'énoncé c'est que je doit trouver le nombre de rouleau de papier peint et le nombre de post de peinture sachant que cela ne doit pas dépaser le nombre d'heure de travail (390) et le capital (12 000)
l'énoncé c'est que je doit trouver le nombre de rouleau de papier peint et le nombre de post de peinture sachant que cela ne doit pas dépaser le nombre d'heure de travail (390) et le capital (12 000)
ahhh d'accord, alors il faut définir deux boucles while indépendantes, puisque tes variables le sont aussi.
Bonsoir,
pardonné moi, mais je viens juste de comprendre ce que tu veux faire.
enfaite, c de la programmation linéaire avec deux variables.
donne moi un peu de temps pour y réfléchir, et je vais vous répondre (logique + code java)
pardonné moi, mais je viens juste de comprendre ce que tu veux faire.
enfaite, c de la programmation linéaire avec deux variables.
donne moi un peu de temps pour y réfléchir, et je vais vous répondre (logique + code java)
bonsoir/bonjour
quel surprise, le bénéfice maximal ne correspond pas au couple (19,20), mais plutôt (15,26).
ça m'a surpris, et j'ai cru pour un moment que le programme est erroné... mais j'ai vérifié manuellement (15,26) donne un bénéfice supérieur à celui du (19,20).
voila le code java (j'ai y met des commentaires pour expliqué la méthode utilisée pour trouver le bénéfice maximal et ses variables correspondantes)
public class Test {
public static void main(String[] args) {
int nbPapierPeint = 0, nbPeinture = 0;
int nbHeureTravail = nbPapierPeint * 12 + nbPeinture * 8;
int argentInvestie = nbPapierPeint * 250 + nbPeinture * 310;
int beneficeMaximal = (nbPapierPeint * 45) + (nbPeinture * 40);
// Variables de sauvegarde
int valeurNbPapierPeint=0;
int valeurNbPeinture=0;
int [] TabBeneficeMaximal= new int[33];
for (nbPapierPeint=0;nbPapierPeint<33;nbPapierPeint++)
{
/*********************************************************
* On fixe une variable (dans ce cas c'est nbPapierPeint)*
* et on cherche le bénéfice maximum en variant l'autre *
* varible (nbPeinture) *
*********************************************************/
for(nbPeinture=0;nbPeinture<39;nbPeinture++)
{
/*********************************************************
* A cette étape nous disposons de deux valeurs de nos *
* variables nbPapierPeint et nbPeinture, alors il suffit*
* de calculer les autres données et de vérifier s'ils *
* remplissent les conditions de mérite *
*********************************************************/
nbHeureTravail = nbPapierPeint * 12 + nbPeinture * 8;
argentInvestie = nbPapierPeint * 250 + nbPeinture * 310;
TabBeneficeMaximal[nbPapierPeint]= nbPapierPeint * 45 + nbPeinture * 40;
if (nbHeureTravail<390 && argentInvestie<12000
&& beneficeMaximal<TabBeneficeMaximal[nbPapierPeint])
{
/*********************************************************
* Si les nouvelles valeurs remplissent les conditions de*
* mérite, on les enregistre pour pouvoir les afficher *
*********************************************************/
beneficeMaximal= TabBeneficeMaximal[nbPapierPeint];
valeurNbPeinture=nbPeinture;
valeurNbPapierPeint=nbPapierPeint;
}
}
}
// Affichage du bénéfice maximal et et ses variables correspondantes
//******************************************************************
System.out.println("Bénéfice maximal vaut "+beneficeMaximal
+" correspendant au couple (nbPapierPeint= "+valeurDeI
+", nbPeinture= "+valeurDeJ+")");
}
}
et voila le résultat affiché:
Bénéfice maximal vaut 1715 correspendant au couple (nbPapierPeint= 15, nbPeinture= 26)
Bonne chance
quel surprise, le bénéfice maximal ne correspond pas au couple (19,20), mais plutôt (15,26).
ça m'a surpris, et j'ai cru pour un moment que le programme est erroné... mais j'ai vérifié manuellement (15,26) donne un bénéfice supérieur à celui du (19,20).
voila le code java (j'ai y met des commentaires pour expliqué la méthode utilisée pour trouver le bénéfice maximal et ses variables correspondantes)
public class Test {
public static void main(String[] args) {
int nbPapierPeint = 0, nbPeinture = 0;
int nbHeureTravail = nbPapierPeint * 12 + nbPeinture * 8;
int argentInvestie = nbPapierPeint * 250 + nbPeinture * 310;
int beneficeMaximal = (nbPapierPeint * 45) + (nbPeinture * 40);
// Variables de sauvegarde
int valeurNbPapierPeint=0;
int valeurNbPeinture=0;
int [] TabBeneficeMaximal= new int[33];
for (nbPapierPeint=0;nbPapierPeint<33;nbPapierPeint++)
{
/*********************************************************
* On fixe une variable (dans ce cas c'est nbPapierPeint)*
* et on cherche le bénéfice maximum en variant l'autre *
* varible (nbPeinture) *
*********************************************************/
for(nbPeinture=0;nbPeinture<39;nbPeinture++)
{
/*********************************************************
* A cette étape nous disposons de deux valeurs de nos *
* variables nbPapierPeint et nbPeinture, alors il suffit*
* de calculer les autres données et de vérifier s'ils *
* remplissent les conditions de mérite *
*********************************************************/
nbHeureTravail = nbPapierPeint * 12 + nbPeinture * 8;
argentInvestie = nbPapierPeint * 250 + nbPeinture * 310;
TabBeneficeMaximal[nbPapierPeint]= nbPapierPeint * 45 + nbPeinture * 40;
if (nbHeureTravail<390 && argentInvestie<12000
&& beneficeMaximal<TabBeneficeMaximal[nbPapierPeint])
{
/*********************************************************
* Si les nouvelles valeurs remplissent les conditions de*
* mérite, on les enregistre pour pouvoir les afficher *
*********************************************************/
beneficeMaximal= TabBeneficeMaximal[nbPapierPeint];
valeurNbPeinture=nbPeinture;
valeurNbPapierPeint=nbPapierPeint;
}
}
}
// Affichage du bénéfice maximal et et ses variables correspondantes
//******************************************************************
System.out.println("Bénéfice maximal vaut "+beneficeMaximal
+" correspendant au couple (nbPapierPeint= "+valeurDeI
+", nbPeinture= "+valeurDeJ+")");
}
}
et voila le résultat affiché:
Bénéfice maximal vaut 1715 correspendant au couple (nbPapierPeint= 15, nbPeinture= 26)
Bonne chance
bonjour,
tt simplement, j'ai pensé un peu bêtement, car la machine l'est aussi.
la solution sera un couple (nbPapierPeint, nbPeinture).
étant donné un bénéfice A, je vais calculer le maximim de nbPapierPeint. Logiquement celui ci sera maximal si nbPeinture vaut 0, alors j'applique les contraintes nbHeureTrvail et argentInvestie sur la variable nbPapierPeint:
1- nbPapierPeint * 12 + 0 * 8 = nbHeureTravail < 390 =>
nbPpaierPeint < 390/12 = 32,5 (33 avec arrondissement)
2- nbPapierPeint * 250 + 0 * 310 = argentInvestie < 12000 =>
nbPapierPeint < 12000/250 = 48
de (1) et (2) on déduit que nbPapierPeint est inférieur à 33.
alors on a 33 cas (valeurs) pr nbPapierPeint, c a dire 33 cas de Bénéfice maximal (en trouvant bien sur la valeur de nbPeinture qui rend le bénéfice maximal).
et en calculant ces 33 cas potentiel de bénéfice, on va garder à chaque étape le bénéfice maximal en le comparant avec le résultat du bénéfice de l'opération précédente ( comme une sorte de trouver le maximum d'un tableau en langage C), et en mémorisant la valeur de nbPapierPeint et nb Peinture qui ont généré ce bénéfice maximal.
ça m'a prix un peu de temps, car en programmation linéaire en math, la solution ou plutot la méthode est très différente (l'homme ne peut pas calculer 33 bénéfice et les comparer, car c'est long et bête, alors il utilise des équation et des graphes, mais la machine peut le faire, car elle est bête et rapide).
c'était un plaisir M. ou Mme natier
tt simplement, j'ai pensé un peu bêtement, car la machine l'est aussi.
la solution sera un couple (nbPapierPeint, nbPeinture).
étant donné un bénéfice A, je vais calculer le maximim de nbPapierPeint. Logiquement celui ci sera maximal si nbPeinture vaut 0, alors j'applique les contraintes nbHeureTrvail et argentInvestie sur la variable nbPapierPeint:
1- nbPapierPeint * 12 + 0 * 8 = nbHeureTravail < 390 =>
nbPpaierPeint < 390/12 = 32,5 (33 avec arrondissement)
2- nbPapierPeint * 250 + 0 * 310 = argentInvestie < 12000 =>
nbPapierPeint < 12000/250 = 48
de (1) et (2) on déduit que nbPapierPeint est inférieur à 33.
alors on a 33 cas (valeurs) pr nbPapierPeint, c a dire 33 cas de Bénéfice maximal (en trouvant bien sur la valeur de nbPeinture qui rend le bénéfice maximal).
et en calculant ces 33 cas potentiel de bénéfice, on va garder à chaque étape le bénéfice maximal en le comparant avec le résultat du bénéfice de l'opération précédente ( comme une sorte de trouver le maximum d'un tableau en langage C), et en mémorisant la valeur de nbPapierPeint et nb Peinture qui ont généré ce bénéfice maximal.
ça m'a prix un peu de temps, car en programmation linéaire en math, la solution ou plutot la méthode est très différente (l'homme ne peut pas calculer 33 bénéfice et les comparer, car c'est long et bête, alors il utilise des équation et des graphes, mais la machine peut le faire, car elle est bête et rapide).
c'était un plaisir M. ou Mme natier