Conway's Game of Life
-
Das Problem vom TE ist glaube ich ein grundsätzlicheres.
In C (und in den meisten anderen Programmiersprachen) gehen die Indizes von einem Array von 0 bis max-1, was dann genau max Elementen entspricht.
-
Schlangenmensch schrieb:
Das Problem vom TE ist glaube ich ein grundsätzlicheres.
In C (und in den meisten anderen Programmiersprachen) gehen die Indizes von einem Array von 0 bis max-1, was dann genau max Elementen entspricht.
Aber das weiß er doch offensichtlich, denn in seinem ersten Programm hat er es richtig gemacht!
-
vielleicht erklärt ihr es ihm einfach unverständlich.
mein vorschlag wäre jetzt ja, das array einfach um jeweils zwei zeilen und spalten zu vergrößern, und die elemente dann ausdrücklich als "tot" festzulegen.
nur die grenzen des array müssen dann irgendwie verändert werden. evtl. zeiger verwenden?
-
Vermutlich stelle ich mich auch blöder als es eigentlich sein muss
Ich dachte halt wenn mein maximaler Bereich bis 12 geht, geht die Schleife 1 bis kleiner max nur von 1 bis 11.
Weil die 12 wäre ja schon gleich dem Maximalwert.Gleiches gilt ja für den Array.
Aber gut - ich probiere des einfach mal aus
-
nein genau das ist nicht der fall. wenn du ein array von 12 * 12 erzeugst, hast du horizontal und vertikal die elemente [0] ... [11].
wenn du jetzt nur von [1] bis [11] auswertest, überschreitest du den rand, weil das array nur bis 11 geht, du aber wegen [i + 1] bzw. [j + 1] auch in [12] guckst. das hat man versucht, dir zu erklären.
das nächste problem ist eben, dass wenn du ein array erstellst, "irgendetwas" in den elementen drin steht, was du nur bedingt behoben hast. mit [i - i] für i == 0 greifst du dann auch [0] zu, was aber nicht initialisiert wurde.
wenn du ein array von 14 * 14 erstellst und komplett mit 0 initialisierst, hast du mit [1] ... [12] deine 12 elemente, kannst entspannt von 1 bis 12 auswerten und verursachst keine speicherfehler.
-
int array[3]
ist ein Array mit 3 Werten.array[0]
,array[1]
, undarray[2]
.Eine Schleife
for (int i = N; i < M; ++i)
läuft durch max(M-N, 0) Werte, zum Beispiel
for (int i = 8; i < 11; ++i)
läuft durch 11-8=3 Werte: 8, 9, 10.
So etwas passt daher auch besonders schön zu den Arraygrenzen, denn das Arrayarray
von oben durchläuft man vollständig, indem man seine Größe angibt:for (int i = 0; i < 3; ++i)
Dies gibt einem genau
array[0]
,array[1]
, undarray[2]
.Das hattest du in deinem ersten Beitrag ja auch alles schon richtig.
Ich wiederhole noch einmal dringend meinen Tipp, das derzeitige Gefrickel zu unterlassen. Hättest du gleich nach der ersten Antwort angefangen, das Programm komplett richtig zu machen, indem du modulo benutzt, dann wärst du schon lange fertig. Stattdessen hast du nun schon einen Tag darauf verschwendet eine halbrichtige Version zu basteln, die aber bisher doch noch nicht funktioniert, und dich auch keinen Schritt weiter in die richtige Richtung bringt.
-
Whup - es passt!
Danke für die ausdauernde Hilfe.
Das mit dem Array war ziemlich blöd nachgedacht!
Habe das mit einer besseren Initialisierung ans laufen gekriegt.Den Modulo-Operator schaue ich mir in dem Kontext auch noch an.
Nullen und Einsen fand ich auf dem ersten Blick einfach am praktischsten (mit dem Kopf durch die Wand tut es ja manchmal auch )Eine letzte blöde Frage habe ich noch:
Einen Array wieint var=3; int array[var];
lässt sich initialisieren.
Aber
int var=3; int array[var]={0};
nicht.
Ich verstehe nicht ganz woran das liegt
-
Freumel schrieb:
Einen Array wie
int var=3; int array[var];
lässt sich initialisieren.
Da wird nichts initialisiert.
Freumel schrieb:
Aber
int var=3; int array[var]={0};
nicht.
Das geht bei Variable Length Arrays halt nicht. Brauchst du die überhaupt?
Mehr unter https://stackoverflow.com/questions/17332360/initializing-variable-length-array
-
DirkB schrieb:
Freumel schrieb:
Aber
int var=3; int array[var]={0};
nicht.
Das geht bei Variable Length Arrays halt nicht. Brauchst du die überhaupt?
Hätte sich an einer Ecke angeboten um die Feldgröße variabel zu halten, aber brauchen tu ich's eigentlich nicht wirklich.
Bin das Problem auch umgangen.
-
malloc und realloc kennst du? calloc initialisiert sogar automatisch.