Einzelnen Beitrag anzeigen

Feechan

Registriert seit: 15. Feb 2005
17 Beiträge
 
#1

Rechner - "Undefinierter Bezeichner TFolge"

  Alt 9. Mai 2005, 12:53
Hallo!
Ich sitz schon wieder mal länger an einem Programm, das so funktionieren soll:
Eine Tokenfolge namens "TFolge" wird angeliefert, und dann verarbeitet. Ich bekomme immer wieder den Fehler "Undefinierter Bezeichner TFolge"
Woran liegt das? Hier ist der Quelltext von Unit2 und Unit3, vielleicht könnt ihr mir helfen!

Unit2:

Delphi-Quellcode:
unit zScanclss;

interface

type tTokenfolge=array[1..100] of string;
type tOperatormenge = set of '*'..'/'; //Menge von Zeichen (=char) von .. bis
                                       // bezogen auf den ASCII-Code
type tZuweisungsScanner = class
    private
      Tokenfolge: tTokenfolge;
      index : integer; // Aktueller Tokenfolgenindex
      Operatormenge: tOperatormenge;
    public
      constructor create;
      function isOperator(c: char): boolean;
      procedure makeTokenfolge(quelle : string);
      procedure getTokenfolge(Var TFolge: tTokenfolge);
      function maxindex:integer;
end;

implementation

constructor tZuweisungsScanner.create;
begin
 Operatormenge := ['*','+','-','/'];
 index:=0; // Noch kein Token ermittelt.
end;

function tZuweisungsScanner.isOperator(c: char): boolean;
begin
  result := (c in Operatormenge); // Ist c in der Menge enthalten?
end;

procedure tZuweisungsScanner.makeTokenfolge(quelle : string);
var i : integer;
    tok : string;
begin
// 1.Variable bauen und einschreiben
i:=1;
tok:='';
while quelle[i]<>':do
 begin
   tok:=tok+quelle[i];
   inc(i);
 end;

inc(index);
tokenfolge[index]:=tok;

// ':=' bauen und einschreiben
inc(index);
tokenfolge[index]:=quelle[i]+quelle[i+1];
inc(i); inc(i);

// Restschleife
while (i<length(quelle)) do
 begin
   // Falls Quellenende noch nicht erreicht, Variable bauen und einschreiben
   tok:='';
   while (i<length(quelle))and (not isOperator(quelle[i]))do
    begin
      tok:=tok+quelle[i];
      inc(i)
    end;

   inc(index);
   tokenfolge[index]:=tok;

   //Falls Quellenende noch nicht erreicht, Operator einschreiben
   if i<length(quelle)then
    begin
      inc(index);
      tokenfolge[index]:=quelle[i];
      inc(i);
    end;
 end; (* of Restschleife *)

// ';' einschreiben
inc(index);
tokenfolge[index]:=quelle[i];

end;

procedure tZuweisungsScanner.getTokenfolge(Var TFolge: tTokenfolge);
begin
 TFolge:= tokenfolge;
end;

function tZuweisungsScanner.maxindex: integer;
begin
result:=index;
end;

end.
Unit3:

Delphi-Quellcode:
unit Unit3;

interface

uses zscanclss;
(*Voraussetzung:
  1. Nur drei Variablen möglich
  2. Keine Zahlen in der Wertzuweisung
  3. Nur die Operationen '+' und '-' möglich,
      eventuell mehrfach
  4. Zahlenwerte für die Variablen sind 3 Editfeldern zu
      entnehmen. Dies macht aber der Anwender!
*)

type trechner=class

private
   Wert1, Wert2, Wert3 :integer; //Gibt uns der Anwender!

public
   procedure setWerte(a,b,c :integer); //Reiherfolge wie bei den Editfeldern!
   procedure berechne(a,b,c:integer);
end;

implementation

{ trechner }


procedure trechner.berechne(a, b, c: integer);
var i,hilf,zwischen:integer;
var name1,name2,name3:string;
begin
i:=4;
zwischen:=Wert1;
name1:=TFolge[3];
name2:='0';
name3:='0';
while TFolge[i]<>';do begin
if Tfolge[i]='+then begin
if tfolge[i+1]=name1 then zwischen:=zwischen+wert1
else if tfolge[i+1]<> name1 then begin
name2:=tfolge[i+1];
zwischen:=zwischen+wert2;
end
else if (tfolge[i+1]<>name1) and (tfolge[i+1]<>name2)
then begin
name3:=tfolge[i+1];
zwischen:=zwischen+wert3;
end;
inc(i);
inc(i);
end;
end;
end;

procedure trechner.setWerte(a, b, c: integer);
begin
wert1:=a;
wert2:=b;
wert3:=c;
end;

end.
Der Fehler tritt beim Starten auf und liegt wohl an Unit3, hab aber keine Ahnung, woran!
Bitte helft mir!
  Mit Zitat antworten Zitat