Entwickler-Ecke
Sonstiges (Delphi) - Array aus arrays auf diese Weise?
Bockscar - Mi 22.02.06 14:12
Titel: Array aus arrays auf diese Weise?
Folgendes Problem:
Delphi-Quelltext
1: 2: 3: 4: 5:
| a1: array[1..14] of integer=(1,37,40,73,97,99,111,112,133,143,148,149,151,153); a2: array[1..?] of integer=(x,y,z...); ...
overarray :array[1..36] of array = [a1,a2,a3,a4 ...] |
Wie kann ich diese Deklaration richtig machen?? Geht sowas überhaupt, oder müssen die arrays dafür eine einheitliche länge haben?
Ich brauche es für die folgende Funktion:
Ich versuche die Prozedur im folgenden zu erläutern, damit ihre Aufgabe verständlich wird.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure Tcroupier.check_win(number :integer); var win,lauf :integer; begin win := 0;
for lauf := 1 to length(overarray[number]) do begin case overarray[number][lauf] of 0..36 : win := win + 35*player1_bets[overarray[number][lauf]]; 37..96 : win := win + 18*player1_bets[overarray[number][lauf]]; 97..110 : win := win + 12*player1_bets[overarray[number][lauf]]; 111..132: win := win + 9*player1_bets[overarray[number][lauf]]; 133..142: win := win + 6*player1_bets[overarray[number][lauf]]; 143..148: win := win + 3*player1_bets[overarray[number][lauf]]; 149..154: win := win + 2*player1_bets[overarray[number][lauf]]; end; end; ...
end; |
Eine number wird an die funktion übergeben.
Die Forschleife läuft soviele Male wie overarray[number] elemente hat.
Also bei 1 als Nummer soll overarray[1] (also den array 'a1') nehmen und 14mal die forschleife durchlaufen (anzahl der elemente in a1!)
Ich hoffe mir kann jemand meine Frage beantwroten und danke im voraus!
gruß
AXMD - Mi 22.02.06 14:46
Delphi-Quelltext
1: 2:
| var x: Array[1..123] of Array[1..456] of TType; |
Meinst du sowas?
AXMD
BenBE - Mi 22.02.06 15:40
Jup, sowas ist möglich, wenn Du deine Sub-Arrays dynamisch deklarierst:
Delphi-Quelltext
1: 2:
| Var OberArray : Array[0..13] of Array of Integer; |
Allerdings geht dann keine Vorinitialisierung mehr.
Diese müsste dann etwa so aussehen:
Delphi-Quelltext
1: 2: 3: 4:
| SetLength(OberArray[0], 13); SetLength(OberArray[1], 37); SetLength(OberArray[2], 42); |
Bockscar - Fr 24.02.06 12:00
wenn ich dann folgendes schreibe:
bekomme ich die meldung
[Fehler] Unitcroupier.pas(111): Inkompatible Typen: 'Array' und 'dynamic array'
Und folgendes geht auch nicht:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| const a1: array[0..15] of integer=(1,37,40,73,97,99,111,112,133,143,148,149,151,153,9999,9999); ...
etc.
var overarray :array[1..36] of array[0..15] of integer;
...
constructor Tcroupier.create; begin overarray[1] := a1; end; |
AXMD - Fr 24.02.06 12:02
Bockscar hat folgendes geschrieben: |
wenn ich dann folgendes schreibe:
bekomme ich die meldung
[Fehler] Unitcroupier.pas(111): Inkompatible Typen: 'Array' und 'dynamic array' |
Es muss auch
overarray[1][1] := a1 lauten... und nebenbei: dynamische Arrays (sofern du solche verwendest) fangen immer beim Index 0 an.
AXMD
Bockscar - Fr 24.02.06 12:10
mmh ok klar. danke.
jetzt sagt er mir allerdings folgendes
[Fehler] Unitcroupier.pas(111): Inkompatible Typen: 'Integer' und 'Array'
bei overarray[1][1] := a1;
die deklaration steht oben. habe anstelle von dynamischen arrays einfach alle arrays gleichlang gemacht und den rest den man nicht braucht mit nem hohen integerwert gefüllt
Delphi-Quelltext
1:
| a1: array[1..16] of integer=(1,37,40,73,97,99,111,112,133,143,148,149,151,153,9999,9999); |
die array unterscheiden sich naemlcih nur in der laenge um 1-5.
AXMD - Fr 24.02.06 12:22
Ups, sorry, hab zu ungenau gelesen. Du kannst nicht ein Array direkt zuweisen. Das musst du (leider) mit einer for-Schleife machen.
AXMD
BenBE - Fr 24.02.06 12:43
Im Zusammenhang mit dynamischen Arrays zur Speicherung möchte ich deine Aufmerksamkeit noch einmal ganz freundlich auf meinen Beitrag weiter oben lenken. Mit diesem Hinweis bekommst Du für die Initialisierung deiner dynamischen Arrays den nötigen Speicher zugewiesen und müsstest danach nur noch die eigentlichen Werte zuzuweisen.
@AXMD: Es gibt noch eine weitere Möglichkeit, die Werte schnell zuzuweisen, die ist aber nicht Anfängertauglich ;-)
Übrigens kann man auch das so erzeugte dynamische Array ohne großen Aufwand initalisieren:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| const DataArray: Array[0..???] of Integer = () DynLengths: Array[0..13] of Integer = (13, 37, 42, ); var X, Y, Z: Integer;
Z := 0; for X := Low(DynLengths) TO High(DynLengths) Do Begin SetLength(OberArray[X], DynLengths(X]); For Y := 0 To DynLengths(X] - 1 Do OberArray[X][Y] := DataArray[Z+Y]; Z := Z + DynLengths(X]; end; |
Syntaxfehler zur Übung einbegriffen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!