import java.util.Scanner;
import java.util.Stack;
import java.util.StringTokenizer;
import java.util.Vector;
public class Main {
private String wyrazenie;
private String onp;
private double wynik;
public Main(String wyrazenie) {
this.wyrazenie = wyrazenie;
this.onp = "";
zamiana();
wynik=oblicz();
}
private void zamiana() {
Stack
stos = new Stack();
StringTokenizer st = new StringTokenizer(wyrazenie, "+-*/()^", true);
while(st.hasMoreTokens()) {
String s = st.nextToken();
if( s.equals("+") || s.equals("*") || s.equals("-") || s.equals("/") || s.equals("^")) {
while(!stos.empty() && priorytet(stos.peek()) >= priorytet(s))
onp += stos.pop() + " ";
stos.push(s);
}
else if(s.equals("("))
stos.push(s);
else if(s.equals(")")) {
while(!stos.peek().equals("("))
onp += stos.pop() + " ";
stos.pop();
}
else
onp += s + " ";
}
while(!stos.empty())
onp += stos.pop() + " ";
}
public static int priorytet(String operator) {
if(operator.equals("+") || operator.equals("-"))
return 1;
else if(operator.equals("*") || operator.equals("/"))
return 2;
else if(operator.equals("^"))
return 3;
else
return 0;
}
private double oblicz() {
Stack stos = new Stack();
StringTokenizer st = new StringTokenizer(onp, " ");
while(st.hasMoreTokens()) {
String s = st.nextToken();
if (!s.equals("+") && !s.equals("*") && !s.equals("-") && !s.equals("/") && !s.equals("^")) {
double wartosc = Double.parseDouble(s);
stos.push(wartosc);
}
else {
double wartosc1 = stos.pop();
double wartosc2 = stos.pop();
switch(s.charAt(0)) {
case '*': {
stos.push(wartosc2 * wartosc1);
break;
}
case '+': {
stos.push(wartosc2 + wartosc1);
break;
}
case '-': {
stos.push(wartosc2 - wartosc1);
break;
}
case '/': {
stos.push(wartosc2 / wartosc1);
break;
}
case '^': {
stos.push(Math.pow(wartosc2,wartosc1));
break;
}
}
}
}
return stos.pop();
}
public String toString() {
return wynik + "\t " + onp;
}
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int t = Integer.parseInt(sc.nextLine());
Vector tablica = new Vector();
for(int k=1; k<=t; k++)
tablica.add( new Main(sc.nextLine()));
for(int i=0;i
Wyszukiwarka
Podobne podstrony:
Odwrotna notacja polska
odwrotna notacja polska kolokwium
Poezja polska średniowiecza
Rosjanie poczynają sobie z Polską coraz śmielej
Instrukcja Programowania Zelio Logic 2 wersja polska
WYTYCZNE TCCC 2014 WERSJA POLSKA
Polska norma turbozespoly wiatrowe(1)
POLSKA DROGA FIATA 3
file D Download Polki Wirtualna Polska8
Advanced Project Management?ycja polska?prom
489 Polska reklamaq51 874 4
polskawalczaca com • Zobacz wątek Zarcik3
więcej podobnych podstron