Created
March 18, 2019 00:28
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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