Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.530 Beiträge
 
Delphi 12 Athens
 
#2

Re: "Lego Logo für Arme" - Brauche Hilfe

  Alt 20. Okt 2008, 18:49
Der Einfachheit halber lasse ich mal nur ganze Zahlen als Weg bzw. Winkel zu. Das läßt sich aber leicht erweitern.

Delphi-Quellcode:
procedure TForm1.Execute(var S: string);

  function GetZahl(var S: string): Integer;
  var
    neg: Boolean;
  begin
    Result := 0;
    neg := false;
    if S[1] in ['-', '+'] then begin
      neg := S[1] = '-';
      Delete(S, 1, 1);
    end;
    while (Length(S) > 0) and (S[1] in ['0'..'9']) do begin
      result := 10*result + Ord(S[1]) - Ord('0');
      Delete(S, 1, 1);
    end;
    if neg then
      result := -result;
  end;

var
  I: Integer;
  N: Integer;
  save: string;
begin
  while Length(S) > 0 do begin
    case UpCase(S[1]) of
      'W': begin
        Delete(S, 1, 1);
        N := GetZahl(S);
        Assert(S[1] = '(', '''('' expected');
        Delete(S, 1, 1);
        save := S;
        for I := 1 to N - 1 do begin
          S := save;
          Execute(S);
        end;
      end;
      'V': begin
        Delete(S, 1, 1);
        Gehe(GetZahl(S));
      end;
      'R': begin
        Delete(S, 1, 1);
        Drehe(GetZahl(S));
      end;
      ')': begin
        Delete(S, 1, 1);
        Break;
      end;
    else
      raise Exception.Create('ungültiges Zeichen');
    end;
  end;
end;

// Aufruf
var
  S: String;
begin
  S := Trim(Edit1.Text);
  Execute(S);
  Assert(S = '', 'Befehle nicht vollständig abgearbeitet');
end;
Uwe Raabe
  Mit Zitat antworten Zitat