Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - HILFE: Kellerautomat - Wie geht record?


ArchaicSeraphim - Do 15.11.07 19:11
Titel: HILFE: Kellerautomat - Wie geht record?
Hallo Leute!
Mein erster Thread, wow. Und schon hab' ich 'ne Frage: Wie genau funktioniert "record"? Ich habe mal versucht, das anzuwenden, aber es ist voll fehlgeschlagen. Aber seht selbst (Anhang).
Ich habe mir zuerst einmal einen Keller gebastelt (Kellerunit). Dann habe ich versucht einen Automaten zu bauen, der den Keller als Stack benutzen kann. Problem: Geht nicht. Warum weiß ich nicht. Ich bin alles x mal durchgegangen...
Bitte helft mir!
Danke schon mal im vorraus,

ArchaicSeraphim


Christian S. - Do 15.11.07 19:23

Hallo und :welcome:!

Bitte beschreibe doch etwas genauer, was nicht funktioniert. Kommen Fehlermeldungen beim Kompilieren (wenn ja, welche?), funktioniert etwas währen der Ausführung nicht?

Es ist außerdem besser, wenn Du Deinen Quellcode bzw. die relevanten Stellen davon im Beitrag postest, damit man sich nicht erst was herunterladen muss.

Grüße
Christian


ArchaicSeraphim - Do 15.11.07 19:31

Ups, sorry. Also Folgendes:

Relevanter Teil der Unit "Automat":


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
unit Automat;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Keller;

type
  TAutomat = class
    constructor create;
    function proof(input:char):boolean;
  end;
  TEingabe = (eA,eB,eI);
  TZustand = (zS,zA,zB,zF);
  TKellerZustand = (s,m);
  TUebergang = record
    NZustand:TZustand;
    Kellerops:integer;
  end;
  TUebergangstabelle = array [TEingabe,TZustand,TKellerzustand] of TUebergang;


const
  UeT : TUebergangstabelle = (
        (((zA),(1)),((zB),(1)),((zF),(0))),             // Keller: s   zS    @@@siehe Fehler!@@@
        (((zF),(0)),((zF),(0)),(zF,(0))),               //         s   zA
        (((zF),(0)),((zF),(0)),(zF,(0))),               //         s   zB
        (((zF),(0)),((zF),(0)),(zF,(0))),               //         s   zF
        (((zF),(0)),((zF),(0)),(zF,(0))),               //         m   zS
        (((zA),(1)),((zA),(-1)),(zF,(0))),              //         m   zA
        (((zB),(-1)),((zB),(1)),(zF,(0))),              //         m   zB
        (((zF),(0)),((zF),(0)),(zF,(0))),               //         m   zF
        );

var
  e : TEingabe;
  z : TZustand;
  k : TKellerzustand;
  AKeller : TKeller;
  AUebergang : TUebergang;

implementation
//... usw


Fehlermedlungen beim compilen: viele, aber die wichtigsten:

[Fehler] Automat.pas(26): Undefinierter Bezeichner: 'zA'
[Fehler] Automat.pas(26): '=' erwartet, aber ')' gefunden

Zeile 26 ist im Quelltext mit comment gekennzeichnet. Reicht das erstmal?


mkinzler - Do 15.11.07 20:23

Vielleicht solltest du hier auch auf den Beitrag in der DP verweisen, aus der der Code stammt.
Dann solltest du die Reihenfolge, Eingabe, Zustand einhalten und dann Werte aus den Wertemengen nehmen.


ArchaicSeraphim - Do 15.11.07 20:28

Hoi mkinzler!
Schön dich auch mal wieder zu treffen :wink:.
Irgendwie ist mein Beitrag dort (in der DP) in die Bedeutungslosigkeit abgedriftet, deshalb versuche ich hier mal mein Glück.

Der Beitrag [http://www.delphipraxis.net/topic122714,30.html].

Aber die anderen Kritikpunkte verstehe ich nicht ganz, ich halte doch alles ein. Kannst du mir ein Beispiel geben, wo ich das nicht getan habe?

Greetz ;)


alzaimar - Do 15.11.07 22:51

Du hast Dich mit deiner Aufgabenstellung übernommen, aber egal. Vielleicht schaffst Du es ja trotzdem.

Du deklarierst deine TÜebergangstabelle als Array [...] Of TEinRecord;

Der 'TEinRecord' besteht aus DREI Elementen. Wieviele Elemente weisst Du jedem der TUebergangstabelle-Einträge zu? Zähl mal.


ArchaicSeraphim - Do 15.11.07 23:58

TUebergang ist der Record. Und der besteht nur aus NZustand:TZustand und Kellerops:integer oder?

€dit: sorry das ich so spät antworte, war mal kurz weg.

€dit2: Hab's jetzt auch ohne eure Hilfe geschafft ;P. Ich war wirklich blöd. Hab' jetzt zwei Tabellen.