AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Arrays mit drei Dimensionen... nicht einfach -.-
Thema durchsuchen
Ansicht
Themen-Optionen

Arrays mit drei Dimensionen... nicht einfach -.-

Ein Thema von ArchaicSeraphim · begonnen am 13. Nov 2007 · letzter Beitrag vom 17. Nov 2007
Antwort Antwort
Seite 3 von 4     123 4      
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#21

Re: Arrays mit drei Dimensionen... nicht einfach -.-

  Alt 13. Nov 2007, 20:19
Keller[<Index>].Kellerzustand
Markus Kinzler
  Mit Zitat antworten Zitat
ArchaicSeraphim

Registriert seit: 11. Nov 2007
Ort: Niedernhausen
31 Beiträge
 
Delphi 7 Personal
 
#22

Re: Arrays mit drei Dimensionen... nicht einfach -.-

  Alt 13. Nov 2007, 20:23
Records sind aber nicht dynamisch oder? Ich müsste dann ja dynamisch Cards anlegen, stimmt das? Kann man das auch umgehen?

mkinzler, kannst du das Keller[<Index>].Kellerzustand auch mal erklären, pls? Ich bin halt schwer von Begriff...
In diesem Sinne,

Arc
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#23

Re: Arrays mit drei Dimensionen... nicht einfach -.-

  Alt 13. Nov 2007, 20:30
Delphi-Quellcode:
var
    Kellerelemente: array of TKeller;
   zustand: Integer;
...
  //Zustand des Rootelements
  zustand := Kellerelemente[0].Kellerzustand;
Records sind nicht dynamisch
Markus Kinzler
  Mit Zitat antworten Zitat
ArchaicSeraphim

Registriert seit: 11. Nov 2007
Ort: Niedernhausen
31 Beiträge
 
Delphi 7 Personal
 
#24

Re: Arrays mit drei Dimensionen... nicht einfach -.-

  Alt 13. Nov 2007, 20:40
Wieso machst du das array variabel? Die Automatentabelle beschreibt doch das "Verhalten" des Automaten, also sollte sie fest sein. Da will ich ja quasi eintragen was bei Eingabe X und Zustand Y und Kellerzustand Z für ein neuer Zustand Y' und Kelleroperation k rauskommt.

Sorry, das ich euch so nerve. -.- Ich bin halt langsam... ;]
In diesem Sinne,

Arc
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#25

Re: Arrays mit drei Dimensionen... nicht einfach -.-

  Alt 13. Nov 2007, 20:49
Also du hast einen Stack und eine definierte Anzahl von Zuständen und für jeden Zustand verschiedene Eingabekombinationen (2 Parameter) und daraus resultierende Aktionen auf dem Stack und Folgezustände?
Markus Kinzler
  Mit Zitat antworten Zitat
ArchaicSeraphim

Registriert seit: 11. Nov 2007
Ort: Niedernhausen
31 Beiträge
 
Delphi 7 Personal
 
#26

Re: Arrays mit drei Dimensionen... nicht einfach -.-

  Alt 13. Nov 2007, 20:51
Ganz genau so schaut's aus!

€dit: Leute, sorry, ich geh' jetzt mal pennen, ich muss den morgigen Tag noch überstehen xD Bis denne! ^^
In diesem Sinne,

Arc
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#27

Re: Arrays mit drei Dimensionen... nicht einfach -.-

  Alt 13. Nov 2007, 21:06
Dann sollten wir die Struktur etwas ändern. Zuerst würde ich den Array durch eine Liste oder besser durch eine fertige Stack-Klasse ersetzten

Delphi-Quellcode:
unit Stack;

interface

uses
  SysUtils, Classes;

type
  TStack = class
  private
    FList: PPointerList;
    FCapacity, FCount: Cardinal;
    procedure Grow;
  public
    destructor Destroy; override;
    procedure Push( const Data: Pointer );
    function Pop: Pointer;
  end;

implementation

{ TStack }

destructor TStack.Destroy;
begin
  FreeMem( FList );
  inherited;
end;

procedure TStack.Grow;
begin
  if FCapacity > 64 then
    Inc( FCapacity, FCapacity div 4 )
  else
    if FCapacity > 8 then
      Inc( FCapacity, 16 )
    else
      Inc( FCapacity, 4 );
  ReallocMem( FList, FCapacity * SizeOf( Pointer ) );
end;

function TStack.Pop: Pointer;
begin
  if FCount > 0 then
  begin
    Dec( FCount );
    Result := FList^[FCount];
  end
  else
    Result := nil;
end;

procedure TStack.Push(const Data: Pointer);
begin
  if FCapacity = FCount then
    Grow;
  FList^[FCount] := Data;
  Inc( FCount );
end;

end.
Deklaration von Konstanten für die Operationen:

Delphi-Quellcode:
const
    action_push=0;
    action_pop=1;
Record für Zustände:

Delphi-Quellcode:
TZustaende = Record
   Name: string;
   Input1: char;
   Input2: Integer;
   Folgezustand: String;
   Operation: byte;
end;
Du Zustaende würde ich auch in einer Liste verwalten
Markus Kinzler
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#28

Re: Arrays mit drei Dimensionen... nicht einfach -.-

  Alt 14. Nov 2007, 06:47
ArchaicSeraphim, ich glaube, Du vermischt hier zwei Dinge:

Zum einen benötigst Du vermutlich einen Stack (Keller), und zum Anderen eine Zustandsübergangstabelle. Der Keller hat aber mit der Übergangstabelle nichts zu tun.

Für die Übergänge (Y',Z') bei Eingabezeichen X, Zustand Y und Kellerzustand Z) verwendest Du ein statisches 3D-'Array of TÜebergang', so etwa:
Delphi-Quellcode:
Type
  TEingabezeichenklasse = (ezA, ezB, ezIllegal); // Dein Alphabet
  TZustand = (zsNeutral, zsMehrAalsB, zsMehrBalsA, zsFehler); // Deine DEA-Knoten
  TKellerZustand = (kzA, kzB); // Deine Kellerzustände, kann aber Quark sein

  TUebergang = Record
    ZustandNeu : TZustand;
    KellerzustandNeu : TKellerZustand;
  End;

  TZustandsuebergangstabelle = Array [TEingabezeichenklasse,TZustand, TKellerZustand] Of TUebergang;
Sei nun ZT so eine Tabelle, e das Eingabezeichen, z der aktuelle Zustand und k der aktuelle Kellerzustand, dann findest Du den nächsten Zustand so:
Delphi-Quellcode:
Var
  ZT : TZustandsuebergangstabelle;
  e : TEingabezeichenklasse;
  z : TZustand;
  k : TKellerzustand;

Begin
 ...
 DerNeueZustand := ZT[e,z,k].ZustandNeu;
 DerNeueKellerzustand := ZT[e,z,k].KellerzustandNeu;
...
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
mr_emre_d
(Gast)

n/a Beiträge
 
#29

Re: Arrays mit drei Dimensionen... nicht einfach -.-

  Alt 14. Nov 2007, 13:35
edit: hehe, mein beitrag war fehl am platz...
  Mit Zitat antworten Zitat
ArchaicSeraphim

Registriert seit: 11. Nov 2007
Ort: Niedernhausen
31 Beiträge
 
Delphi 7 Personal
 
#30

Re: Arrays mit drei Dimensionen... nicht einfach -.-

  Alt 14. Nov 2007, 16:31
Hoi Leutz,

Sorry, mkinzler, aber dein Modell trifft leider nicht ganz das, was ich brauche, denn das ist ja der Stack/Keller, den ich schon programmiert habe. Ich brauche ja noch den Automaten, der einen Stack benutzt.

Dein Ansatz gefällt mir, alzaimar. Aber was soll das mit TUebergangstabelle = array [TEingabe,TZustand,TKellerZustand] of TUebergang; ? Ist das eine Variable?

Vielen Dank schon mal, viel Hilfe von euch hilft mir, Leute! Weiter so, pls!
In diesem Sinne,

Arc
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz