Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Function
Andreas_Sans - Mi 28.05.03 20:55
Titel: Function
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 - 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:
MFG
- Ernesto -
Christian S. - 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
ErnestoChe - 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 :wink:
MFG
- Ernesto -
TomT - 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
AndyB - 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; |
Andreas_Sans - 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. - 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.
Andreas_Sans - 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 - 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
Christian S. - 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
TomT - 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!
Andreas_Sans - 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. - 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?
Andreas_Sans - 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. - 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.
Andreas_Sans - Do 29.05.03 19:27
hier wird die prozedur aufgerufen (<---) :
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: 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 :
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: 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; |
Christian S. - 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
Andreas_Sans - 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. - Fr 30.05.03 09:29
Gern geschehen! Ist doch immer wieder schön, wenn sich jemand so sehr drüber freut! :D :D
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!