Auswertung von Ausdrücken! < Algor.+Datenstr. < Theoretische Inform. < Hochschule < Informatik < Vorhilfe
|
Status: |
(Frage) überfällig | Datum: | 22:24 Do 26.06.2008 | Autor: | mmlug |
Aufgabe | gegeben sind postfix-->(*(-2 4) (+ 2 2))->in präfix(2-4)*(2+2)
in Stack Auswerten. |
Guten Abend,
gegeben sind postfix-->(*(-2 4) (+ 2 2))->in präfix(2-4)*(2+2)
in Stack Auswerten.
(* -) ( 4 2) -->(2)(*)-->(2 2 2)(+ *) -->(4 2) (*)->erg(8)
oder
(* -) (4 2)->(-2)(*)->(-2 2 2)(+ *)-->(4 -2)(* )--> erg(-8)
welche von beiden ist richtig, d.h muss mann 4 - 2 rechen oder 2 - 4 ?
kann jemand mir ausführlich erklären, wie ich Stack auswertung durchführen kann.
Ich danke dir im Voraus,
mmlug
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 15:59 Fr 27.06.2008 | Autor: | xenos |
Ich kann dir nicht direkt formal helfen, da ich nicht genau nachvollziehen kann, welche Notationsvereinbarung du für die Umwandlung benutzt. Was ich dir aber mit Sicherheit sagen kann, ist:
Wenn du (* (-_2 4) (+ 2 2)) meinst (an Stelle der roten Unterstriches ein Leerzeichen, das hattest du vergessen), dann ist das Ergebnis -8 (siehe unten), ansonsten wäre der Ausdruck falsch geklammert und herrlich sinnlos.
Wie wandelt man die Präfixnotation nun in Infix um?
Da du mit den Bezeichnungen wohl durcheinander gekommen bist, kurz nochmal:
Seien a,b Variablen und # ein Operator, dann ist
Präfix: (# a b)
Infix: (a # b)
Postfix: (a b #)
Die Schreibweisen sind gleichwertig.
Im vorliegenden Fall kann man den verschachtelten Ausdruck umwandeln, indem man ihn einfach in Teilausdrücke zerlegt:
A = (- 2 4)
B = (+ 2 2)
Dann hat der Gesamtausdruck die Struktur (* A B) --> (A' * B')
Nun macht man dies mit den Teilausdrücken:
A = (- a b) --> A' = (a - b) mit a = 2 und b = 4
B = (+ c d) --> B' = (c + d) mit c = 2 und d = 2
Nun kann man die Infixnotation komplett einsetzen:
((2-4)*(2+2))
Damit ist die Umwandlung komplett.
Wenn du den Ausdruck ausrechnest kommst du auf -8.
Achtung: das Ausrechnen ist syntaktischer Zucker, gehört aber nicht zum Umwandeln und ist auch nicht immer erwünscht.
Was du mit Auswerten im Stack meinst, ist mir nicht klar. Suchst du nach einem Pseudo-Assembler Programm, welches den Ausdruck mithilfe des Stacks auswertet?
|
|
|
|
|
Status: |
(Frage) überfällig | Datum: | 16:15 Mo 07.07.2008 | Autor: | mmlug |
Auswertung von Ausdrücken miene ich.. auf dem papier wie die Stack arbeitet Step-by-Step auf schrieben und dabei zwischen ergebnisse notieren...
sorry. habe kiene scanner.. daher mit Mobile Camera..
[URL=http://img232.imageshack.us/my.php?image=stackxw6.jpg][IMG]http://img232.imageshack.us/img232/1794/stackxw6.th.jpg[/IMG][/URL]
Jetzt erkennen ich .. zuerst welche Notationvereinbarung - geben muss.
Präfix-->(*(- 2 4) (+ 2 2)
1. step--> 4-2 = 2
|4| |-| | | | |
|2| |*| --> |2| |*|-> u.s.w -> ergebnis -> 8
Oder..
Präfix(*(- 2 4) (+ 2 2)
1.step-> 2-4 = -2
|4| |-| | | | |
|2| |*| --> |-2| |*|-> u.s.w -> ergebnis -> - 8 (minus 8)
welche ich richtig?
-----------------------------------------------------------
((4/2) + (6/(4-2))) in postfix notation um und werten Sie ihn mit einme Stack aus. Notieren Sie die Zwischenergebnisse.
Also: In Postfix --> 4 2 / 6 4 2 - / +
| | |2| | |
| | |4| |2|
|2| |6| |6| |3|
|4| /|2|-|2|/|2|+|5|<--- ergbenis ist 5
oder??
Also: In Postfix --> 4 2 / 6 4 2 - / +
1. step --> 2 / 4 = 0.5 ??
| | |2 | | |
| | |4 | |2|
|2| |6 | |6| |3|
|4| /|0.5|-|2|/|2|+|5|<--- ergbenis ist 5
ich habe keine leuten die ich mir fragen kann.
ich danke dir im voruas,
grüße
koko
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 16:21 Mi 09.07.2008 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 23:20 Sa 28.06.2008 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|