Skip to content

Instantly share code, notes, and snippets.

@wagfim
Created March 18, 2019 00:28
Show Gist options
  • Save wagfim/54977bd1db8ea24452d41f4505c7c8c6 to your computer and use it in GitHub Desktop.
Save wagfim/54977bd1db8ea24452d41f4505c7c8c6 to your computer and use it in GitHub Desktop.
Programa que calcula a quantidade de tinta necessária e custo dada uma determinada área a ser pintada
import java.util.Scanner;
/**
* Informacoes uteis no final do codigo.
*/
public class PinturaDoGalpaoFixoV2 {
public static void main (String[] args) {
//dimensoes do galpao
int comprimento;
int largura;
int altura;
//tipos de tinta
int metragemLatex;
int metragemAcrilica;
int metragemEsmalte;
int metragemOleo;
//precos por galao
double precoTintaLatex;
double precoTintaAcrilica;
double precoTintaEsmalte;
double precoTintaOleo;
// Define a metragem das paredes
comprimento = 10;
largura = 15;
altura = 3;
// Define rendimento das tintas em metros quadrados por galao
metragemLatex = 15;
metragemAcrilica = 20;
metragemEsmalte = 30;
metragemOleo = 10;
// Define o preco por galao de cada tipo de tinta
precoTintaLatex = 17.50;
precoTintaAcrilica = 32.90;
precoTintaEsmalte = 29.50;
precoTintaOleo = 12.25;
Scanner leitor = new Scanner(System.in);
System.out.println("************************************************");
System.out.println("* Bem vindo a calculadora de custos de pintura *");
System.out.println("************************************************");
System.out.println("");
System.out.println("As dimensoes atuais do ambiente sao:");
System.out.println("Comprimento: " +comprimento+ " metros.");
System.out.println("Largura: " +largura+ " metros.");
System.out.println("Altura: " +altura+ " metros.");
System.out.println("");
int metrosQuadrados;
metrosQuadrados = calculaMetrosQuadrados(comprimento, largura, altura);
System.out.println("A area de pintura corresponde a " +metrosQuadrados+ " metros quadrados.");
System.out.println("");
System.out.println("************************************************");
System.out.println("");
System.out.println("As seguintes opcoes de tinta estao disponiveis:");
System.out.println("1. Tinta Latex - Rendimento de " +metragemLatex+ " metros quadradros por galao. Preco: R$ " +precoTintaLatex);
System.out.println("2. Tinta Acrilica - Rendimento de " +metragemAcrilica+ " metros quadradros por galao. Preco: R$ " +precoTintaAcrilica);
System.out.println("3. Tinta Esmalte - Rendimento de " +metragemEsmalte+ " metros quadradros por galao. Preco: R$ " +precoTintaEsmalte);
System.out.println("4. Tinta a Oleo - Rendimento de " +metragemOleo+ " metros quadradros por galao. Preco: R$ " +precoTintaOleo);
System.out.println("");
System.out.println("Selecione o numero correspondente a tinta que deseja utilizar: ");
System.out.print("> ");
int tipoTintaEscolhido;
tipoTintaEscolhido = leitor.nextInt(); //capta a entrada do teclado
// as variaveis abaixo serao usadas no SWITCH
int metragemDoTipo;
double precoDoTipo;
/*
* O bloco IF abaixo define o que fazer se o usuario nao digitar um dos numeros validos da lista de opcoes de tinta.
* Qualquer coisa abaixo de 1 ou maior do que 4 e ignorada e e exibida uma mensagem de erro. Nesse caso o programa termina aqui
* Se o numero escolhido for valido (estiver dentro da faixa 1-4) o bloco vai para o else, que usa um switch para analisar o tipoTintaEscolhido.
* De acordo com o tipo ele define uma variavel auxiliar para armazenar a metragem por galao daquele tipo, e outra para armazenar o preco daquele tipo
* Essas variaveis auxiliares serao utilizadas nas funcoes de calcular a quantidade de galoes necessarios e o custo total
* O programa vai ate o final dentro desse ELSE
*/
if (tipoTintaEscolhido > 4 || tipoTintaEscolhido < 1) {
System.out.println("O comando digitado nao foi reconhecido");
}
else {
switch (tipoTintaEscolhido) {
case 1:
metragemDoTipo = metragemLatex;
precoDoTipo = precoTintaLatex;
break;
case 2:
metragemDoTipo = metragemAcrilica;
precoDoTipo = precoTintaAcrilica;
break;
case 3:
metragemDoTipo = metragemEsmalte;
precoDoTipo = precoTintaEsmalte;
break;
case 4:
metragemDoTipo = metragemEsmalte;
precoDoTipo = precoTintaOleo;
break;
default:
metragemDoTipo = 0;
precoDoTipo = 0;
break;
} //fim switch
int quantidadeDeGaloes;
quantidadeDeGaloes = calculaQuantidade(metrosQuadrados, metragemDoTipo);
double custo;
custo = calculaCusto(quantidadeDeGaloes, precoDoTipo);
System.out.println("Serao necessarios " +quantidadeDeGaloes+ " galoes e custo total sera de R$ " +custo);
System.out.println();
System.out.println("************************************************");
} // fim else
} //fim main
// Funcoes
public static int calculaMetrosQuadrados (int comprimento, int largura, int altura) {
int frente;
int lado;
int interno;
int externo;
int metrosQuadrados;
frente = comprimento * altura; //calcula a area da parede da frente
lado = largura * altura; //calcula a area da parede do lado
frente = frente * 2; //porque tem a parede da frente e do fundo
lado = lado * 2; //porque tem dois lados
interno = frente + lado; //soma das areas das paredes internas
externo = frente + lado; //soma das areas das paredes externas
metrosQuadrados = interno + externo; //soma da area total necessaria
return metrosQuadrados;
}
public static int calculaQuantidade (int metrosQuadrados, int metragemDoTipo) {
int quantidadeDeGaloes;
quantidadeDeGaloes = metrosQuadrados / metragemDoTipo;
quantidadeDeGaloes++; //adiciona um galao, porque no calculo anterior o que estava depois da virgula (fracao de 1 galao) foi ignorado
return quantidadeDeGaloes;
}
public static double calculaCusto (int quantidadeDeGaloes, double precoDoTipo) {
double custo;
custo = quantidadeDeGaloes * precoDoTipo;
return custo;
}
// fim funcoes
/*
* Esse algoritmo tem uma falha: Ele sempre adiciona 1 galao a mais na quantidade de galoes, mesmo quando nao eh necessario.
* Ele faz isso porque a funcao que calcula a quantidade retorna um variavel INT (inteiro), sem a parte fracionaria da divisao (metrosQuadrados/metragemPorGalao).
* Por exemplo, se a divisao resultou em 23.2 galoes necessarios, ele guarda apenas o valor 23, ignora o .2, e depois adiciona +1
* Ignora-se a parte fracionaria porque nao da para comprar uma fracao (0.2 galao = um 1itro) de um galao, apenas inteiro. Se voce precisa de 23.2 galoes, vai ter de comprar 24.
* Nota-se a falha quando a divisao eh exata. Se 15.0 galoes são necessarios, o algoritmo vai guardar 15 e somar mais 1 galao, sem necessidade.
* É possivel corrigir usando conversao para String, analisando os caracteres depois da virgula e decidindo se eh inteiro ou fracionario, depois usa-se um IF para decidir o que fazer
* Essa correcao sera feita em uma versao posterior do algoritmo.
*/
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment