Autor |
Beitrag |
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Sa 14.03.15 23:18
Moin!
Nini hat folgendes geschrieben : | meine neue funktion: |
Das ist doch schon ganz OK.  Allerdings ziemlich umständlich.  Möchtest du das ändern? Also weniger umständlich machen?  Dann zeige ich dir noch einen kleinen Trick...
Nini hat folgendes geschrieben : | aber so ganz stimmt die noch nucht  |
Warum, gibt´s Fehlermeldungen?
Boldar hat schon drauf hingewiesen (  ), da ist noch ein generelles, logisches Problem drin. Bist du schon drauf gekommen?
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Nini 
      
Beiträge: 170
Erhaltene Danke: 12
|
Verfasst: Sa 14.03.15 23:23
also nicht funktionieren kann es meiner meinung nach nicht für die randfelder
und mod sind die Restklassen bei der division mit einer bestimmten zahl
aber was genau falsch ist, weiß ich nicht :/
ja, einfacher wäre es mir schon lieber
nein, fehlermeldungen treten nicht auf, aber die felder die es anmalt sind noch ziemlich wahllos irgendwie ._.
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Sa 14.03.15 23:31
Moin!
Nini hat folgendes geschrieben : | ja, einfacher wäre es mir schon lieber  |
OK, dann machen wir das.  Man kann die umgebenden Felder auch mit zwei Schleifen "ablaufen", und zwar so:
Delphi-Quelltext 1: 2: 3: 4:
| for dx := -1 to 1 do for dy := -1 to 1 do if (Feld[x +dx, y +dy]) then Result := Result +1; |
Das hat nur einen winzig kleinen "Haken", erkennst du ihn?
Nini hat folgendes geschrieben : | also nicht funktionieren kann es meiner meinung nach nicht für die randfelder |
Jap, genau da ist das Problem. Da gehen wir gleich noch genauer drauf ein.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
Für diesen Beitrag haben gedankt: Nini
|
|
Nini 
      
Beiträge: 170
Erhaltene Danke: 12
|
Verfasst: Sa 14.03.15 23:34
nein, also so direkt fällt mir kein haken auf
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Sa 14.03.15 23:45
Moin!
Nini hat folgendes geschrieben : | nein, also so direkt fällt mir kein haken auf |
OK, dann müssen wir einen kleinen Exkurs einlegen, kein Problem.
Zunächst mal führen wir noch eine Funktion ein, die müssen wir wieder oben in der Klasse "anmelden":
Delphi-Quelltext 1: 2: 3: 4:
| public Feld: TFeld; function AnzahlLebenderNachbarn(const x, y: Integer): Integer; function LebtNachbar(x, y: Integer): Boolean; |
Der Sinn soll also sein, die Prüfung, ob eine bestimmte Zelle "lebendig" ist, auszulagern. Sonst wird der Code schnell unübersichtlich.  Aber, wir machen da noch nicht den endgültigen Code rein, sondern erstmal was zum testen:
Delphi-Quelltext 1: 2: 3: 4: 5:
| function TForm1.LebtNachbar(x, y: Integer): Boolean; begin ShowMessageFmt('x=%d, y=%d', [x, y]); Result := Feld[x, y]; end; |
Wenn du das übernommen hast, dann müssen wir noch die Zähler-Funktion anpassen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| function TForm1.AnzahlLebenderNachbarn(const x, y: Integer): Integer; var dx, dy: Integer; begin Result := 0; for dy := -1 to 1 do for dx := -1 to 1 do if LebtNachbar(x +dx, y +dy) then Inc(Result); end; |
ACHTUNG: Mit diesem Code nicht auf den btnRechnen klicken, sonst musst du zig-tausend Messageboxen wegklicken!
Statt dessen machst du noch einen neuen Button auf das Formular: btnTest, und da schreibst du rein:
Delphi-Quelltext 1: 2: 3: 4:
| procedure TForm1.btnTestClick(Sender: TObject); begin AnzahlLebenderNachbarn(1, 1); end; |
Jetzt das Projekt starten und einmal auf den neuen Test-Button klicken: Wieviele Messageboxen kommen und was steht drin?
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Nini 
      
Beiträge: 170
Erhaltene Danke: 12
|
Verfasst: So 15.03.15 00:02
es kommt eine message boxx und darin steht "x=0,y=0"
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: So 15.03.15 00:03
Moin!
Nini hat folgendes geschrieben : | es kommt eine message boxx und darin steht "x=0,y=0" |
Es wird nur genau eine MessageBox angezeigt?!  Da sollten ein paar mehr kommen...  Zeig mal bitte deinen gesamten Code...
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Nini 
      
Beiträge: 170
Erhaltene Danke: 12
|
Verfasst: So 15.03.15 00:04
Nini hat folgendes geschrieben : | es kommt eine message boxx und darin steht "x=0,y=0" |
oh, danack kommen ja noch welche
und danach x=1, y=0
x=2, y=0
x=0, y=1
x=1, y=1
x=2 y=1
x=0 y=2
x=1 y=2
x=2 y=2
und dann schließen sich die boxen
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: So 15.03.15 00:06
Moin!
Ah, schon besser.  Und, wieviele sind es denn nun gewesen?
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Nini 
      
Beiträge: 170
Erhaltene Danke: 12
|
Verfasst: So 15.03.15 00:11
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: So 15.03.15 00:12
Moin!
OK, kannst du dann bitte mal die Nachbarn der Zelle[1,1] aufzählen? (oder als Abkürzung sagen, wieviele Nachbarn diese Zelle hat?)
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Nini 
      
Beiträge: 170
Erhaltene Danke: 12
|
Verfasst: So 15.03.15 00:15
0,0
0,1
0,2
1,0
1,2
2,0
2,1
2,2
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: So 15.03.15 00:16
Moin!
Was fällt dir im Gegensatz zu den MessageBoxen auf?
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Nini 
      
Beiträge: 170
Erhaltene Danke: 12
|
Verfasst: So 15.03.15 00:20
eeehhhm, keine ahnung, vlt, dass ich die andersrum sotiert habe? und das halt die 1,1 nicht dazu gehört, weil die die zelle selbst ist
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: So 15.03.15 00:21
Moin!
Nini hat folgendes geschrieben : | und das halt die 1,1 nicht dazu gehört, weil die die zelle selbst ist |
Hast ja doch Ahnung, genau das ist es!  Und jetzt die Preisfrage: warum taucht denn bei der Lösung mit den beiden Schleifen die Zelle selbst auf (die ist ja kein Nachbar)?!
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Nini 
      
Beiträge: 170
Erhaltene Danke: 12
|
Verfasst: So 15.03.15 00:31
weil nicht ausgeschlossen ist, dass dx und dy gleichzeitig 0 sein können
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: So 15.03.15 00:32
Moin!
Perfekt!  Dann ändere das doch mal eben (und zeig dann den Code der Funktion bitte)!
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Nini 
      
Beiträge: 170
Erhaltene Danke: 12
|
Verfasst: So 15.03.15 00:40
so: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| function TForm1.AnzahlLebenderNachbarn(const x, y: Integer): Integer; var dx, dy: Integer; begin Result := 0; for dy := -1 to 1 do for dx := -1 to 1 do if not ((x=0) and (y=0)) then if LebtNachbar(x +dx, y +dy) then Inc(Result); end; |
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: So 15.03.15 00:43
Moin!
Grandios!  Genau so.
Dann ändere doch mal bitte den Testaufruf:
Delphi-Quelltext 1: 2: 3: 4:
| procedure TForm1.btnTestClick(Sender: TObject); begin AnzahlLebenderNachbarn(0, 0); end; |
Welche Werte werden dir nun nach einem Klick auf btnTest in den MessageBoxen angezeigt? Und gibt es da vielleicht schon ... Auffälligkeiten?
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Nini 
      
Beiträge: 170
Erhaltene Danke: 12
|
Verfasst: So 15.03.15 00:47
bei mir passiert gar nichts mehr, wenn ich auf btntest gehe
|
|