import java.lang.*; import java.io.*; class Console { static public String ReadLn() { try { BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); return stdin.readLine(); } catch (IOException e) { System.out.println(e); return ""; } } } class Element { double Oblicz() { return 0; } } class Liscie_drzewa extends Element { Element l,r; } class Element_l { boolean Oblicz() { return true; } } class Liscie_drzewa_l extends Element_l { Element_l l,r; } class Liczba extends Liscie_drzewa { double nValue; double Oblicz() { return nValue; } Liczba (double value) { nValue=value; } } class Liczba_l extends Liscie_drzewa_l { boolean nValue; boolean Oblicz() { return nValue; } Liczba_l (boolean value) { nValue=value; } } class Plus extends Liscie_drzewa { double Oblicz() { return l.Oblicz()+r.Oblicz(); } } class Minus extends Liscie_drzewa { double Oblicz() { return l.Oblicz()-r.Oblicz(); } } class Mnozenie extends Liscie_drzewa { double Oblicz() { return l.Oblicz()*r.Oblicz(); } } class Dzielenie extends Liscie_drzewa { double Oblicz() { return l.Oblicz()/r.Oblicz(); } } class And extends Liscie_drzewa_l { boolean Oblicz() { return l.Oblicz() && r.Oblicz(); } } class Or extends Liscie_drzewa_l { boolean Oblicz() { return l.Oblicz() || r.Oblicz(); } } class Drzewo { Element wierzcholek=null; double na_drzewo (double value, char op) { if (wierzcholek==null) { wierzcholek=new Liczba(value); } else switch(op) { case '0': { Liscie_drzewa temp=(Liscie_drzewa) wierzcholek; while (temp.r!=null) temp=(Liscie_drzewa) temp.r; temp.r=new Liczba(value); break; } case '+': { Liscie_drzewa temp=new Plus(); temp.l=wierzcholek; wierzcholek=temp; break; } case '-': { Liscie_drzewa temp=new Minus(); temp.l=wierzcholek; wierzcholek=temp; break; } case '*': { Liscie_drzewa temp=new Mnozenie(); if (wierzcholek instanceof Minus || wierzcholek instanceof Plus) { temp.l=((Liscie_drzewa)wierzcholek).r; ((Liscie_drzewa)wierzcholek).r=temp; } else { temp.l=wierzcholek; wierzcholek=temp; } break; } case '/': { Liscie_drzewa temp=new Dzielenie(); if (wierzcholek instanceof Minus || wierzcholek instanceof Plus) { temp.l=((Liscie_drzewa)wierzcholek).r; ((Liscie_drzewa)wierzcholek).r=temp; } else { temp.l=wierzcholek; wierzcholek=temp; } break; } default:break; } return 0; } double nawias (int i, int j, String dzialanie) { int k, l; double liczba_int, wynik, liczba1, liczba2; String liczba=""; boolean Nawias=false; Drzewo dn=new Drzewo(); k=i; for (; k"); try { l=czytaj.ReadLn(); for (i=0; i51) throw new Nieprawidlowy_znak(); } } catch (Nieprawidlowy_znak wy) { wy.wyjatek_nz(); continue; } l_int=Integer.parseInt(l); switch(l_int) { case 1: do { System.out.println("\n1. Wczytaj wyrazenie arytmetyczne z klawiatury"); System.out.println("2. Wczytaj wyrazenie arytmetyczne z pliku"); System.out.println("3. Powrot"); System.out.print(">"); try { l=czytaj.ReadLn(); for (i=0; i51) throw new Nieprawidlowy_znak(); } } catch (Nieprawidlowy_znak wy) { wy.wyjatek_nz(); continue; } l_int2=Integer.parseInt(l); switch(l_int2) { case 1: do { liczba=""; dzialanie=""; drzewo.wierzcholek=null; System.out.println("Podaj dzialanie:"); dzialanie=czytaj.ReadLn(); if (s.sprawdz(dzialanie)==true) { for (i=0; i"); try { l=czytaj.ReadLn(); for (i=0; i51) throw new Nieprawidlowy_znak(); } } catch (Nieprawidlowy_znak wy) { wy.wyjatek_nz(); continue; } l_int3=Integer.parseInt(l); switch(l_int3) { case 1: do { System.out.println("Podaj dzialanie:"); dzialanie=czytaj.ReadLn(); if (s.sprawdz_l(dzialanie)==true) { for (i=0; i