Autor Beitrag
Ironwulf
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 733
Erhaltene Danke: 2



BeitragVerfasst: So 16.04.06 17:20 
Hy,
erstmal der quelltext :)

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
Procedure Laden;
var bla: array[1..9of Boolean;
    i: Byte;
begin
  for i:= 1 to 9 Do bla[i]:= False;
  bla[5]:= True;
  for i:= 1 to 9 Do
  If bla[i] = True Then Form1.ListBox1.Items.Add('1'else Form1.ListBox1.Items.Add('0');
  mmh(bla);
end;

Procedure mmh(bla: array of Boolean);
var i: Byte;
begin
  for i:= 1 to 9 Do
  If bla[i] = True Then Form1.ListBox2.Items.Add('1'else Form1.ListBox2.Items.Add('0');
end;


so nun das problem in der Prozedur Laden setze ich den wert bla[5] auf True
dann geb ich den array an die prozedure mmh weiter aber dort wird der bla[4] auf True gesetz, woran kann das liegen? und wie änder ich das das dort auch bla[5] True ist?

das ganze mit den listboxen drum rum ist nur damit ich den fehler finde und ihr euch auch mal ein bild von machen könnt falls ich es etwas unglücklich formuliert habe
hoffe mir kann jemand helfen, danke
ich verwend d3 Pro falls es relevant ist
Ironwulf Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 733
Erhaltene Danke: 2



BeitragVerfasst: So 16.04.06 18:38 
mmh ich hab grad errinnerungen aus der schul vom vba unterricht ;D
da gabs doch son befehl das der array entweder bei 1 oder bei 0 los geht
das scheint ihr auch irgendwie der fall zu sein
da das erste "item" von dem array auf den 0. der prozedur weiter gibt usw, d.h. am ende fehölt mir ein eintrag und hab dafür halt noch nen [0]
gibts da in delphi auch nen behfehl der das von 0 auf 1 setzt? und kann ich das nur für die eine prozedur festlegen und nicht gleich fürs ganze programm?
fuser
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: Di 18.04.06 10:37 
Hallo Ironwulf

1. Möglichkeit: mit lo und high den Anfang und das Ende des Arrays errechnen.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
Procedure mmh(bla: array of Boolean);
var i: Byte;
begin
  for i:= low(bla) to high(bla) Do
  If bla[i] = True Then Form1.ListBox2.Items.Add('1'else Form1.ListBox2.Items.Add('0');
end;


2. Möglichkeit: Mit Records

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
type MyRec=Record
  bla: array[1..9of Boolean;
end;

Procedure mmh(M:MyRec);
var i: Byte;
begin
  for i:= 1 to 9 Do
  If M.bla[i] = True Then Form1.ListBox2.Items.Add('1'else Form1.ListBox2.Items.Add('0');
end;


Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt
Ironwulf Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 733
Erhaltene Danke: 2



BeitragVerfasst: Di 18.04.06 14:09 
ok danke :)
Allesquarks
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 510

Win XP Prof
Delphi 7 E
BeitragVerfasst: Di 18.04.06 18:16 
Ich würde mal behaupten, dass ein array[1..5] im der kompilation als Nullbasiertes benutzt wird, da die nullbasierten array dynamisch besser angesprochen werden können, dass heißt ein aufruf myarray[5] wird übersetzt zu address(myarray)+4*sizeof(myarraycell) oder falls dynamisch mit i einfach i-1 genommen wird. Theoretisch ist es ja nur eine teloskopische Umbenennung der Zellen also trivial nur für manche Sachverhalte verständlicher. Jedenfalls liegt der Fehler meiner Meinung nach darin, dass bei der Übergabe, dass statisch deklarierte nunmal jetzt wie ein ynamisches behandelt werden muss. Lösung gleich immer nullbasiert. Oder bei dynamisierung auf Nullbasiertheit achten.