Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package kalkulatorONP;
- public class Calc {
- public static boolean sprawdz_priorytet(String stos, String args)
- {
- int p1 = 0, p2 = 0;
- switch(stos)
- {
- case "+":
- p1 = 1;
- break;
- case "-":
- p1 = 1;
- break;
- case "x":
- p1 = 2;
- break;
- case"/":
- p1 = 2;
- break;
- default:
- break;
- }
- switch(args)
- {
- case "+":
- p2 = 1;
- break;
- case "-":
- p2 = 1;
- break;
- case "x":
- p2 = 2;
- break;
- case"/":
- p2 = 2;
- break;
- default:
- break;
- }
- return (p1 >= p2);
- }
- public static void wypisz(String[] wyjscie)
- {
- //System.out.print("W ONP: ");
- for(int i = 0; i < wyjscie.length; i++)
- if(wyjscie[i] != null)
- System.out.print(wyjscie[i] + " ");
- System.out.print(" = ");
- }
- public static void main(String[] args) {
- Stos stosik = new Stos();
- //dlugosc dzialania
- int dlugosc = 0;
- while(args[0].charAt(dlugosc) != '=')
- dlugosc++;
- //Wypisanie dzialania
- //System.out.print("Działanie: ");
- for(int i = 0; i < dlugosc; i++)
- System.out.print(args[0].charAt(i));
- System.out.print(" = ");
- //Tablice wejscia i wyjscia
- String[] wyjscie = new String[dlugosc];
- double[] wejscie = new double[dlugosc];
- //przechowywanie indexu gdzie mozna wstawic element w tablic wyjscie
- int tmp_wy = 0;
- for(int i = 0; i < dlugosc; )
- {
- //sprawdzanie czy jest liczba
- if(Character.isDigit(args[0].charAt(i)))
- {
- wyjscie[tmp_wy] = Character.toString(args[0].charAt(i));
- i++;
- //szukanie wielocyfrowych oraz liczb typu double
- while(i<dlugosc && (Character.isDigit(args[0].charAt(i)) || args[0].charAt(i) == '.'))
- {
- wyjscie[tmp_wy] += args[0].charAt(i);
- i++;
- }
- tmp_wy++;
- }
- else //jesli nie jest, to moze byc operatorem lub nawiasem
- {
- if(args[0].charAt(i) == '(') //jesli nawias otwierajacy to po prostu na stos
- stosik.push(Character.toString(args[0].charAt(i)));
- else if(args[0].charAt(i) == ')') //jesli zamykajacy to na wyjscie wszystko az do napotkania otwierajacego
- {
- while(!stosik.return_value().equals("(")) //dopoki na szczycie stosu nie ma nawiasu otwierajacego
- {
- wyjscie[tmp_wy] = stosik.pop();
- tmp_wy++;
- }
- stosik.pop();
- }
- else //sprawdzanie priorytetu
- {
- if(stosik.return_size()>0)
- {
- if(!stosik.return_value().equals("(") && sprawdz_priorytet(stosik.return_value(), Character.toString(args[0].charAt(i))))
- {
- wyjscie[tmp_wy] = stosik.pop();
- tmp_wy++;
- stosik.push(Character.toString(args[0].charAt(i)));
- }
- else
- stosik.push(Character.toString(args[0].charAt(i)));
- }
- else
- stosik.push(Character.toString(args[0].charAt(i)));
- }
- i++;
- }
- //stosik.drukuj();
- }
- while(!stosik.empty())
- {
- wyjscie[tmp_wy] = stosik.pop();
- tmp_wy++;
- }
- //TERAZ WEJSCIE I OBLICZENIE WARTOSCI WYRAZENIA
- int k = tmp_wy;
- //WYPISANIE WYRAZENIA W ONP
- wypisz(wyjscie);
- int tmp_we = 0;
- for(int i = 0; i < k; i++)
- {
- //sprawdzanie czy jest liczba
- if(Character.isDigit(wyjscie[i].charAt(0)))
- {
- wejscie[tmp_we] = Double.parseDouble(wyjscie[i]);
- tmp_we++;
- }
- else //znaczy ze operator, czyli wykonanie dzialania
- {
- if(wyjscie[i].equals("+"))
- wejscie[tmp_we - 2] = wejscie[tmp_we - 2] + wejscie[tmp_we - 1];
- else if(wyjscie[i].equals("-"))
- wejscie[tmp_we - 2] = wejscie[tmp_we - 2] - wejscie[tmp_we - 1];
- else if(wyjscie[i].equals("x"))
- wejscie[tmp_we - 2] = wejscie[tmp_we - 2] * wejscie[tmp_we - 1];
- else if(wyjscie[i].equals("/"))
- wejscie[tmp_we - 2] = wejscie[tmp_we - 2] / wejscie[tmp_we - 1];
- tmp_we--;
- }
- }
- //System.out.println("");
- System.out.print( wejscie[0]);
- }
- }
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- package kalkulatorONP;
- public class Stos {
- String[] stos = new String[100];
- int licznik = 0;
- //ZDEJMOWANIE ELEMENTU ZE STOSU
- public String pop(){
- if(!empty())
- {
- licznik--;
- return stos[licznik];
- }
- else
- System.out.println("Stos pusty");
- return null;
- }
- //DODAWANIE ELEMENTU NA STOS
- public void push(String value){
- stos[licznik] = value;
- licznik++;
- }
- //ZWRACANIE WARTOŚCI NA STOSIE
- public String return_value()
- {
- return stos[licznik-1];
- }
- //WYPISYWANIE STOSU
- public void drukuj(){
- if(empty())
- System.out.println("Stos pusty, nie ma co wypisać");
- else
- for(int i = 0; i < licznik; i++)
- System.out.print(stos[i] + ", ");
- System.out.println("");
- }
- //SPRAWDZANIE CZY STOS JEST PUSTY
- public boolean empty() {
- if(licznik<1)
- return true;
- else
- return false;
- }
- //ZWRACANIE ROZMIARU STOSU
- public int return_size() {
- return licznik;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement