Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Record ducheinander würfeln mit Hilfe von Array


bocky3 - So 04.09.05 13:40
Titel: Record ducheinander würfeln mit Hilfe von Array
hi allerseits.
ich hab nen record und nen array. mit hilfe des arrayssoll der record nen durheinander gewürfelt werden.


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:
type Tklasse = record  drache : string[20];
                  mensch : string[20];
                  untoter : string[20];
                  zwerg : string[20];
                  daemon : string[20];
                  elf : string[20];
                  ork : string[20];
               end;

var
  Form1: TForm1;
  k: Array[1..7of Integer;
  x : integer;
  klasse : Tklasse;

...

procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
begin
for i := 1 to max do
  begin
  klasse.drache := (edit1.text);
  end;

procedure TForm1.Button2Click(Sender: TObject);
var z,j :integer;
label jump;
begin
randomize;
for x := 1 to 7 do
   begin
    jump:
    z:=random(7)+1;
    for j:=1 to x-1 do if z = k[j] then goto jump;
    k[x]:=z;
   end;
for x := 1 to max do
  begin
  edit2.text := (klasse.drache);
  listbox1.items.add(IntToStr(k[x]));
  end;


wie ihr seht hab ich nen record mit 7 kategorien und nen zufalsgenerator, der die zahlen von 1 bis 7 erzeugt und sicherstellt diese nicht doppelt auszugeben.
in der listbox werden diese zahlen angezeigt.
drache wird aus edit1.text gelesen (nur als beispiel, ist beliebig fortzusetzen). bei den übrigen klasse will ich das auch so machen, sodass zum schluss alles in der listbox durcheinander steht.

mfg bocky

Moderiert von user profile iconraziel: Topic aus Datenbanken verschoben am So 04.09.2005 um 20:13
Moderiert von user profile iconKlabautermann: Topic aus Sonstiges verschoben am Mo 05.09.2005 um 11:37


jasocul - So 04.09.05 20:04

Und was ist jetzt deine Frage? :gruebel:
Versuche doch mal zu formulieren, was du eigentlich wissen willst.
btw: Was hat das mit Datenbanken zu tun?


bocky3 - So 04.09.05 20:53

ich war mir nich so wirlich sicher ob es zu datenbanken gehört. :oops:

mich würde es interessieren ob man die unterkategorien des records "sortieren bzw untereinander vermischen" kann und ob das mit einer simplen würfelprozedur möglich ist.
bsp.:
klasse.drache
klasse.mensch
klasse.untoter
klasse.elf

soll zu

klasse.untoter
klasse.drache
klasse.elf
klasse.mensch

werden

die einzelnen klassen sollen ihren wert noch von dem jeweiligen editfenstern bekommen.

es ist ähnich als wenn man einen kartenstapel hat die 4 farben trennt und dann mischt.


Amateur - So 04.09.05 21:08

nur ma so: was soll das überhaupt bringen? die werte bleiben gleich und die typen auch... irgendwie versteh ich dein problem überhaupt net...


adfontes - So 04.09.05 21:14

user profile iconAmateur hat folgendes geschrieben:
nur ma so: was soll das überhaupt bringen? die werte bleiben gleich und die typen auch... irgendwie versteh ich dein problem überhaupt net...

user profile iconjasocul hat folgendes geschrieben:
btw: Was hat das mit Datenbanken zu tun?



.... :gruebel: :gruebel: ....
irgendwie blick ich da auch nicht wirklich durch
.... :gruebel: :gruebel: ....


bocky3 - So 04.09.05 21:16

genauso kann ich fragen was zahlensortien bringt oder erst zufallsszahlen zu würfeln.
oder was bringt es karten zu mischen? was das bringt ist eine andere reihenfolge. das ist e s was zählt.
wenn ihr ne andere idee anstelle eines records habt immer zu. bedingung ist nur das klassenweise ordnen. record ist da gut geeignet. und darum hab ich es damit versucht.


Amateur - So 04.09.05 21:28

versteh ich immernoch net.... tut mir wirklich leid.... ich blick net durch was du machen willst aber wenn es das is was ich denke dann dürfte es net so schwer sein.... aber wirklich blicken tu ich das alles net..

naja viell hat ja jemand anders nen geistesblitz


bocky3 - So 04.09.05 21:57

dann sagt doch einfach was ihr nich versteht.


delfiphan - So 04.09.05 22:07

user profile iconbocky3 hat folgendes geschrieben:

klasse.drache
klasse.mensch
klasse.untoter
klasse.elf

soll zu

klasse.untoter
klasse.drache
klasse.elf
klasse.mensch

werden

Die Definition eines records kannst du zur Laufzeit nicht ändern.


bocky3 - So 04.09.05 22:09

hm
also ist es nicht möglich einen record so umzugestalten?
gibt es denn ne ähnliche variante wie ein record, aber wo ich das eben kann?
(immerhin versteht mich zumindest einer :D )
thx erstmal


delfiphan - So 04.09.05 22:10

user profile iconbocky3 hat folgendes geschrieben:
ich will ihn ja nich neu definieren, nur etwas umsortieren

Wenn du es umsortieren könntest, hättest du ihn neu definiert. Die Definition bleibt fix. Man kann weder die Felder umbenennen noch umsortieren.


bocky3 - So 04.09.05 22:14

sry war grad dabei den beitrag zu ändern...


delfiphan - So 04.09.05 22:14

Du kannst jedoch die Inhalte umsortieren, falls das reicht...

Wenn du ein assoziatives Array wie in PHP willst, musst du's selbst programmieren oder indirekt über TStringList (o.ä) arbeiten.


bocky3 - So 04.09.05 22:18

das mit den inhalten is mir scho klar; die sollen aber später eventuell fixiert werden.
und wie kann ich so ein array machen? kenn mich mit php fast nich aus. :?


delfiphan - So 04.09.05 22:23

Wieso musst du die Reihenfolge der Felder umsortieren können? Kann dir doch ziemlich egal sein, in welcher Reihenfolge die Strings gespeichert sind.
Vor dem Sortieren sprichst du das Feld "Mensch" mit .Mensch an, und nach dem Umsortieren ebenfalls. Wo bleibt da der Sinn?


bocky3 - So 04.09.05 22:31

bube bleibt auch bube egal ob er nach ner dame oder nach ner 5 blatt kommt. verstehst du?
bei nem kartenspiel zählt die reihenfolge nich unbedingt der wert. das mit mensch, ork und co is mir nur so eingefallen.^^


delfiphan - So 04.09.05 22:44

... Speichere doch die Reihenfolge separat ab; bastle dir selbst eine Klasse, die das kann. Delphi hat keine solche Funktionalität eingebaut.

Wenn du eine konkrete Anwendung schildern würdest, könnte ich dir auch genau sagen, wie du es am gescheitesten Anstellen könntest.


Klabautermann - Mo 05.09.05 02:26

Hallo,

ich muss gestehen, ich habe den Sinn auch noch nicht wirklich verstanden, aber reicht es dir nicht einfach ein Record of Record zu erzeugen? Also so:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
type 
  tWesen = record
    Name : string[8];
    Wert : string[20];
  end;

  Tklasse = record  
    Wesen1 : tWesen;
    Wesen2 : tWesen;
    Wesen3 : tWesen;
    Wesen4 : tWesen;
    Wesen5 : tWesen;
    Wesen6 : tWesen;
    Wesen7 : tWesen;
  end;


Dann hast du die Bezeichnung mit in den Daten und kannst sie bequem mit sortieren.

Gruß
Klabautermann


jasocul - Mo 05.09.05 08:36

Es würde relativ einfach mit einem Array of record gehen.
dabei würdest du Klassen im Array speichern. Also erstes element ist "Drache", zweites ist "Elf" u.s.w.
Ein Array zu "würfeln" ist dann kein Problem mehr.


Klabautermann - Mo 05.09.05 11:37

Hi,
user profile iconjasocul hat folgendes geschrieben:
Es würde relativ einfach mit einem Array of record gehen.

ja, bei der Klassen struktur ist das natürlich noch einfacher.

Gruß
Klabautermann


bocky3 - Mo 05.09.05 19:28


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:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
unit Unit1;

interface

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

const max = 7;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button2: TButton;
    ListBox1: TListBox;
    Edit2: TEdit;
    Button3: TButton;
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;



type Tklasse = record  drache : string[20];    // rzeugen des types
                  mensch : string[20];
                  untoter : string[20];
                  zwerg : string[20];
                  daemon : string[20];
                  elf : string[20];
                  ork : string[20];
               end;




var
  Form1: TForm1;
  k: Array[1..7of Integer;
  x : integer;
  klasse : array[1..7of Tklasse;   // array mit dem record (habt ihr das gemeint? )
  
  implementation

{$R *.dfm}

procedure TForm1.Button3Click(Sender: TObject);
var i : integer;
begin
for i := 1 to max do
  begin
  klasse.drache := (edit1.text);      // Fehlermeldung nummer 1
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var z,j :integer;
label jump;
begin
randomize;
for x := 1 to max do
   begin
    jump:
    z:=random(7)+1;
    for j:=1 to x-1 do if z = k[j] then goto jump;
    k[x]:=z;

    edit2.text := (klasse.drache);    // Fehlermeldung nummer 2
    listbox1.items.add(IntToStr(k[x]));
   end;
end;


end.


wie kann ich die 2 arrays miteinander verbinden, sodass ich jedem type ne nummer zugewiesen hab und ihn so in der position verändern kann, soweit das möglich ist?


Klabautermann - Mo 05.09.05 20:09

Bitte mache für eine neue Frage ein neues Thema auf.

Gruß
Klabautermann


bocky3 - Mo 05.09.05 21:29

dachte mr, dassso was kommt.^^
kk, ich machne neuen thread.^^