Forum » Programiranje » [NALOGA] Java: Rekurzija
[NALOGA] Java: Rekurzija
Timon ::
pozdravljeni!
prosil bi za pomoč pri nalogi:
Računski izrazi v prefiksni obliki so sestavljeni tako, da je najprej podan operator in nato operanda, ki sta prav tako prefiksna izraza. Realizirajte program, ki izračuna vrednost prefiksnega izraza. Na primer: vrednost izraza +,+,4,3,-,2,1 je 8 (ustreza prefiksnemu izrazu (4+3)+(2-1).
program moram realizirati z rekurzijo.
hvaležen bom za vsako pomoč.
LP Timon
prosil bi za pomoč pri nalogi:
Računski izrazi v prefiksni obliki so sestavljeni tako, da je najprej podan operator in nato operanda, ki sta prav tako prefiksna izraza. Realizirajte program, ki izračuna vrednost prefiksnega izraza. Na primer: vrednost izraza +,+,4,3,-,2,1 je 8 (ustreza prefiksnemu izrazu (4+3)+(2-1).
program moram realizirati z rekurzijo.
hvaležen bom za vsako pomoč.
LP Timon
LeQuack ::
Tu je neka hitra rešitev. Nisem preveč testiral.
Progam zaženeš z:
java PrefiksaRekurzija izraz
Primer:
java PrefiksaRekurzija +,+,4,3,-,2,1
Progam zaženeš z:
java PrefiksaRekurzija izraz
Primer:
java PrefiksaRekurzija +,+,4,3,-,2,1
import java.math.BigDecimal; import java.util.Arrays; /** * Izračun rekurzije s prefiksno (polish) notacijo. * * @author David Sedlar */ public class PrefiksaRekurzija { /** * Glavna metoda * * @param args argumenti, prvi argument je izraz */ public static void main(String[] args) { String[] izrazParsed = null; if(args.length > 0) izrazParsed = args[0].split(","); else System.exit(0); BigDecimal result = polishCalculate(izrazParsed); System.out.format("Rezultat: %.3f", result); } /** * Izracun izraza. * * @param izraz izraz v obliki tabele * @return Rezultat izraza */ private static BigDecimal polishCalculate(String[] izraz) { if(izraz.length == 1) return new BigDecimal(izraz[0]); else if (izraz.length > 2) { String operator = izraz[0]; int sredina = vrniSredino(izraz, 1, 1); String[] leviOperand = Arrays.copyOfRange(izraz, 1, sredina); String[] desniOperand = Arrays.copyOfRange(izraz, sredina, izraz.length); if (operator.equals("*")) return polishCalculate(leviOperand).multiply(polishCalculate(desniOperand)); else if (operator.equals("/")) return polishCalculate(leviOperand).divide(polishCalculate(desniOperand)); else if (operator.equals("-")) return polishCalculate(leviOperand).subtract(polishCalculate(desniOperand)); else if (operator.equals("+")) return polishCalculate(leviOperand).add(polishCalculate(desniOperand)); } return BigDecimal.ZERO; } /** * Preveri ali je niz operator. * * @param str Niz * @return true, če je niz operator. */ private static boolean isOperator(String str) { if(str.matches("[*/+-]")) return true; return false; } /** * Najdi sredino izraza. * * @param strArray Izraz brez vodilnega operatorja * @param remaining Koliko operandov še rabimo * @param pos Trenutna pozicija * @return Pozicija sredine izraza */ private static int vrniSredino(String[] strArray, int remaining, int pos) { if (remaining == 0) return pos; else if(!isOperator(strArray[pos])) return vrniSredino(strArray, --remaining, ++pos); else return vrniSredino(strArray, ++remaining, ++pos); } }
Quack !
Zgodovina sprememb…
- spremenil: LeQuack ()
Spura ::
Dost kul resitev LeQuack.
Edina pripomba bi bla, da bi slo tudi brez tistih array kopiranj.
Edina pripomba bi bla, da bi slo tudi brez tistih array kopiranj.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Naloga iz Putka - UPMOddelek: Programiranje | 2223 (1559) | NejcSSD |
» | Pomoč pri programiranju z javoOddelek: Programiranje | 3572 (2499) | milc |
» | [C#]Računanje iz stringa?Oddelek: Programiranje | 1334 (1196) | jernejl |
» | [C] bitni operator (strani: 1 2 3 )Oddelek: Programiranje | 5568 (4401) | Thomas |
» | [C#] izračun enačbeOddelek: Programiranje | 1665 (1493) | delfy |