From: Doni Pracner Date: Mon, 25 May 2015 15:02:08 +0000 (+0200) Subject: Primeri za postfiksni kalkulator X-Git-Url: https://svarog.pmf.uns.ac.rs/gitweb/?a=commitdiff_plain;h=c6141934049f141ec95faa6c44aac67c0be89f17;p=spa1-materijali.git Primeri za postfiksni kalkulator --- diff --git a/kodovi/stek-i-red-opsluzivanja/InteraktivniPostFix.java b/kodovi/stek-i-red-opsluzivanja/InteraktivniPostFix.java new file mode 100644 index 0000000..ffea624 --- /dev/null +++ b/kodovi/stek-i-red-opsluzivanja/InteraktivniPostFix.java @@ -0,0 +1,96 @@ +/** + * Postfiksna notacija prvo izlistava operande, a potom operacije. + * + * Ovaj program predstavlja interaktivni postfiksni kalkulator u tome + * se unose + * + */ +public class InteraktivniPostFix { + + public static void main(String[] args) { + + System.out.println("Postfiksni kalkulator."); + System.out.println("Za kraj unesite tačku '.'"); + String str = Svetovid.in.readLine("-ulaz?"); + + Stek stek = new Stek(100); + int broj = 0; + + while (!str.equals(".")) { + if (jeOperator(str)) { + char c = str.charAt(0); + try { + obradiOperaciju(c, stek); + } catch (Exception e) { + System.out.println("Greska:" + e.getMessage()); + } + } else { + // nije operator, probamo da li je broj + boolean jeBroj = true; + try { + broj = Integer.valueOf(str); + } catch (NumberFormatException e) { + jeBroj = false; + } + if (jeBroj) { + stek.stavi(broj); + } else { + System.out.println("Greska - nije ni broj ni operacija!"); + System.out.println("Za kraj unesite tačku '.'"); + } + + } + stanjeSteka(stek); + System.out.print("-ulaz? "); + str = Svetovid.in.readLine(); + } + stanjeSteka(stek); + System.out.println("-kraj rada"); + } + + /** + * @param c + * @param s + */ + public static void obradiOperaciju(char c, Stek s) { + int op2 = s.skiniVrh(); + int op1 = s.skiniVrh(); + + switch (c) { + case '+': + s.stavi(op1 + op2); + break; + case '-': + s.stavi(op1 - op2); + break; + case '*': + s.stavi(op1 * op2); + break; + case '/': + s.stavi(op1 / op2); + break; + case '%': + s.stavi(op1 % op2); + break; + } + } + + public static boolean jeOperator(String str) { + if (str.length() == 1) { + char c = str.charAt(0); + if (c == '+' || c == '-' || c == '*' || c == '/' || c == '%') + return true; + } + return false; + } + + public static void stanjeSteka(Stek s) { + if (s.jePrazan()) { + System.out.println("rezultat: ne postoji"); + } else { + int vrh = s.vrh(); + System.out.println("rezultat: " + vrh); + } + } + +} diff --git a/kodovi/stek-i-red-opsluzivanja/PostFix.java b/kodovi/stek-i-red-opsluzivanja/PostFix.java new file mode 100644 index 0000000..293b308 --- /dev/null +++ b/kodovi/stek-i-red-opsluzivanja/PostFix.java @@ -0,0 +1,51 @@ +/** + * Postfixni kalkulator prima prvo operande, a onda operacije, npr 3 2 + umesto + * 3+2. + * + * Zadatak je napraviti mali postfiksni kalkulator koji obrađuje uneti String, + * pri čemu se predpostavlja da mogu da postoje operacije +,-,*,/ i %, te da su + * u pitanju jednocifreni celi brojevi. + * + */ +public class PostFix { + public static void main(String[] args) { + int op1, op2; + char c; + + System.out.print("Unesite string: "); + String str = Svetovid.in.readLine(); + + Stek s = new Stek(100); + + for (int i = 0; i < str.length(); i++) { + c = str.charAt(i); + if (c == '+' || c == '-' || c == '*' || c == '/' || c == '%') { + op2 = s.vrh(); + s.skiniVrh(); + op1 = s.vrh(); + s.skiniVrh(); + switch (c) { + case '+': + s.stavi(op1 + op2); + break; + case '-': + s.stavi(op1 - op2); + break; + case '*': + s.stavi(op1 * op2); + break; + case '/': + s.stavi(op1 / op2); + break; + case '%': + s.stavi(op1 % op2); + break; + } + } else + s.stavi(Character.getNumericValue(c)); + } + op1 = s.vrh(); + System.out.print("="); + System.out.print(op1); + } +} \ No newline at end of file