| Autor |
Beitrag |
Andreas_Sans
      
Beiträge: 76
|
Verfasst: Mi 28.05.03 20:55
da dieser teil sich immer wiederholt würde ich ihn gerne in eine prozedur oder function packen. aber leider weis ich nicht wie das geht. Kann mir jemand helfen ?
Quelltext 1: 2: 3: 4: 5:
| if (leer[i-8] <> 2) and (loes[i-8] = 0) then leer[i-8] := 1 else leer[i-8] := 3; if (leer[i-7] <> 2) and (loes[i-7] = 0) then leer[i-7] := 1 else leer[i-7] := 3; if (leer[i+1] <> 2) and (loes[i+1] = 0) then leer[i+1] := 1 else leer[i+1] := 3; if (leer[i+8] <> 2) and (loes[i+8] = 0) then leer[i+8] := 1 else leer[i+8] := 3; if (leer[i+9] <> 2) and (loes[i+9] = 0) then leer[i+9] := 1 else leer[i+9] := 3; |
leer und loes sind arrays of integer
|
|
ErnestoChe
      
Beiträge: 528
Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
|
Verfasst: Mi 28.05.03 21:40
Hi,
ganz einfach. Da kein Wert zurückgegeben, sondern Werte verändert werden solltest du dich für eine Prozedur entscheiden. Das geht so:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure meineProzedur; begin if (leer[i-8] <> 2) and (loes[i-8] = 0) then leer[i-8] := 1 else leer[i-8] := 3; if (leer[i-7] <> 2) and (loes[i-7] = 0) then leer[i-7] := 1 else leer[i-7] := 3; if (leer[i+1] <> 2) and (loes[i+1] = 0) then leer[i+1] := 1 else leer[i+1] := 3; if (leer[i+8] <> 2) and (loes[i+8] = 0) then leer[i+8] := 1 else leer[i+8] := 3; if (leer[i+9] <> 2) and (loes[i+9] = 0) then leer[i+9] := 1 else leer[i+9] := 3; end; |
Der Aufruf erfolgt dann so:
Delphi-Quelltext
MFG
- Ernesto -
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mi 28.05.03 21:52
Oder, damit die beiden Arrays sind global deklariert werden müssen, mach es doch so:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure meineProzedur (loes : Array of Integer; VAR leer : Array of Integer); begin if (leer[i-8] <> 2) and (loes[i-8] = 0) then leer[i-8] := 1 else leer[i-8] := 3; if (leer[i-7] <> 2) and (loes[i-7] = 0) then leer[i-7] := 1 else leer[i-7] := 3; if (leer[i+1] <> 2) and (loes[i+1] = 0) then leer[i+1] := 1 else leer[i+1] := 3; if (leer[i+8] <> 2) and (loes[i+8] = 0) then leer[i+8] := 1 else leer[i+8] := 3; if (leer[i+9] <> 2) and (loes[i+9] = 0) then leer[i+9] := 1 else leer[i+9] := 3; end; |
MfG,
Peter
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
ErnestoChe
      
Beiträge: 528
Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
|
Verfasst: Mi 28.05.03 21:55
Hallo nochmal,
der Vollständigkeit halber. Wenn deine Variablen keine globalen sind musst du sie natürlich noch innerhalb der Prozedur deklarieren.
Delphi-Quelltext 1: 2: 3: 4:
| procedure meineProzedur; var leer, loes: array of Integer; begin |
oder als parameter übergeben:
Delphi-Quelltext 1:
| procedure meineProzedur(leer, loes: array of Integer); |
// Edit: Peter ist mir zuvorgekommen
MFG
- Ernesto -
|
|
TomT
      
Beiträge: 116
Suse 9.1 WinXP
D6 Pers
|
Verfasst: Do 29.05.03 04:23
Könntest Du vielleicht posten worum es genau geht? Vielleicht gibts was viel einfacheres, weil sieht etwas umständlich aus (nich bös gemeint).
MFG TomT
_________________ ...und da wurde mir klar, dass eine Toolbar keine Kneipe für Heimwerker ist.
|
|
AndyB
      
Beiträge: 1173
Erhaltene Danke: 14
RAD Studio XE2
|
Verfasst: Do 29.05.03 09:39
| TomT hat folgendes geschrieben: | | sieht etwas umständlich aus |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| const Nums: array[0..4] of Integer = (-8, -7, 1, 8, 9); var i: Integer; begin for i := 0 to High(Nums) do if (leer[i-Nums[i]] <> 2) and (loes[i-Nums[i]] = 0) then leer[i-Nums[i]] := 1 else leer[i-Nums[i]] := 3; end; |
_________________ Ist Zeit wirklich Geld?
|
|
Andreas_Sans 
      
Beiträge: 76
|
Verfasst: Do 29.05.03 17:46
die variable i soll auch in die procedure übernommen, aber wenn ich das dann so mache geht es nicht.
Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure meineProzedur (loes : Array of Integer;i : integer; VAR leer : Array of Integer;); begin if (leer[i-8] <> 2) and (loes[i-8] = 0) then leer[i-8] := 1 else leer[i-8] := 3; if (leer[i-7] <> 2) and (loes[i-7] = 0) then leer[i-7] := 1 else leer[i-7] := 3; if (leer[i+1] <> 2) and (loes[i+1] = 0) then leer[i+1] := 1 else leer[i+1] := 3; if (leer[i+8] <> 2) and (loes[i+8] = 0) then leer[i+8] := 1 else leer[i+8] := 3; if (leer[i+9] <> 2) and (loes[i+9] = 0) then leer[i+9] := 1 else leer[i+9] := 3; end; | [/code]
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Do 29.05.03 18:00
Du überschüttest uns nicht gerade mit Informationen. Es wäre wirlkich hilfreich, wenn Du uns auch sagen könntest, was nicht klappt.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Andreas_Sans 
      
Beiträge: 76
|
Verfasst: Do 29.05.03 18:07
wenn ich versuche die prozedur mit meineprozedur; aufrufen will, schreibt delphi ich hätte nicht genügend wirkliche parameter
|
|
geronimo
      
Beiträge: 29
|
Verfasst: Do 29.05.03 18:11
fehler:
procedure meineProzedur (loes : Array of Integer;i : integer; VAR leer : Array of Integer;);
die letzte variablendeklaration in einer klammer darf kein semikolon haben.
mfg geronimo
Zuletzt bearbeitet von geronimo am Do 29.05.03 18:13, insgesamt 1-mal bearbeitet
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Do 29.05.03 18:11
Wenn Du keine Parameter angibst, ist das nicht verwunderlich. Du musst ja noch die entsprechenden Parameter an die Prozedur übergeben. Der Start muss so aussehen:
Delphi-Quelltext 1:
| meineProzedur (MyLoes, My_I, MyLeer); |
Wobei MyLoes, My_I, MyLeer Variablen der entsprechenden Typen sind.
MfG,
Peter
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
TomT
      
Beiträge: 116
Suse 9.1 WinXP
D6 Pers
|
Verfasst: Do 29.05.03 18:59
| Andreas_Sans hat folgendes geschrieben: | | wenn ich versuche die prozedur mit meineprozedur; aufrufen will, schreibt delphi ich hätte nicht genügend wirkliche parameter |
Du solltest beim Aufruf die Parameter angeben!
_________________ ...und da wurde mir klar, dass eine Toolbar keine Kneipe für Heimwerker ist.
|
|
Andreas_Sans 
      
Beiträge: 76
|
Verfasst: Do 29.05.03 19:00
jetzt geht das aufrufen der prozedur, aber die geänderten Werte im array leer werden nicht zurückgegeben.
Quelltext 1: 2: 3: 4: 5:
| if (leer[i-8] <> 2) and (loes[i-8] = 0) then leer[i-8] := 1 else leer[i-8] := 3; if (leer[i-7] <> 2) and (loes[i-7] = 0) then leer[i-7] := 1 else leer[i-7] := 3; if (leer[i+1] <> 2) and (loes[i+1] = 0) then leer[i+1] := 1 else leer[i+1] := 3; if (leer[i+8] <> 2) and (loes[i+8] = 0) then leer[i+8] := 1 else leer[i+8] := 3; if (leer[i+9] <> 2) and (loes[i+9] = 0) then leer[i+9] := 1 else leer[i+9] := 3; |
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Do 29.05.03 19:03
Was meinst Du mit "zurückgegeben"? Eine Prozedur gibt nichts zurück. Die Werte werden geändert ... oder meintest Du, dass genau das nicht der Fall ist?
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Andreas_Sans 
      
Beiträge: 76
|
Verfasst: Do 29.05.03 19:19
ich greife später auf die werte des arrays leer zu, normalerweis müssten sie nach de prozedur auf drei oder eins sein, das ist aber nicht der fall
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Do 29.05.03 19:22
Dann poste bitte mal die komplette Implementation der Prozedur "meinProzedur" (oder wie auch immer die bei Dir heißt) und die Prozedur, in der diese aufgerufen wird. Es hilft auch oft, mit Einzelschritt während der Laufzeit durchzugehen und sich anzugucken, wie sich die Werte ändern bzw. dies unterlassen.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Andreas_Sans 
      
Beiträge: 76
|
Verfasst: Do 29.05.03 19:27
hier wird die prozedur aufgerufen (<---) :
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: 78: 79: 80: 81: 82:
| procedure TForm1.BitBtn1Click(Sender: TObject); var i,j : integer; begin bitbtn1.Glyph := nil;
IF loes[1] = 9 then begin bitbtn1.Glyph.LoadFromFile('C:\Eigene Dateien\mine.bmp'); bitbtn65.Glyph.LoadFromFile('C:\Eigene Dateien\smily2.bmp'); bitbtn1.caption := ''; timer1.Enabled := false;
end else bitbtn1.caption := inttostr(loes[1]);
activecontrol := button2;
if loes[1] = 0 then begin
leer[1] := 1; y := 1; repeat y := y+1; For i := 1 to 64 do begin
if (i = 1) and (leer[i] = 1) then begin x := i; meineprozedur(leer,x,loes); <--- end;
if (i >= 2) and (i <= 7) and (leer[i] = 1) then begin x := i; meineprozedur2(leer,x,loes); end;
if (i = 8) and (leer[8] = 1) then begin x := i; meineprozedur3(leer,x,loes); end;
if ((i = 9) or (i = 17) or (i = 25) or (i = 33) or (i = 41) or (i = 49)) and (leer[i] = 1) then begin x := i; meineprozedur4(leer,x,loes); end;
if (((i > 9) and (i < 16)) or ((i > 17) and (i < 24)) or ((i > 25) and (i < 32)) or ((i > 33) and (i < 40)) or ((i > 41) and (i < 48))or ((i > 49) and (i < 56))) and (leer[i] = 1) then begin x := i; meineprozedur5(leer,x,loes); end;
if ((i = 16) or (i = 24) or (i = 32) or (i = 40) or (i = 48) or (i = 56)) and (leer[i] = 1) then begin x := i; meineprozedur6(leer,x,loes); end;
if (i = 57) and (leer[57] = 1) then begin x := i; meineprozedur7(leer,x,loes); end;
if (i >= 58) and (i < 64) and (leer[i] = 1) then begin x := i; meineprozedur8(leer,x,loes); end;
if (i = 64) and (leer[i] = 1) then begin x := i; meineprozedur9(leer,x,loes); end; end; until y = 64; end;
For i := 1 to 64 do begin if (leer[i] = 1) and (loes[i] = 0) then begin tbitbtn(FindComponent('bitbtn'+IntToStr(i))).visible := false; end;
IF (leer[i] = 3) and ((loes[i] < 9) and (loes[i] > 0)) then begin tbitbtn(FindComponent('bitbtn'+IntToStr(i))).caption := inttostr(loes[i]); end; end; end; |
und hier die dazugehörigen prozeduren :
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: 78:
| procedure meineProzedur (loes : Array of Integer;VAR x : integer; VAR leer : Array of Integer); begin if (leer[2] <> 2) and (loes[2] = 0) then leer[2] := 1 else leer[2] := 3; if (leer[9] <> 2) and (loes[9] = 0) then leer[9] := 1 else leer[9] := 3; if (leer[10] <> 2) and (loes[10] = 0) then leer[10] := 1 else leer[10] := 3; end;
procedure meineProzedur2 (loes : Array of Integer;VAR x : integer; VAR leer : Array of Integer); begin if (leer[x-1] <> 2) and (loes[x-1] = 0) then leer[x-1] := 1 else leer[x-1] := 3; if (leer[x+1] <> 2) and (loes[x+1] = 0) then leer[x+1] := 1 else leer[x+1] := 3; if (leer[x+7] <> 2) and (loes[x+7] = 0) then leer[x+7] := 1 else leer[x+7] := 3; if (leer[x+8] <> 2) and (loes[x+8] = 0) then leer[x+8] := 1 else leer[x+8] := 3; if (leer[x+9] <> 2) and (loes[x+9] = 0) then leer[x+9] := 1 else leer[x+9] := 3; end;
procedure meineProzedur3 (loes : Array of Integer;VAR x : integer; VAR leer : Array of Integer); begin if (leer[7] <> 2) and (loes[7] = 0) then leer[7] := 1 else leer[7] := 3; if (leer[15] <> 2) and (loes[15] = 0) then leer[15] := 1 else leer[15] := 3; if (leer[16] <> 2) and (loes[16] = 0) then leer[16] := 1 else leer[16] := 3; end;
procedure meineProzedur4 (loes : Array of integer;VAR x : integer; VAR leer : Array of integer); begin if (leer[x-8] <> 2) and (loes[x-8] = 0) then leer[x-8] := 1 else leer[x-8] := 3; if (leer[x-7] <> 2) and (loes[x-7] = 0) then leer[x-7] := 1 else leer[x-7] := 3; if (leer[x+1] <> 2) and (loes[x+1] = 0) then leer[x+1] := 1 else leer[x+1] := 3; if (leer[x+8] <> 2) and (loes[x+8] = 0) then leer[x+8] := 1 else leer[x+8] := 3; if (leer[x+9] <> 2) and (loes[x+9] = 0) then leer[x+9] := 1 else leer[x+9] := 3; end;
procedure meineProzedur5 (loes : Array of integer;VAR x : integer; VAR leer : Array of integer); begin if (leer[x-9] <> 2) and (loes[x-9] = 0) then leer[x-9] := 1 else leer[x-9] := 3; if (leer[x-8] <> 2) and (loes[x-8] = 0) then leer[x-8] := 1 else leer[x-8] := 3; if (leer[x-7] <> 2) and (loes[x-7] = 0) then leer[x-7] := 1 else leer[x-7] := 3; if (leer[x+1] <> 2) and (loes[x+1] = 0) then leer[x+1] := 1 else leer[x+1] := 3; if (leer[x-1] <> 2) and (loes[x-1] = 0) then leer[x-1] := 1 else leer[x-1] := 3; if (leer[x+9] <> 2) and (loes[x+9] = 0) then leer[x+9] := 1 else leer[x+9] := 3; if (leer[x+8] <> 2) and (loes[x+8] = 0) then leer[x+8] := 1 else leer[x+8] := 3; if (leer[x+7] <> 2) and (loes[x+7] = 0) then leer[x+7] := 1 else leer[x+7] := 3; end;
procedure meineProzedur6 (loes : Array of integer;VAR x : integer; VAR leer : Array of integer); begin if (leer[x-8] <> 2) and (loes[x-8] = 0) then leer[x-8] := 1 else leer[x-8] := 3; if (leer[x-9] <> 2) and (loes[x-9] = 0) then leer[x-9] := 1 else leer[x-9] := 3; if (leer[x-1] <> 2) and (loes[x-1] = 0) then leer[x-1] := 1 else leer[x-1] := 3; if (leer[x+8] <> 2) and (loes[x+8] = 0) then leer[x+8] := 1 else leer[x+8] := 3; if (leer[x+7] <> 2) and (loes[x+7] = 0) then leer[x+7] := 1 else leer[x+7] := 3; end;
procedure meineProzedur7 (loes : Array of integer;VAR x : integer; VAR leer : Array of integer); begin if (leer[49] <> 2) and (loes[49] = 0) then leer[49] := 1 else leer[49] := 3; if (leer[50] <> 2) and (loes[50] = 0) then leer[50] := 1 else leer[50] := 3; if (leer[58] <> 2) and (loes[58] = 0) then leer[58] := 1 else leer[58] := 3; end;
procedure meineProzedur8 (loes : Array of integer;VAR x : integer; VAR leer : Array of integer); begin if (leer[x-1] <> 2) and (loes[x-1] = 0) then leer[x-1] := 1 else leer[x-1] := 3; if (leer[x+1] <> 2) and (loes[x+1] = 0) then leer[x+1] := 1 else leer[x+1] := 3; if (leer[x-7] <> 2) and (loes[x-7] = 0) then leer[x-7] := 1 else leer[x-7] := 3; if (leer[x-8] <> 2) and (loes[x-8] = 0) then leer[x-8] := 1 else leer[x-8] := 3; if (leer[x-9] <> 2) and (loes[x-9] = 0) then leer[x-9] := 1 else leer[x-9] := 3; end;
procedure meineProzedur9 (loes : Array of integer;VAR x : integer; VAR leer : Array of integer); begin if (leer[55] <> 2) and (loes[55] = 0) then leer[55] := 1 else leer[55] := 3; if (leer[56] <> 2) and (loes[56] = 0) then leer[56] := 1 else leer[56] := 3; if (leer[63] <> 2) and (loes[63] = 0) then leer[63] := 1 else leer[63] := 3; end; |
Zuletzt bearbeitet von Andreas_Sans am Do 29.05.03 21:27, insgesamt 1-mal bearbeitet
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Do 29.05.03 20:40
Die Parameter beim Aufruf lauten bei Dir "leer, x, loes", deklariert sind die Parameter als "loes, x, leer". Kann also nicht klappen.
Ach ja, könntest Du in Deinem Posting die Code-Tags durch Delphi-Tags ersetzen? Erhöht die Lesbarkeit!
MfG,
Peter
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Andreas_Sans 
      
Beiträge: 76
|
Verfasst: Do 29.05.03 23:38
Ganz großes DANKESCHÖN an alle die Geduld mit mir hatten und mir geholfen haben. Besonders PETER LUSTIG. Nochmals DANKE
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Fr 30.05.03 09:29
Gern geschehen! Ist doch immer wieder schön, wenn sich jemand so sehr drüber freut! 
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|