Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.*;
- public class Zad03 {
- //STOS
- public static class Stack{
- String[] values;
- int counter;
- public Stack(int a){
- values = new String[a];
- counter = 0;
- }
- public String Top(){
- if( counter > 0 ){
- return values[counter];
- }
- else{
- return "";
- }
- }
- public String Pop(){
- if( counter > 0 ){
- return values[counter--];
- }
- else
- return "";
- }
- public void Push(String arg){
- counter++;
- values[counter] = arg;
- }
- public boolean isEmpty(){
- if( counter == 0 ){
- return true;
- }
- else{
- return false;
- }
- }
- }
- // /STOS
- //SPRAWDZANIE CZY ZNAK JEST OPERANDEM
- public static boolean operandCheck(String arg){
- if( arg.equals("+") || arg.equals("-") || arg.equals("*") || arg.equals("/") || arg.equals("^") || arg.equals("~") || arg.equals(")") || arg.equals("(") )
- return false;
- else
- return true;
- }
- // /SPRAWDZANIE CZY ZNAK JEST OPERANDEM
- //SPRAWDZANIE CZY ZNAK JEST OPERATOREM
- public static boolean operatorCheck(String arg){
- if( arg.equals("+") || arg.equals("-") || arg.equals("*") || arg.equals("/") || arg.equals("^") || arg.equals("~") )
- return true;
- else
- return false;
- }
- // /SPRAWDZANIE CZY ZNAK JEST OPERATOREM
- //POBIERANIE PRIORYTETU
- public static int getPrior(String arg){
- if( arg.equals("+") || arg.equals("-") )
- return 1;
- if( arg.equals("*") || arg.equals("/") )
- return 2;
- if( arg.equals("^") )
- return 3;
- if( arg.equals("~") )
- return 4;
- if( arg.equals("i") )
- return 5;
- else
- return 0;
- }
- // /POBIERANIE PRIORYTETU
- public static void main(String[] args) throws IOException {
- BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
- String input = br.readLine();
- int ileZestawow;
- ileZestawow = Integer.parseInt(input);
- Stack stos = new Stack(100);
- for( int j=0; j<ileZestawow; j++ ){
- input = br.readLine();
- //INF -> ONP
- if( input.charAt(1) == 'I' ){
- System.out.print("<ONP> ");
- for( int i=6 ; i<input.length(); i++ ){
- String act = Character.toString( input.charAt(i) );
- if( operandCheck( act ) ){
- System.out.print(input.charAt(i));
- }
- else{
- if( operatorCheck( act ) ){
- while( !stos.isEmpty() && getPrior( act ) <= getPrior( stos.Top() ) ){
- System.out.print( stos.Pop() );
- }
- stos.Push( act );
- }
- else{
- if( input.charAt(i) == '(' ){
- stos.Push( act );
- }
- else{
- if( input.charAt(i) == ')' ){
- while( operatorCheck( stos.Top() ) ){
- System.out.print( stos.Pop() );
- }
- stos.Pop();
- }
- }
- }
- }
- }
- while( !stos.isEmpty() ){
- System.out.print( stos.Pop() );
- }
- System.out.println();
- }
- //ONP -> INF
- if( input.charAt(1) == 'O' ){
- System.out.print("<INF> ");
- Stack stosOper = new Stack(100);
- for( int i=6; i<input.length(); i++ ){
- String act = Character.toString( input.charAt(i) );
- if( operandCheck( act ) ){
- stos.Push( act );
- stosOper.Push( "i" );
- }
- else{
- String temp = stos.Pop();
- String tempOp = stosOper.Pop();
- boolean czyNieLaczne = false;
- if( act.equals("-") || act.equals("/") )
- czyNieLaczne = true;
- if( ( getPrior( tempOp ) < getPrior( act ) ) ||
- ( getPrior(tempOp) == getPrior(act) && czyNieLaczne ) ){
- temp = "(" + temp + ")";
- }
- if( !act.equals("~") ){
- String temp2 = stos.Pop();
- String temp2Op = stosOper.Pop();
- if( getPrior( temp2Op ) < getPrior( act ) ){
- temp2 = "(" + temp2 + ")";
- }
- temp2 = temp2 + act + temp;
- stos.Push( temp2 );
- stosOper.Push( act );
- }
- else{
- stos.Push( act + temp );
- stosOper.Push( act );
- }
- }
- }
- System.out.println(stos.Pop());
- }
- }
- }
- }
Add Comment
Please, Sign In to add comment