AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Stack: Infix nach Postfix und push und pop

Ein Thema von Luckie · begonnen am 14. Mär 2010 · letzter Beitrag vom 20. Mär 2010
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#11

Re: Stack: Infix nach Postfix und push und pop

  Alt 14. Mär 2010, 11:17
Zu Infix2Postfix: Kann es sein, dass der Algorithmus nur für sehr spezielle Terme gedacht ist? Bei "(5 + 6)", "(1 + (2 * 3))" etc. würde er nämlich funktionieren. Für gewöhnliche Terme bleibt der Algo leider nicht so trivial .
/edit: Gut, da bin ich mit himitsu wohl einer Meinung .

Zu CalcPostfix: Schau dir das mal im Debugger an, da wird beim Leerzeichen eine 0 gepusht . Verschiebe push(x) in den "0-9"-Block, die beiden anderen kannst du gleich in push(pop + pop) bzw. push(pop * pop) umschreiben.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#12

Re: Stack: Infix nach Postfix und push und pop

  Alt 14. Mär 2010, 11:32
Zitat von himitsu:
Der Operator wird nur bei ) aus dem Stack geholt
Wer dnekt denn an so was? Als Beispieleingabe war gegeben: 5*(((9+8)*(4*6))+7).

Zitat:
dubnibel
Was? Was bedeutet dubnibel

Zitat:
PS: Du hast ein Speicherleck, da im Init ein Element in den Stack geschoben, aber nicht wieder rausgeholt wird.
Ups. Korrigiert.

@Khabarakh: Das habe ich auch gesehen. Aber ich habe jetzt den aktuellen Code von himitsu.

So funktioniert es jetzt wie es soll. Jetzt muss ich ihn nur noch verstehen. @himitsu: Könntest du zu deinem Code noch ein paar erklärende Worte verlieren?

Danke euch allen schon mal. Und keine Angst, das wird kein Rechner oder Matheparser. Das ist nur für ein weiteres Kapitel in meinem Listen Artikel.

PS: Als nächstes geht es um FIFO Stacks. Die werden dort als Schlangen bezeichnet. Wie nennt man die auf Englisch? Snakes? Klingt komisch. :grübel:
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.184 Beiträge
 
Delphi 12 Athens
 
#13

Re: Stack: Infix nach Postfix und push und pop

  Alt 14. Mär 2010, 11:46
ich schreib gleich noch was dazu

FIFO Stacks = Queue

FIFO Stacks (first in - first out) = Queue = oben drauflegen - unten rausziehen
FILO Stacks (first in - last out) = Stack = oben drauflegen - oben runternehmen

PS: http://www.delphipraxis.net/internal...t.php?t=167796 ist praktisch alles in einem
stack = z.B. push + pop oder shift + unshift
queue = z.B. push + unshift oder shift + pop

(ich weiß, so ist das irgendwie etwas vewirrend, wenn man nur auf die Namen schaut, aber von deren Funktion her sollte es klar sein)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#14

Re: Stack: Infix nach Postfix und push und pop

  Alt 14. Mär 2010, 11:55
Schön. Dank dir. Sind, was im Buch als Schlangen bezeichnet wird, im Original also queues. Ich hatte andauernd snake oder so im Kopf.

Lass dir Zeit. Ich gucke jetzt so wie so erst mal Formel 1 mit dem Schumi, der im falsch lackiertem Auto sitzt.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#15

Re: Stack: Infix nach Postfix und push und pop

  Alt 17. Mär 2010, 10:43
Zitat von himitsu:
ich schreib gleich noch was dazu
Kleine Erinnerung.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.184 Beiträge
 
Delphi 12 Athens
 
#16

Re: Stack: Infix nach Postfix und push und pop

  Alt 17. Mär 2010, 10:49
Zitat von Luckie:
Kleine Erinnerung.
*herzinfakt bekomm*

jaaa, ich nehm mir gleich mal ein minütchen.
(schon schlimm, wenn man morgen schon wegfährt und sich kurzfristig ergeben hat, daß ein Übernachtungstag wegfällt, man aber dennoch diese Nacht in 'ner fremden Stadt zubringen müßte ... hatte grade nur mal kurz zur Ablenkung etwas in der DP reingesehn)

[edit]
ach du sch***, das dubnibel war ja von mir.

*überleg* ... ich glaub es könnte/sollte "du noch" oder irgendwie sowas heißen


[add]
@Luckie: um welchen Teil geht es denn vorzugsweise?

Nicht daß ich hier jetzt anfang jede Zeile einzeln zu kommentieren.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#17

Re: Stack: Infix nach Postfix und push und pop

  Alt 18. Mär 2010, 18:40
Es geht eigentlich nur um deine beiden Funktionen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.184 Beiträge
 
Delphi 12 Athens
 
#18

Re: Stack: Infix nach Postfix und push und pop

  Alt 18. Mär 2010, 23:10
Dabei macht der Code doch eigentlich nichts Anderes?
Außer daß die Schittstellen der Ein- und Ausgabe umgestellt wurde.

Statt READ wird jetzt nacheinander ein Zeichen aus dem String genommen
und anstatt WRITE wird der Text an den Result-String angehängt.
OK, für ein nachfolgendes EOL wird nun vorher die aktuelle Zeichenpostition über LENGTH geprüft.

// dein Code aus Post #1
{} nachfolgend jeweils der entsprechende Befehl aus Pst #10

Delphi-Quellcode:
function Infix2Postfix(const S: String): String;
var
  i: Integer;
begin
  Result := '';
//Init;
{}init;
//repeat
{}i := 1;
{}while i <= Length(S) do begin
  //repeat read(c) until c <> ' ';
  {}if S[i] <> ' then begin
    //if c = ')' then write(chr(pop));
    {}if S[i] = ')then Result := Result + chr(pop);
    //if c = '+' then push(ord(c));
    {}if S[i] = '+then push(ord(S[i]));
    //if c = '*' then push(ord(c));
    {}if S[i] = '*then push(ord(S[i]));
    //while (c >='0') and (c<='9') do
    // begin write(c), read(c); end;
    {}if (S[i] >= '0') and (S[i] <= '9') then begin
    {}  Result := Result + S[i];
    {}  while (i < Length(S)) and (S[i + 1] >= '0') and (S[i + 1] <= '9') do begin
    {}    Result := Result + S[i];
    {}    Inc(i);
    {}  end;
    {}end;
    //if c <> '(' then write (' ');
    {}if (i <= Length(S)) and (S[i] <> '(') then Result := Result + ' ';
  {}end;
//until eoln;
{}  Inc(i);
{}end;
end;

function CalcPostfix(const S: String): String;
var
  i, x: Integer;
begin
  Result := '';
//Init;
{}init;
//repeat
{}i := 1;
{}while i <= Length(S) do begin
  //x := 0;
  //repeat read(c) until c <> ' ';
  {}if S[i] <> ' then begin
  {}  x := 0;
    //if c = '*' then x := pop*poop;
    {}if S[i] = '*then x := pop * pop;
    //if c = '+' then x := pop+pop;
    {}if S[i] = '+then x := pop + pop;
    //while (c >= '0') and (c <= '9') do
    //begin
    // x := 10*x+(ord(c)-ord('0'));
    // read(c);
    //end;
    {}if (S[i] >= '0') and (S[i] <= '9') then begin
    {}  x := ord(S[i]) - ord('0');
    {}  while (i < Length(S)) and (S[i + 1] >= '0') and (S[i + 1] <= '9') do begin
    {}    x := 10 * x + (ord(S[i]) - ord('0'));
    {}    Inc(i);
    {}  end;
    {}end;
    //push(x);
    {}push(x);
  {}end;
//until eoln;
{}  Inc(i);
{}end;
//writeln(pop);
{}Result := Result + IntToStr(pop);
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#19

Re: Stack: Infix nach Postfix und push und pop

  Alt 20. Mär 2010, 13:20
Ah, OK. Danke. jetzt muss ich mir nur noch mal die push und pop Routinmen angucken und verstehen. Dann kann ich endlich meinen Artikel fertig schreiben.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz