Thema: Delphi Termbaum

Einzelnen Beitrag anzeigen

Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Termbaum

  Alt 31. Mai 2004, 01:19
Für die Klammern sind zweierlei Dinge nötig:

1) Die Funktion "pos0" muss erweitert werden, so dass sie nur noch Zeichen findet, die NICHT in Klammern stehen. Das sieht dann so aus:
Delphi-Quellcode:
function pos0(const c: char; const s: string): integer;
var k, z: Integer; //z := number of brackets
begin
  z := 0;
  for k:=length(s) downto 1 do
  begin
    if s[k]='(then inc(z);
    if s[k]=')then dec(z);
    if (z=0) and (s[k]=c) then
    begin
      result := k; // hit
      exit;
    end;
  end;
  result := 0; // nothing found
end;
Bei einer offenen Klammer wird z erhöht, bei einer geschlossenen erniedrigt. Erst wenn z=0 und das richtige Zeichen ("c") gefunden wurde, DANN ist der Rückgabewert >0 => Das geforderte Zeichen wurde am Index "result" im String gefunden, und steht nicht in Klammern.

2) In der Prozedur "TTR" must du noch auf Klammern prüfen, und bei Fund dann den Term zwischen den Klammern wieder in TTR schmeissen.
Delphi-Quellcode:
// Letzter Abschnitt von obigem Quellcode mit Klammererweiterung
.
.
.
 if pos0('^',s)>0 then
  begin
    currentND := TRNode.Create(opPow);
    TTR(starting(s,'^'), currentND.subNodes[0]);
    TTR(ending(s,'^'), currentND.subNodes[1]);
    exit;
  end else
//// Der Teil für die Klammern beginnt hier...
  if (s>'') and (s[1]='(') then
  begin
    s:=copy(s,2,length(s)-2);
    TTR(s, currentND);
    exit;
  end else
//// ...und endet hier :)
  //// Keinen Operator im String gefunden, also muss eine Zahl vorliegen. Knoten mit Zahl erstellen
  //// und Ende der Rekursion (kein erneuter Aufruf von TTR)
  begin
    currentND := TRNode.Create(StrToFloat(s));
    exit;
  end;
end;
3) Hast du nen Glück, dass das z.Zt. mein aktivstes Freizeitprojekt ist, und deshalb da noch so drin stecke

4) Viel Erfolg, und gewöhn dich nicht zu sehr an (halb-) fertige Quelltexte. War mehr nen Wilkommensservice (Und weil ich so stolz bin, dass das Teil endlich läuft *g*) Sonst ist das eher weniger Gang und Gebe.

5) Viele Grüße, dizzy
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat