Operações Matématicas

Java

02/11/2012

Quero fazer cálculos matemáticos simples como: somar, subtrair, multiplicar e dividir, com metódos. Mas só falta um detalhe. Vamos supor que o usuário de posse do resultado por exemplo: 2+2 = 4, queira subtrair ou multiplicar ou dividir de outro valor:
10+3-5*6/9;
Alguem pode me ajudar?
Carlos Leonel

Carlos Leonel

Curtidas 0

Respostas

Tiago

Tiago

02/11/2012

Boa tarde Carlos,
uma solução poderia ser a seguinte. vamos imaginar o cenário que você colocou.

int total=2; // Vamos supor que o usuário quer tanto somar quanto multiplicar e até mesmo dividir

total+=10+3-5*6/9;// Você tem que manter o valor do seu total e utiliza-lo para cálculos futuros, a não ser que na sua               calculadora possua um botão que resete o valor

a expressão acima equivale a:

total=2+10+3-5*6/9;




Espero ter ajudado.
GOSTEI 0
Carlos Leonel

Carlos Leonel

02/11/2012

Colegas sobre o assunto anteriormente proposto vejam o código abaixo:
import java.util.Scanner;


import java.util.Scanner;


public class calc {

public static int somar( int num1, int num2){
int total;
total = num1+num2;
return total;
}
public static int subtrair( int num1, int num2){
int total;
total = num1-num2;
return total;
}
public static int multiplicar( int num1, int num2){
int total;
total = num1*num2;
return total;
}
public static int dividir( int num1, int num2){
int total;
total = num1/num2;
return total;
}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
	Scanner input = new Scanner(System.in);
	int val1, val2, resultado = 0;
	String continuacao,operacao;
	
	
	do{
		System.out.println("Digite o valor do 1º número:");
		num1 = input.nextFloat();
		System.out.println("Digite o valor do 2º número:");
		num2 = input.nextFloat();
		
		System.out.println("Digite a opção desejada +,-,*,/");
	            
		operacao = input.next();	
	
	switch(operacao){
	case "+":
		  
		    
			resultado = somar(val1,val2);
			break;
	case "-":
	                resultado = subtrair(val1,val2);
			break;
	case "*":
			resultado = multiplicar(val1,val2);
			break;
	case "/":
			resultado = dividir(val1,val2);
			break;
	default:
		    System.out.println("Operação Inválida");
		}
	System.out.printf("O valor do calculo e: %.2f\n",resultado);
	System.out.println("Deseja continuar (S/N)?\n");
	continuacao = input.next();
	}while (continuacao.equals("S"));
	System.out.println("Operacao Finalizada");
	
		
		
		
		// TODO Auto-generated method stub

	}

}


Com o Código acima caso o usuário queira com o resultado obtido somar, subtrair, dividir, multiplicar ou começar tudo novamente?
GOSTEI 0
Tiago

Tiago

02/11/2012

Você poderia utilizar a variável com o valor total, nesse bloco while... ou seja enquanto for positivo então a variável será sempre alterada...Precisa ver apenas uma forma de deixa-la dinâmica


while (continuacao.equals("S"));


Espero ter ajudado.
GOSTEI 0
Eduardo Pessoa

Eduardo Pessoa

02/11/2012

Tiago, tem como vc me explicar esse codigo??? por favor
GOSTEI 0
Carlos Leonel

Carlos Leonel

02/11/2012

Tiago tem como refazer este código. Só falta este detalhe.Obrigado.
GOSTEI 0
Tiago

Tiago

02/11/2012

Claro farei as modificações e postarei em seguida... eu colei o código no eclipse e me mostrou alguns erros... esse código está funcionando?
GOSTEI 0
Carlos Leonel

Carlos Leonel

02/11/2012

está sim mas se houver seria um grande favor em identificá-los.
Obrigado,
Carlos
GOSTEI 0
Eduardo Pessoa

Eduardo Pessoa

02/11/2012

Tiago???
GOSTEI 0
Sidney Tavares

Sidney Tavares

02/11/2012

Bom dia a todos, tomei a liberdade de fazer algumas alterações no código, pois também copiei e colei no eclipse e gerou alguns erros, não sei no Java 7, mas no 6 na instrução switch só é aceito como argumento os primitivos char, byte, int ou short, além de um enum, abaixo o meu código:

package teste.calculos.simples;

import java.io.IOException;
import java.util.Scanner;

public class Calc {

	public static int somar(int num1, int num2) {
		int total;
		total = num1 + num2;
		return total;
	}

	public static int subtrair(int num1, int num2) {
		int total;
		total = num1 - num2;
		return total;
	}

	public static int multiplicar(int num1, int num2) {
		int total;
		total = num1 * num2;
		return total;
	}

	public static int dividir(int num1, int num2) {
		int total;
		total = num1 / num2;
		return total;
	}

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		Scanner input = new Scanner(System.in);
		int val1, val2, resultado = 0;
		int continuacao;
		char operacao; 
		
		do {
			System.out.println("Digite o valor do 1º número:");
			val1 = input.nextInt();
			System.out.println("Digite o valor do 2º número:");
			val2 = input.nextInt();

			System.out.println("Digite a opção desejada: " + '+' + '-' + '*' + '/');

			operacao = (char) System.in.read();
			
			switch (operacao) {
			
			case '+':
				resultado = somar(val1, val2);
				break;
			case '-':
				resultado = subtrair(val1, val2);
				break;
			case '*':
				resultado = multiplicar(val1, val2);
				break;
			case '/':
				resultado = dividir(val1, val2);
				break;
			default:
				System.out.println("Operação Inválida");
			}
			System.out.printf("O valor do calculo e: %d\n", resultado);
			System.out.println("Deseja continuar (S/N)?\n");
			continuacao = input.nextInt();
		} while (continuacao == 1);

		
		System.out.println("Operacao Finalizada");

		// TODO Auto-generated method stub

	}

}



Outro erro que notei é que as variáveis são todas do tipo int mas havia chamada a nextFloat() para receber o número, bem, essa resumidamente foi a maneira que encontrei. Abraço.
GOSTEI 0
Carlos Leonel

Carlos Leonel

02/11/2012

Sidney, Obrigado também pela ajuda. Realmente a versão utilizada neste código foi a JSE 1.7 por isso é que você não conseguiu. Quanto aos métodos foram todos modificados para float. A dúvida que eu lancei foi a que se o usuário quiser com o resultado obtido continuar a fazer todas as operações como se fosse uma calculadora tipo: 2+2 = 4-1*3/2^3, claro obdecendo a ordem de precedência.
GOSTEI 0
Alisson Santos

Alisson Santos

02/11/2012

conseguiu sanar sua duvida
GOSTEI 0
Carlos Leonel

Carlos Leonel

02/11/2012

Pessoal, agradeço a iniciativa de todos. Talvez a minha dúvida seja simples para alguns de resolver para outros, que é o meu caso, complicado. Pelo que sei eu teria que criar outra variável para guardar o resultado obtido e com ele executar tantas ou quantas eu quiser. Acontece que eu não sei como colocar isso no código. Só falta este detalhe para dar finalizar a minha Calculadora.
GOSTEI 0
Carlos Leonel

Carlos Leonel

02/11/2012

pessoal eu so gostaria de saber onde eu coloco o codigo para continuar a efetuar as operacoes ate o usuario finaliza
GOSTEI 0
Carlos Leonel

Carlos Leonel

02/11/2012

Att: Tiago de Oliveira Vale
Tem alguam notícia a respeito do código que lhe passei?

Carlos
GOSTEI 0
Claudia Nogueira

Claudia Nogueira

02/11/2012

É pra um exercício de faculdade?
Na minha época quando tinha esses exercícios, pra ficar repetindo alguma coisa, eu usava um while, e enquanto não digitasse alguma tecla, não fechava a aplicação.
Se for isso, poderia fazer um loop infinito e verificando alguma tecla, enquanto o usuário não digitar determinada tecla, continua fazendo as operações que você precisa.
GOSTEI 0
Carlos Leonel

Carlos Leonel

02/11/2012

Claudia
Sim se é a pergunta que você me fez. Meu único e somente único problema é como criar isso dentro do código.
GOSTEI 0
Tiago

Tiago

02/11/2012

Carlos desculpe a minha ausência, estive ocupado esses dias... mas vamos la.. a minha ideia é a seguinte

While(true{)// neste while, utilize uma condição que pergunte ao usuário se ele ainda quer continuar a operação(Isso é apenas uma forma).
total+=(expressão)//Desta forma você utilizara o valor que ainda esta na aplicação, ou seja ele não estará zerado.

System.Out.Println("Resultado: "+total);

}


Eu acho que seria mais ou menos algo dessa linha, desculpe não tive tempo de analisar o seu código.Mas se eu tivesse de fazer faria algo parecido com o de cima.Espero ter ajudado.
GOSTEI 0
Carlos Leonel

Carlos Leonel

02/11/2012

Tiago,
O meu maior problema que agora viraram dois é: dentro do Switch se o cara digitar algo que não esteja listado dentro das operações o meu default de saída é "Operação inválida". Com essa mensagem tenho que pedir que o usuário digite a operação correta e aí sim ele me dê o resultado. E, o que mais está me chateando é a questão do resultado caso ele queira continuar a operação. Vou te mandar o código com os métodos. Se puder fazer a gentileza de refazê-lo eu agradeço:

import java.util.Scanner;;
public class Calculadora {
public static float somar(float num1, float num2){
float total;
total = num1 + num2;
return total;
}
public static float subtrair (float num1, float num2){
float total;
total = num1 - num2;
return total;
}
public static float multiplicar (float num1,float num2){
float total;
total = num1*num2;
return total;
}
public static float dividir (float num1, float num2){
float total;
total = num1/num2;
return total;
}
public static float potencia( float num, float pot ){
float resultado;
resultado = 1;
if (pot==0){
total = 1
}
for ( int cont = 1;cont<pot;cont++ ){
resultado = resultado * num;
}
return resultado;

}

/**
* @param args
*/
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
float val1, val2, resultado = 0, valortotal = 0;
String continuacao,operacao;

System.out.println("Digite o valor do 1º número:");
val1 = input.nextFloat();
System.out.println("Digite o valor do 2º número:");
val2 = input.nextFloat();

System.out.println("Digite a opção desejada +,-,*,/,^");

operacao = input.next();
do{


switch(operacao){
case "+":
resultado = somar(val1,val2);
break;
case "-":
resultado = subtrair(val1,val2);
break;
case "*":
resultado = multiplicar(val1,val2);
break;
case "/":
resultado = dividir(val1,val2);
break;
case "^":
resultado = potencia(val1,val2);
break;
default:
System.out.println("Operação Inválida");
}
System.out.printf("O valor do calculo e: %.2f\n",resultado);
System.out.println("Deseja continuar (S/N)?\n");
continuacao = input.next();
}while (continuacao.equals("S"));
System.out.println("Operacao Finalizada");

}

}
GOSTEI 0
Carlos Leonel

Carlos Leonel

02/11/2012

Pessoal alguem conseguiu decifrar o enigma?
GOSTEI 0
Thiago Lopes

Thiago Lopes

02/11/2012

vamos lá:
linha 28 faltou um ;

bom, vamos tentar entao resolver essa questao do resultado com reutilização;
em todos os metodos adicione o parametro com este resultado alem dos que ja existem inves de criar a variavel total dentro do metodo.. vou deixar um exemplo simples do seu codigo para ver como vai ficar:

public class Calculadora {
   
    public static float somar(float num1, float num2, float display){
        display += num1 + num2;
        return display;
    }
    public static float subtrair (float num1, float num2, float display){
        display += num1 - num2; // ou se preferir -=
        return display;
    }
}


o outro jeito de realizar o mesmo procedimento seria criar um metodo proprio para isso.. ex:

public class Calculadora {
    
    public static float chamaOperacao(float valortotal, float valorDaConta){
        return valortotal += valorDaConta;
    }
    
    public static float somar(float num1, float num2){
        float total;
        total = num1 + num2;
        return total;
    }
    public static float subtrair (float num1, float num2){
        float total;
        total = num1 - num2;
        return total;
    }
}


onde ao chamar a função para adicionar tal valor voce chamaria esta nova função com a escolhida atribuida ao segundo parametro...


    public static void main(String[] args) {
        float valorTotal = 0;
        
        switch(operacao){
            case "+":
                valorTotal = chamaOperacao(valorTotal, somar(val1,val2));
                break;
            case "-":
                valorTotal += subtrair(val1,val2);
                break;
            default:
                System.out.println("Operação Inválida");
        }
    }



como pode ver voce poderia utilizar com função ou somente com um simples incremento e ao fim de cada operação displayasse na tela o resultado
existem diversos metodos mais inteligentes e praticos.. mas achei esses 2 mais simples...
espero ter ajudado.
GOSTEI 0
Thiago Lopes

Thiago Lopes

02/11/2012

Analisando meu ultimo exemplo vi um erro, inves de criar essa função, utilize somente a variavel valor total dentro da função...

valorTotal = soma(valorTotal, num2);


=)
GOSTEI 0
POSTAR