Alles klar, hier kommt natürlich mehr:
Code: Alles auswählen
var
funktionen:array of array of string;
anfang:integer=1;
aktuell:integer=0;
positionb:longint=0;
fehler:string;
schritt:integer=0;
Es geht um die SImulation einer Turingmaschine. In der Tabelle funktionen sind Überführungsfunktionen der Turingmaschine (als String in Form ZxGx{L,N,R}) gespeichert wobei die Spalten den ausgelesenen Wert aus dem Alphabet angeben und die Zeilen die Nummer der Funktion.
Wird auf einen Button geklickt wird das Programm ausgeführt:
Der Wert Anfang wird aus einer Liste ausgewählt und gibt die Startfunktion, also die Zeile des Arrays, wird durch eine Funktion auf eine andere geleitet wird der Wert für aktuell, sozusagen die aktuell laufende funktion verändert.
Ich poste hier einmal die Prozedure Rechne, zugegebenermaßen nicht sehr ellegant:
Code: Alles auswählen
procedure rechne;
var lese:string;
lesepos:integer;
command:string;
begin
with form1 do begin
inc(schritt);
lese := band[positionb];
lesepos := gibpos(lese);
if ( (lesepos = endez) and (aktuell=ende) ) then begin
fehler := 'Ende : Das Programm ist bis zum Endzustand durchgelaufen.';
exit;
end;
//showmessage(inttostr(aktuell)+'+'+inttostr(lesepos));
command := funktionen[aktuell-1,lesepos]; // in dieser Zeile passiert der Fehler
//showmessage ((command));
band[positionb]:=gibschreibe(command);
positionb := positionb + gibrichtung(command);
if positionb < 0 then fehler := 'Fehler: Das Programm läuft über das linke Bandende hinaus!';
aktuell := gibzustand(command);
end;
end;
Ich hoffe das reicht an Informationen. Ich danke dir aber schonmal für deine Antwort, Alexander.