Uma determinada fabrica de rádios possui duas linhas de montagens distintas: Standard e Luxo. A linha de montagem Standart comporta o maximo de 24 operarios, cada radio standard da um lucro de x reais e gasta um homem dia para sua confecção a linha de montagem luxo, comporta no maximo 32 operarios; cada radio luxo da um lucro de y reais e gasta 2 homens dias para sua confecção. A fabrica possui 40 operarios o mercado é capaz de absorver toda a produção e o fabricante deseja saber qual esquema de produção a adotar de modo a maximizar seu lucro diário. Fazer um programa que leia os valores de x e y e escreva, para esse esquema de lucro maximo o numero de operários na linha standard e na linha luxo, o numero de rádios standard e luxo produzidos e o lucro.:
import java.util.ArrayList;
import java.util.List;
// TODO Testes
// TODO Javadocs
// TODO Entrada de dados
// TODO Fazer Iteração para achar o lucro máximo
public class ProblemaDoLucroMaximo {
public static void main(String[] args) {
Fabrica fabrica = new Fabrica(40);
int standard = fabrica.addLinha(24, 1);
int luxo = fabrica.addLinha(32, 2);
fabrica.setLucro(standard, 10);
fabrica.setLucro(luxo, 10);
fabrica.setOperarios(standard, 20);
fabrica.setOperarios(luxo, 20);
double lucroPorDia = fabrica.getLucroPorDia();
System.out.println("lucroPorDia = " + lucroPorDia);
}
}
class Fabrica {
private int maxOperarios;
private List<Linha> linhas = new ArrayList<Linha>();
public Fabrica(int maxOperarios) {
// TODO consistir maxOperarios
this.maxOperarios = maxOperarios;
}
public int getMaxOperarios() {
return maxOperarios;
}
public int addLinha(int maxOperarios, double tempo) {
// TODO consistir maxOperarios
// TODO consistir tempo
Linha linha = new Linha(maxOperarios, tempo);
linhas.add(linha);
return linhas.indexOf(linha);
}
public void removeLinha(int linhaIndex) {
// TODO consistir linhaIndex?
linhas.remove(linhaIndex);
}
public int getOperarios() {
int operarios = 0;
for (Linha linha : linhas) {
operarios += linha.getOperarios();
}
return operarios;
}
public double getQuantidadePorDia() {
double quantidadePorDia = 0.0;
for (Linha linha : linhas) {
quantidadePorDia += linha.getQuantidadePorDia();
}
return quantidadePorDia;
}
public double getLucroPorDia() {
double lucroPorDia = 0.0;
for (Linha linha : linhas) {
lucroPorDia += linha.getLucroPorDia();
}
return lucroPorDia;
}
public int getMaxOperarios(int linhaIndex) {
// TODO consistir linhaIndex?
return linhas.get(linhaIndex).getMaxOperarios();
}
public double getTempo(int linhaIndex) {
// TODO consistir linhaIndex?
return linhas.get(linhaIndex).getTempo();
}
public void setLucro(int linhaIndex, double lucro) {
// TODO consistir linhaIndex?
// TODO consistir lucro
linhas.get(linhaIndex).setLucro(lucro);
}
public double getLucro(int linhaIndex) {
// TODO consistir linhaIndex?
return linhas.get(linhaIndex).getLucro();
}
public void setOperarios(int linhaIndex, int operarios) {
// TODO consistir linhaIndex?
// TODO consistir operarios
if (getOperarios() + operarios > getMaxOperarios()) {
throw new IllegalArgumentException("Esta fábrica suporta, no máximo, " + getMaxOperarios() + " operários.");
}
linhas.get(linhaIndex).setOperarios(operarios);
}
public double getOperarios(int linhaIndex) {
// TODO consistir linhaIndex?
return linhas.get(linhaIndex).getOperarios();
}
public double getQuantidadePorDia(int linhaIndex) {
// TODO consistir linhaIndex?
return linhas.get(linhaIndex).getQuantidadePorDia();
}
public double getLucroPorDia(int linhaIndex) {
// TODO consistir linhaIndex?
return linhas.get(linhaIndex).getLucroPorDia();
}
}
class Linha {
int maxOperarios;
double tempo;
double lucro;
int operarios;
public Linha(int maxOperarios, double tempo) {
// TODO consistir maxOperarios
// TODO consistir tempo
this.maxOperarios = maxOperarios;
this.tempo = tempo;
}
public int getMaxOperarios() {
return maxOperarios;
}
public double getTempo() {
return tempo;
}
public void setLucro(double lucro) {
// TODO consistir lucro
this.lucro = lucro;
}
public double getLucro() {
return lucro;
}
public void setOperarios(int operarios) {
// consistir operarios
if (operarios > getMaxOperarios()) {
throw new IllegalArgumentException("Esta linha suporta, no máximo, " + getMaxOperarios() + " operários.");
}
this.operarios = operarios;
}
public int getOperarios() {
return operarios;
}
public double getQuantidadePorDia() {
return operarios / tempo;
}
double getLucroPorDia() {
return getQuantidadePorDia() * lucro;
}
}
Na boa pessoal, eu fiz isso aí para praticar um pouco porque aqui no trampo tenho feito muita documentação (:(). Assim desenferrujo um pouco na OO. rsrsrs Acho que dá para melhorar um pouco mais…
Que tal fazermos disso um debate sobre OOD? Quais melhorias ou qual outro design o pessoal teria usado?
alucardeck… Perceba que eu NÃO fiz a lição dele!!! Você viu o comentário no final da mensagem???
Aliás, acabei de achar um erro no que eu fiz!!! :twisted:
Se vocês lerem o código, verão que eu NÃO fiz o exercício do cara… Eu TAMBÉM sou CONTRA a fazer os exercícios aqui!!!
Apenas “traduzi” as fórmulas em Java e tentei ser o mais OO possível… Tentando evitar o “modelo anêmico”. Isso foi um exercício PARA MIM!!!
De quebra, se o cara tiver “saco” de ler o que eu fiz (porque, para terminar o exercício ele VAI TER que fazer isso) ele pode aprender ainda mais!!! Vocês não concordam?