Autor Beitrag
Andreas_Sans
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76



BeitragVerfasst: 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 ?

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 528

Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
BeitragVerfasst: 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:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure meineProzedur;
begin
  if (leer[i-8] <> 2and (loes[i-8] = 0then leer[i-8] := 1 else leer[i-8] := 3
  if (leer[i-7] <> 2and (loes[i-7] = 0then leer[i-7] := 1 else leer[i-7] := 3
  if (leer[i+1] <> 2and (loes[i+1] = 0then leer[i+1] := 1 else leer[i+1] := 3
  if (leer[i+8] <> 2and (loes[i+8] = 0then leer[i+8] := 1 else leer[i+8] := 3
  if (leer[i+9] <> 2and (loes[i+9] = 0then leer[i+9] := 1 else leer[i+9] := 3;
end;


Der Aufruf erfolgt dann so:

ausblenden Delphi-Quelltext
1:
meineProzedur;					


MFG

- Ernesto -
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 28.05.03 21:52 
Oder, damit die beiden Arrays sind global deklariert werden müssen, mach es doch so:

ausblenden 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] <> 2and (loes[i-8] = 0then leer[i-8] := 1 else leer[i-8] := 3
  if (leer[i-7] <> 2and (loes[i-7] = 0then leer[i-7] := 1 else leer[i-7] := 3
  if (leer[i+1] <> 2and (loes[i+1] = 0then leer[i+1] := 1 else leer[i+1] := 3
  if (leer[i+8] <> 2and (loes[i+8] = 0then leer[i+8] := 1 else leer[i+8] := 3
  if (leer[i+9] <> 2and (loes[i+9] = 0then 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 528

Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
BeitragVerfasst: 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.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure meineProzedur; 
var
  leer, loes: array of Integer;
begin


oder als parameter übergeben:

ausblenden Delphi-Quelltext
1:
procedure meineProzedur(leer, loes: array of Integer);					


// Edit: Peter ist mir zuvorgekommen :wink:

MFG

- Ernesto -
TomT
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 116

Suse 9.1 WinXP
D6 Pers
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Do 29.05.03 09:39 
TomT hat folgendes geschrieben:
sieht etwas umständlich aus


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
const 
  Nums: array[0..4of Integer = (-8, -7189);
var
  i: Integer;
begin
  for i := 0 to High(Nums) do
    if (leer[i-Nums[i]] <> 2and (loes[i-Nums[i]] = 0then leer[i-Nums[i]] := 1 else leer[i-Nums[i]] := 3
end;

_________________
Ist Zeit wirklich Geld?
Andreas_Sans Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76



BeitragVerfasst: 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.

ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 29



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 116

Suse 9.1 WinXP
D6 Pers
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76



BeitragVerfasst: Do 29.05.03 19:00 
jetzt geht das aufrufen der prozedur, aber die geänderten Werte im array leer werden nicht zurückgegeben.
ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76



BeitragVerfasst: Do 29.05.03 19:27 
hier wird die prozedur aufgerufen (<---) :
ausblenden volle Höhe 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 = 1and (leer[i] = 1then begin
x := i;
meineprozedur(leer,x,loes); <---
                                       end;

     if (i >= 2and (i <= 7and (leer[i] = 1then begin
x := i;
meineprozedur2(leer,x,loes);
                                                     end;

     if (i = 8and (leer[8] = 1then begin
x := i;
meineprozedur3(leer,x,loes);
                                       end;

     if ((i = 9or (i = 17or (i = 25or (i = 33or (i = 41or (i = 49)) and (leer[i] = 1then begin
x := i;
meineprozedur4(leer,x,loes);
                                                     end;

     if (((i > 9and (i < 16)) or ((i > 17and (i < 24)) or ((i > 25and (i < 32)) or ((i > 33and (i < 40)) or ((i > 41and (i < 48))or ((i > 49and (i < 56))) and (leer[i] = 1then begin
x := i;
meineprozedur5(leer,x,loes);
                                                     end;

     if ((i = 16or (i = 24or (i = 32or (i = 40or (i = 48or (i = 56)) and (leer[i] = 1then begin
x := i;
meineprozedur6(leer,x,loes);
                                                     end;

     if (i = 57and (leer[57] = 1then begin
x := i;
meineprozedur7(leer,x,loes);
                                       end;

     if (i >= 58and (i < 64and (leer[i] = 1then begin
x := i;
meineprozedur8(leer,x,loes);
                                                     end;

     if (i = 64and (leer[i] = 1then begin
x := i;
meineprozedur9(leer,x,loes);
                                        end;
                     end;
until y = 64;
                    end;

For i := 1 to 64 do begin
 if (leer[i] = 1and (loes[i] = 0then begin
   tbitbtn(FindComponent('bitbtn'+IntToStr(i))).visible := false;
                     end;

 IF (leer[i] = 3and ((loes[i] < 9and (loes[i] > 0)) then begin
   tbitbtn(FindComponent('bitbtn'+IntToStr(i))).caption := inttostr(loes[i]);
                                           end;
                    end;
   end;


und hier die dazugehörigen prozeduren :

ausblenden volle Höhe 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] <> 2and (loes[2] = 0then leer[2] := 1 else leer[2] := 3;
      if (leer[9] <> 2and (loes[9] = 0then leer[9] := 1 else leer[9] := 3;
      if (leer[10] <> 2and (loes[10] = 0then 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] <> 2and (loes[x-1] = 0then leer[x-1] := 1 else leer[x-1] := 3;
      if (leer[x+1] <> 2and (loes[x+1] = 0then leer[x+1] := 1 else leer[x+1] := 3;
      if (leer[x+7] <> 2and (loes[x+7] = 0then leer[x+7] := 1 else leer[x+7] := 3;
      if (leer[x+8] <> 2and (loes[x+8] = 0then leer[x+8] := 1 else leer[x+8] := 3;
      if (leer[x+9] <> 2and (loes[x+9] = 0then 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] <> 2and (loes[7] = 0then leer[7] := 1 else leer[7] := 3;
      if (leer[15] <> 2and (loes[15] = 0then leer[15] := 1 else leer[15] := 3;
      if (leer[16] <> 2and (loes[16] = 0then 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] <> 2and (loes[x-8] = 0then leer[x-8] := 1 else leer[x-8] := 3;
      if (leer[x-7] <> 2and (loes[x-7] = 0then leer[x-7] := 1 else leer[x-7] := 3;
      if (leer[x+1] <> 2and (loes[x+1] = 0then leer[x+1] := 1 else leer[x+1] := 3;
      if (leer[x+8] <> 2and (loes[x+8] = 0then leer[x+8] := 1 else leer[x+8] := 3;
      if (leer[x+9] <> 2and (loes[x+9] = 0then 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] <> 2and (loes[x-9] = 0then leer[x-9] := 1 else leer[x-9] := 3;
      if (leer[x-8] <> 2and (loes[x-8] = 0then leer[x-8] := 1 else leer[x-8] := 3;
      if (leer[x-7] <> 2and (loes[x-7] = 0then leer[x-7] := 1 else leer[x-7] := 3;
      if (leer[x+1] <> 2and (loes[x+1] = 0then leer[x+1] := 1 else leer[x+1] := 3;
      if (leer[x-1] <> 2and (loes[x-1] = 0then leer[x-1] := 1 else leer[x-1] := 3;
      if (leer[x+9] <> 2and (loes[x+9] = 0then leer[x+9] := 1 else leer[x+9] := 3;
      if (leer[x+8] <> 2and (loes[x+8] = 0then leer[x+8] := 1 else leer[x+8] := 3;
      if (leer[x+7] <> 2and (loes[x+7] = 0then 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] <> 2and (loes[x-8] = 0then leer[x-8] := 1 else leer[x-8] := 3;
      if (leer[x-9] <> 2and (loes[x-9] = 0then leer[x-9] := 1 else leer[x-9] := 3;
      if (leer[x-1] <> 2and (loes[x-1] = 0then leer[x-1] := 1 else leer[x-1] := 3;
      if (leer[x+8] <> 2and (loes[x+8] = 0then leer[x+8] := 1 else leer[x+8] := 3;
      if (leer[x+7] <> 2and (loes[x+7] = 0then 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] <> 2and (loes[49] = 0then leer[49] := 1 else leer[49] := 3;
      if (leer[50] <> 2and (loes[50] = 0then leer[50] := 1 else leer[50] := 3;
      if (leer[58] <> 2and (loes[58] = 0then 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] <> 2and (loes[x-1] = 0then leer[x-1] := 1 else leer[x-1] := 3;
      if (leer[x+1] <> 2and (loes[x+1] = 0then leer[x+1] := 1 else leer[x+1] := 3;
      if (leer[x-7] <> 2and (loes[x-7] = 0then leer[x-7] := 1 else leer[x-7] := 3;
      if (leer[x-8] <> 2and (loes[x-8] = 0then leer[x-8] := 1 else leer[x-8] := 3;
      if (leer[x-9] <> 2and (loes[x-9] = 0then 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] <> 2and (loes[55] = 0then leer[55] := 1 else leer[55] := 3;
      if (leer[56] <> 2and (loes[56] = 0then leer[56] := 1 else leer[56] := 3;
      if (leer[63] <> 2and (loes[63] = 0then 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Fr 30.05.03 09:29 
Gern geschehen! Ist doch immer wieder schön, wenn sich jemand so sehr drüber freut! :D :D

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".