Ein Array-Element hinzufügen

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
EugenE
Beiträge: 440
Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:

Ein Array-Element hinzufügen

Beitrag von EugenE »

Hallo ich habe diese Funktion um einen neuen Wert in einem Array hinzuzufügen:

Code: Alles auswählen

type
  TMAI = array of Integer;


Code: Alles auswählen

function AddArrayElement(arr: TMAI; const zahl: Integer):TMAI;
var
   laenge: Integer;
begin
   laenge := length(arr);
   SetLength(arr, laenge + 1);
   arr[laenge+1] := zahl;
   Result:=arr;
end;


alle Array im Programm haben den typ TMAI , so wenn ich die funktion jez 4 mal durchlaufe werden ganz normal die werte eingetragen , beim 5ten mal bekomme ich eine meldung das ich eine heap.inc finden soll

was heißt das?
soll ich mit dem freepascal programmieren aufhören , weil ich nur fehler in allen programmen habe :'( oder was muss ich machen damit wenigstens das geht -.-*

iaby
Beiträge: 24
Registriert: Mi 25. Okt 2006, 19:48

Beitrag von iaby »

Also ich benutz immer:

Code: Alles auswählen

SetLength(MyArray, high(MyArray) + 2);
MyArray[high(MyArray)]:= MeineVariable;

EugenE
Beiträge: 440
Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:

Beitrag von EugenE »

hey aber warum " + 2 " ? warum nich " + 1 " ?

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

weil iaby high verwendet und du nicht.
high zählt von 0 und die andre funktion von 1...
ich sehe gerade: machst du keine prüfung bevor du +1 nimmst ?
wenn nicht:
if index +1 m:=+1
else
m:=0

arr[laenge+m] := zahl;

m ist von typ interger....
MFG
Michael Springwald

waran
Beiträge: 17
Registriert: Mo 25. Dez 2006, 06:59

Beitrag von waran »

Naja was deinen Fall betrifft würde ich vielleicht weniger zu einem dynamischen
Array tendieren. Das schreit praktisch nach einer verketteten Liste.

(Zumindest wenn ich dein Problem richtig verstanden habe)

EugenE
Beiträge: 440
Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:

Beitrag von EugenE »

Das ist so ich will ein kleines Kartenspiel proggen , und ich brauche die arrays damit ich weiß welcher spieler welche karten hat , da ich aber nicht weiß wieviele karten jeder spieler müssen die arrays dynamisch , oder habe ich einen denkfehler?^^

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Kannste schon mit nem dyn-Array machen für die Spieler. Aber vorher solltest Du ein Set definieren für die Spielkarten. Ich weiß ja nicht was für ein Spiel das wird, aber grundsätzlich kann man schonmal folgendes machen:

Code: Alles auswählen

type
  TPlayCardSet = (pc_2,pc_3,pc_4,pc_5,pc_6,pc_7,pc_9,pc_10,pc_Bube,pc_Dame,pc_Koenig,pc_As);
  TPlayCard = pc_2..pc_As;
  TPlayCards = Set of TPlayCardSet;
 
  TCardGameColorSet = (cg_karo, cg_herz,cg_pik,cg_kreuz);
  TCardGameColor = cg_karo..cg_kreuz;
  TCardGameColors = Set of TCardGameColorSet;


Set-Typen sind Cardinal, also abzählbar. Damit kann also auch eine Spielerhand durch ein Array dargestellt werden. Entsprechend können die Spielkarten im Array abgelegt werden. Das ist dann 2-dimensional. Je nach Spiel, können die Karten auch mehrfach vorkommen (Romme, Bridge). Das hängt dann von deinem Spiel ab, wie du das definieren willst.

Aber auf diese Weise ist es besonders einfach herauszukriegen welche Spielkarten der Spieler auf der Hand hat. So kannst du auch den Karten Images zuordnen usw...
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

Antworten