|Game_of_Life|
-
Hallo Leute
Wir haben vor kurzem, in der Schule, mit dem "Projekt" Game_of_Life angefangen.
Da bei mir jetzt die Ferien begonnen haben, kann ich meinen Lehrer schlecht um Hilfe bitten() und da ich Zeit über habe, will ich gerne dran weiter arbeiten.
Das Problem ist nur, dass wir bei dem Projekt ziemlich am Anfang stehen, d.h. wir haben grade mal ein "Menü" erstellt.(hatten bloß eine Untrerrichtseinheit wo, wir mit dem neuen Thema begonnen haben)
Die Software die wir verwenden : Dev-C++
Was haben wir bereits programmiert : Ein Programm mit dem man Zahlen sortieren kann - mit dem man Namen sortieren kann - und zu guter letzt eins mit dem man Namen & Zahlen sortieren kann( also das der Name mit dem zugehörigen Geburtsjahr-tag usw.. sortiert wird)
(Wir haben vor ca 3-4 Monaten mit dem programmieren in der Schule angefangen, also kenne ich noch nicht all zu viele Befehle)
Das Menü poste ich jetzt nicht (außer jemand möchte es unbedingt sehen :D)
& so sieht die GoF.cpp "erstmal" aus:#include <cstdlib> #include <iostream> #include "conio.h" #define max_zeilen 5 #define max_spalten 5 using namespace std; int feld[max_zeilen][max_spalten]; //---------------------------------------------------------------- void feld_auf_null(void) {} //---------------------------------------------------------------- void feld_ausgeben(void) {} //---------------------------------------------------------------- void feld_eingeben(void) {} //---------------------------------------------------------------- void simulieren(void) {} //---------------------------------------------------------------- void testmuster_anlegen(void) {}
Ich habe mit der Funktion feld_ausgeben angefangen und hab auch bei Google gesucht wie man ein 2d-Feld erstellen kann und hab dann dies hier gefunden (was auch funktioniert):
for(i=0; i < max_zeilen; i++) { for(j=0; j < max_spalten; j++) { printf("%d ", feld[i][j]); } printf("\n"); }
Nur möchte ich es in einer while-Schleife haben, da wir mit for noch nicht gearbeitet haben und ich es erstmal bevorzuge es mit while zu machen.
Jedoch funktioniert es nicht wie ich es will.Mein Versuch die for-Schleife in eine while-Schleife um zu formen
void feld_ausgeben(void) { int i=0; int j=0; system("cls"); while( i < max_zeilen) { i++; while( j < max_spalten) { j++; printf("%i",feld[i][j]); } printf("\n"); } system("pause"); }
Ausgegeben wird dann nur dies hier:
00000 Drücken Sie eine beliebige Taste . . .
Ich hab schon stundelang verschiedene Sachen ausprobiert, nur kann ich einfach nicht den Fehler erkennen
Schonmal ein riesen großes Dankeschön im Voraus
(und tut mir leid für den vielen Text, hab es versucht so kurz wie möglich zu fassen)Ich hoffe jemand kann mich hierbei unterstützen und mir Tipps und Anregungen geben, wie ich am besten vorgehen sollte
-
Du hast zwei Probleme: Erstens erhöhst du die Variablen am Anfang der Schleife statt am Ende (Array-Indices laufen in C von 0 bis N - 1, wobei N die Größe des Arrays ist), und zweitens setzt du j nach dem ersten Schleifendurchlauf nicht auf 0 zurück. Es gilt folgende Äquivalenz:
for(a; b; c) { d; }
bedeutet das selbe wie
a; while(b) { d; c; }
(Scopes mal beiseite). In deinem Code setzt du es aber um auf
/* a fehlt */ while(b) { /* c, d vertauscht */ c; d; }
...und deshalb verhält es sich auch anders.
-
willst du das ganze jetzt in c oder c++ machen? wenn du es in c++ machen willst, würde ich dir raten, eine klasse zu schreiben, oder zumindest keine globalen variablen zu verwenden. und wenn du nicht die aller neuste version von dev-c++ benutzt, ich glaube das ist sogar ne betha version, dann benutzte doch die kostenlose ide von microsoft (visual studio c++ express edition). da hast du dann auch gleich einen modernen compiler dabei
-
@seldon
Viel Dank dafür
genau nach so einem Beispiel habe ich gesucht. Hat mir echt weiter geholfen und gleich beim ersten Versuch einwandfrei funktioniert.@vario-500
soweit ich mich nicht täusche ist es und soll es in C sein.
Ich arbeite jetzt aber erstmal mit meiner jetztigen Dev-C++ Version weiter.Vielleicht schaue ich mir die Tage mal die ide von Microsoft an - danke für den Hinweis
Jetzt arbeite ich aber erstmal an dem Programm etwas weiter und wenn ich wieder ein Problem haben sollte (was bestimmt der Fall sein wird
) lasse ich es euch wissen.
Später kann ich auch mal Zwischenergebnisse posten
& danke nochmalPS: beim letzen Post hatte ich vergessen mich anzumelden und habe es als "Gast" veröffentlich.
-
dann täuscht du dich
iostream gehört zu c++ und damit verbunden auch der namespace std. da musst du dich entscheiden, ob du es in c oder c++ machen willst. was habt ihr denn bis jetzt in der schule genau gemacht?
sagt dir so was?#include <iostream> int main() { int i; std::cin >> i; }
-
Ahh gut zu wissen
Ne sowas sagt mir im moment noch nichts.
Im ersten Post steht was wir schon gemacht haben.
Was haben wir bereits programmiert :[u] Ein Programm mit dem man Zahlen sortieren kann - mit dem man Namen sortieren kann - und zu guter letzt eins mit dem man Namen & Zahlen sortieren kann( also das der Name mit dem zugehörigen Geburtsjahr-tag usw.. sortiert wird)Will nur ungern den ganzen Code hier posten, gibt es hier vielleicht eine Fukntion wie "Spoiler" damit es nicht nach zu viel aussieht ?
Auf Wunsch kann ich aber gerne mal einen Ausschnitt posten
-
also lernt ihr c mit c++ mitteln sozusagen. ich hab oben übersehen, dass du printf benutzt hast und du benutzt es aus dem c++ namespace std heraus. eigentlich braucht man zumindest diese funkion in c++ nicht mehr wirklich. ach ja, den header iostream brauchst du nicht. in diesem sind u. a. die ein-und ausgabe mit c++ mitteln definiert, also nicht printf und sprintf und wie sie alle heißen.
-
also lernt ihr c mit c++ mitteln
Ja genau so ist es - hatte ich vergessen zu erwähnen
Die Funktionen testmuster_anlegen und feld_auf_null sind mittlerwele fertig.
Ich hänge jetzt bloss wieder bei feld_ausgeben. Ansich funktioniert es, nur müssen wir dort einmal die Option haben feld mit Nullen ausgeben (was auch klappt) und einmal wo eben nur die Einsen zu sehen sind und hier fängt es dann an.
1 0 0 0 0 0 0 1 0 1 0 0 0 0 1 0 0 0 1 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 1 0 0 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 1 Drücken Sie eine beliebige Taste . . .
Ich weiß nunmal eben nicht wie man die "0" als "leer" ausgibt.
Gedacht hab ich an sowas wie :feld[i][j] = ""
Aufjedenfall wo dann am Ende
""
steht. - da es aber nicht funktioniert nehme ich an, dass ich die Sache ganz falsch angehe
Hier die Funktion feld_ausgeben, wie sie im moment aussieht.
void feld_ausgeben(int modus) { //Modus um das Feld mit Nullen auszugeben if(modus == 49) { system("cls"); int i,j; i=0; while( i < max_zeilen) { j=0; while( j < max_spalten) { printf("%i ",feld[i][j]); j++; } printf("\n"); //neuer Zeilenanfang i++; } printf("\n"); system("pause"); } //Modus um ohne Nullen auszugeben if(modus == 48) { //gleicher Ablauf wie oben | Null auf leer setzen ? } }
-
mach doch vor der ausgabe einfach noch ne if-abfrage rein, ob in dem feld ne eins steht. wenn ja, wird die ausgegeben, wenn nicht, dann wird " " ausgegeben. wenn ich dich richtig verstanden hab.
-
TNB schrieb:
Ich weiß nunmal eben nicht wie man die "0" als "leer" ausgibt.
-
vario-500 schrieb:
mach doch vor der ausgabe einfach noch ne if-abfrage rein, ob in dem feld ne eins steht. wenn ja, wird die ausgegeben, wenn nicht, dann wird " " ausgegeben. wenn ich dich richtig verstanden hab.
Ja stimmt - hatte nur nicht zu Ende gedacht. - jetzt hab ich es ja. danke
if(feld[i][j] == 0) { printf(" ",feld[i][j]); } else { printf("%i ",feld[i][j]); }
@Wutz
das mit dem Zahlen in Ziffern umwandeln hat bei mir leider nicht so funktioniert wie ich es geplant hatte - hab deswegen lieber die if-Anweisung genommen, wie vario-500 es vorgeschlagen hat-
Das mit dem Zahlen in Ziffern umwandeln merke ich mir aber - danke für den Tipp
-
Bis jetzt ist alles fertig, bis auf feld_eingeben und simulieren.
Das simulieren lasse ich erstmal..Beim feld_eingeben brauch ich aber vermutlich Befehle die ich höchstwahrscheinlich noch nicht kenne.
Ich muss nämlich jetzt eine beliebige "0" auf "1" umändern können.(sozusagen ein eigenes Muster anlegen)(natürlich in der Konsole)Ich wüsste nicht wie ich mit scanf() eine beliebige Position ändern soll.
Ich hab im Internet etwas von gotoxy(); gelesen oder das man die Cursor Position bestimmen kann. - anfangen kann ich damit leider nichts - ich weiß nichteinmal ob ich diese Befehle überhaupt brauche.
[wenn ich mein Problem nicht verständlich genug erklärt habe, kann ich es versuchen anders zu formulieren]
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Drücken Sie eine beliebige Taste . . .