Prijava na forum:
Ime:
Lozinka:
Prijavi me trajno:
Trajanje:
Registruj nalog:
Ime:
Lozinka:
Ponovi Lozinku:
E-mail:

ConQUIZtador
Trenutno vreme je: 22. Jul 2025, 23:20:45
nazadnapred
Korisnici koji su trenutno na forumu 0 članova i 0 gostiju pregledaju ovu temu.


Tema za pitanja
o SMF forumu, phpBB2 i phpBB3 forumu, Wordpress i Joomla CMS sistemima!

Za vecinu drugih pitanja nacicete odgovor citajuci Top teme!

Idi dole
Stranice:
Počni novu temu Nova anketa Odgovor Štampaj Dodaj temu u favorite Pogledajte svoje poruke u temi
Tema: java problem  (Pročitano 3845 puta)
03. Dec 2014, 00:26:25
Udaljen sa foruma
Pocetnik

Zodijak Capricorn
Pol Muškarac
Poruke 19
Browser
Chrome 39.0.2171.71
Pravim neki program koji treba da određuje da li je izraz tautologija, kontradikcija ili zadovoljiva.
I sada, lepo radi u nekom slučajevima kada treba redom da određuje ali kada treba da ispoštuje pravila prednosti tipa recimo u primeru
(p||q=>r)<=>(p=>r)&&(q=>r)
prvo će da radi (p||q=>r)<=>(p=>r)
pa tek ostalo a meni treba da odradi prvo (p||q=>r) pa (p=>r)&&(q=>r) i tek onda ekvivalenciju.
Recimo tako bi računalo 4+3*2 = 14
Rađeno je preko obrnute poljske notacije. Ako neko zna šta dodati kodu i gde(još sam slab sa javom a trebam da predam ovo ubrzo).


import java.util.ArrayList;
import java.util.HashMap;
import java.util.Stack;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ReversePolishNotation {

   // Spisak operatora
   public static final String[] OPERATORS = { "=>", "<=>", "&&", "||", "^",
         "(", ")", "^" };

   public static boolean evaluate(String expression,
         HashMap<String, Boolean> values) {
      // Dodaje default 0 i 1 vrednosti u slucaju negacije samo jedne vrednost
      values.put("0", false);
      values.put("1", true);

      // Uklanja sve razmake
      expression = expression.replaceAll("\\s+", "");

      // Pretraga karaktera za negaciju i zamenja njegovom default obrnutom
      // vrednoscu
      Pattern PATTERN = Pattern.compile("\\^[A-Za-z0-9]");
      Matcher m = PATTERN.matcher(expression);
      while (m.find()) {
         String s = m.group(0).substring(1, 2);

         if (values.get(s) == false)
            expression = expression.replaceAll("\\^[A-Za-z0-9]", "1");
         else
            expression = expression.replaceAll("\\^[A-Za-z0-9]", "0");
      }

      // Regularni izraz za splitovanje zadatog izraza po operatorima
      String regex = "((?<=\\))|(?=\\)))|((?<=\\()|(?=\\())|((?<=\\b\\w+\\b)|(?=\\b\\w+\\b))";

      String[] tokens = expression.split(regex);

      Stack<String> operators = new Stack<String>();
      Stack<Boolean> operands = new Stack<Boolean>();

      ArrayList<String> output = new ArrayList<String>();

      for (String clan : tokens) {

         if (!clan.equals(")")) {
            if (isOperator(clan))
               operators.push(clan);
            else
               output.add(clan);

         } else {
            while (operators.peek().equals("(") == false) {
               output.add(operators.pop());
            }

            operators.pop();
         }
      }

      // Racunanje and shit
      while (operators.size() != 0) {
         output.add(operators.pop());
      }

      for (String item : output) {

         if (!isOperator(item)) {

            operands.push(values.get(item));

         } else if (item.equals("=>")) {

            boolean item1 = operands.pop();
            boolean item2 = operands.pop();

            if (item2 == true && item1 == false)
               operands.push(false);
            else
               operands.push(true);

         } else if (item.equals("&&")) {

            boolean item1 = operands.pop();
            boolean item2 = operands.pop();
            if (item1 == true && item2 == true)
               operands.push(true);
            else
               operands.push(false);

         }

         else if (item.equals("||")) {

            boolean item1 = operands.pop();
            boolean item2 = operands.pop();
            if (item1 == true || item2 == true)
               operands.push(true);
            else
               operands.push(false);

         }

         else if (item.equals("^")) {

            boolean item1 = operands.pop();

            operands.push(!item1);

         }

         else if (item.equals("<=>")) {

            boolean item1 = operands.pop();
            boolean item2 = operands.pop();

            if (item1 == item2)
               operands.push(true);
            else
               operands.push(false);

         }

      }

      return operands.pop();

   }

   private static boolean isOperator(String s) {
      for (String operator : OPERATORS) {
         if (s.equals(operator))
            return true;
      }

      return false;
   }

}
IP sačuvana
social share
Pogledaj profil WWW
 
Prijava na forum:
Ime:
Lozinka:
Zelim biti prijavljen:
Trajanje:
Registruj nalog:
Ime:
Lozinka:
Ponovi Lozinku:
E-mail:
Idi gore
Stranice:
Počni novu temu Nova anketa Odgovor Štampaj Dodaj temu u favorite Pogledajte svoje poruke u temi
Trenutno vreme je: 22. Jul 2025, 23:20:45
nazadnapred
Prebaci se na:  
Oznake: java

Poslednji odgovor u temi napisan je pre više od 6 meseci.  

Temu ne bi trebalo "iskopavati" osim u slučaju da imate nešto važno da dodate. Ako ipak želite napisati komentar, kliknite na dugme "Odgovori" u meniju iznad ove poruke. Postoje teme kod kojih su odgovori dobrodošli bez obzira na to koliko je vremena od prošlog prošlo. Npr. teme o određenom piscu, knjizi, muzičaru, glumcu i sl. Nemojte da vas ovaj spisak ograničava, ali nemojte ni pisati na teme koje su završena priča.

web design

Forum Info: Banneri Foruma :: Burek Toolbar :: Burek Prodavnica :: Burek Quiz :: Najcesca pitanja :: Tim Foruma :: Prijava zloupotrebe

Izvori vesti: Blic :: Wikipedia :: Mondo :: Press :: Naša mreža :: Sportska Centrala :: Glas Javnosti :: Kurir :: Mikro :: B92 Sport :: RTS :: Danas

Prijatelji foruma: Triviador :: Nova godina Beograd :: nova godina restorani :: FTW.rs :: MojaPijaca :: Pojacalo :: 011info :: Burgos :: Sudski tumač Novi Beograd

Pravne Informacije: Pravilnik Foruma :: Politika privatnosti :: Uslovi koriscenja :: O nama :: Marketing :: Kontakt :: Sitemap

All content on this website is property of "Burek.com" and, as such, they may not be used on other websites without written permission.

Copyright © 2002- "Burek.com", all rights reserved. Performance: 0.075 sec za 15 q. Powered by: SMF. © 2005, Simple Machines LLC.