Calculo de expressões matematicas!!  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
corvaoPJ
What is classpath?
[Avatar]

Membro desde: 13/02/2004 00:00:00
Mensagens: 8
Offline

Ae galera susse????

meu problema eh o seguinte, tenho que criar um programa em java para calcular a expressão matematica que o usuario digitar, entao no programa eu tenho que verificar a equação e pa! isso eu consigo, ms o problema eh como resolver essa equação digitada....

olha o programa

import java.io.*;
public class ExpresaoMath
{
public static void main (String[] args)
{
/*PROGRAMA PARA VALIDACAO DE EXPRESSAO MATEMATICA
*E RESOLUÇAO DELA
*/
String str = Console.readString("\n Digite a expressão matematica desejada\n ");
// A CONSOLE.READSTRING, EH UMA CLASSE SEPARADA!
int j=0, i=0, v=0;
double result=0;
String strSimb = "0123456789+-*/() ";
char ch;
while(str.charAt(j) == ' ')
j++;
for (i=j; i < str.length();i++)
{
ch=str.charAt(i);
if(strSimb.indexOf(ch) == -1)
v=-1;
}
if(v==-1)
{
System.out.println("Equacao invalida, favor reinicie o programa");
System.exit(1);
}
else
{
System.out.println("Equação valida");
// E AGORA COMO RESOLVER A EQUAÇAO???????
}
}
}
[WWW] [ICQ]
maviPJ
JavaChild
[Avatar]

Membro desde: 16/09/2004 00:00:00
Mensagens: 143
Offline

corvao wrote:Ae galera susse????

meu problema eh o seguinte, tenho que criar um programa em java para calcular a expressão matematica que o usuario digitar, entao no programa eu tenho que verificar a equação e pa! isso eu consigo, ms o problema eh como resolver essa equação digitada....

olha o programa

import java.io.*;
public class ExpresaoMath
{
public static void main (String[] args)
{
/*PROGRAMA PARA VALIDACAO DE EXPRESSAO MATEMATICA
*E RESOLUÇAO DELA
*/
String str = Console.readString("\n Digite a expressão matematica desejada\n ");
// A CONSOLE.READSTRING, EH UMA CLASSE SEPARADA!
int j=0, i=0, v=0;
double result=0;
String strSimb = "0123456789+-*/() ";
char ch;
while(str.charAt(j) == ' ')
j++;
for (i=j; i < str.length();i++)
{
ch=str.charAt(i);
if(strSimb.indexOf(ch) == -1)
v=-1;
}
if(v==-1)
{
System.out.println("Equacao invalida, favor reinicie o programa");
System.exit(1);
}
else
{
System.out.println("Equação valida");
// E AGORA COMO RESOLVER A EQUAÇAO???????
}
}
}



O java acho que tem uma classe pra isso, mas não é dificil tambem fazer...

Separa os dados por Espacos em um array

2 * (2 + 1)

Depois sai executando da esquerda pra direita (do 0 até o length) em ordem de prioridade ( { e [ .....depois executa tudo de novo por ordem de prioridade dos sinais.....e buenas...

if(chr == "*")

Etc
[WWW] [ICQ]
HSNPJ
Entusiasta Java
[Avatar]

Membro desde: 12/10/2004 00:00:00
Mensagens: 24
Offline

Bom, primeiro, o código postado não ia funcionar, pois o trecho

só iria encontrar um símbolo inválido se ele fosse o último da expressão. Para consertar isso, use o código abaixo:


Para dividir a expressão em unidades adequadas, ou seja, números e símbolos, pode-se usar o String.split(), disponível a partir do Java 1.4, e o java.util.StringTokenizer, disponível desde o 1.0. Usando o StringTokenizer:


Pelo que sei, tradicionalmente expressões matemáticas em programação são resolvidas primeiro escrevendo a expressão em notação polonesa reversa (pós-fixa) e depois lendo e calculando o valor. A notação pós-fixa é muito útil porque para resolver a expressão é só ir lendo e calculando da esquerda para a direita. Não me recordo completamente do algoritmo agora, mas é só fazer uma procura no Google por "algoritmo polonesa pós fixa" que você deve achar.
[WWW] aim icon [ICQ]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team