Zum Inhalt springen

Insane355

Mitglieder
  • Gesamte Inhalte

    3
  • Benutzer seit

  • Letzter Besuch

  1. Ja ich hab auch schon einiges mit zeigern ausprobiert, hat aber nicht funktioniert. Die verweist man mit einem zeiger auf ein mehrdimensionales array und übergibt diesen zeiger dann auf die funktion?
  2. Hi! Ich muss für mein Studium das Game of Life implementieren. Das Grundgerüst ist soweit schon mal fertig, allerdings stehe ich jetzt vor dem Problem, dass ich es nicht schaffe das zweidimensionale array an die verschiedenen Funktionen zu übergeben. #include <stdio.h> #include <stdlib.h> #include <windows.h> void show(int breite, int hoehe); void advance(int breite, int hoehe); int check(int breite, int hoehe); void start(int breite, int hoehe); int main() { int breite; int hoehe; int neustart=0; int feld[breite][hoehe]; while(neustart==0) { printf("\n\t\t\t\tGame of Life\n________________________________________________________________________________\n\n"); int time; //Eingaben werden abgefragt und eingelesen printf("Feldbreite: "); scanf("%d", &breite); fflush(stdin); printf("Feldhoehe: "); scanf("%d", &hoehe); printf("Generationsabstand in ms: "); scanf("%d", &time); //Eingabe wird überprüft if(check(breite, hoehe)==1) break; start(breite,hoehe); advance(breite,hoehe); show(breite, hoehe); system("pause"); } system("pause"); return 0; } //Das Game of Life wird nach den Regeln berechnet. void advance(int breite, int hoehe) { int feld[breite][hoehe]; int calcfeld[breite][hoehe]; int nachbar; printf("\n\nVor Berechnung:%d\n", feld[4][4]); for(int y=0; y<hoehe; y++) { for(int x=0; x<breite; x++) { //Eckzellen und Randzellen: if(((y==0)&&(x==0))||((y==0)&&(x==breite-1))||((y==hoehe-1)&&(x==0))||((y==hoehe-1)&&(x==breite-1))||(y==0)||(x==breite-1)||(y==0)||(y==hoehe-1)) { if((y==0)&&(x==0)) //Eckzelle links oben { if(calcfeld[x+1][y]==1) nachbar++; if(calcfeld[x+1][y+1]==1) nachbar++; if(calcfeld[x][y+1]==1) nachbar++; if(calcfeld[x][hoehe-1]==1) nachbar++; if(calcfeld[x+1][hoehe-1]==1) nachbar++; if(calcfeld[breite-1][y]==1) nachbar++; if(calcfeld[breite-1][y+1]==1) nachbar++; if(calcfeld[breite-1][hoehe-1]==1) nachbar++; } if((y==0)&&(x==breite-1)) //Eckzelle rechts oben { if(calcfeld[breite-2][0]==1) nachbar++; if(calcfeld[breite-2][1]==1) nachbar++; if(calcfeld[breite-1][1]==1) nachbar++; if(calcfeld[0][0]==1) nachbar++; if(calcfeld[0][1]==1) nachbar++; if(calcfeld[0][hoehe-1]==1) nachbar++; if(calcfeld[breite-1][hoehe-1]==1) nachbar++; if(calcfeld[breite-2][hoehe-1]==1) nachbar++; } if((y==hoehe-1)&&(x==breite-1)) //Eckzelle rechts unten { if(calcfeld[breite-2][hoehe-1]==1) nachbar++; if(calcfeld[breite-2][hoehe-2]==1) nachbar++; if(calcfeld[breite-1][hoehe-2]==1) nachbar++; if(calcfeld[0][hoehe-1]==1) nachbar++; if(calcfeld[0][hoehe-2]==1) nachbar++; if(calcfeld[0][0]==1) nachbar++; if(calcfeld[breite-1][0]==1) nachbar++; if(calcfeld[breite-2][0]==1) nachbar++; } if((y==hoehe-1)&&(x==0)) //Eckzelle links unten { if(calcfeld[1][hoehe-1]==1) nachbar++; if(calcfeld[1][hoehe-2]==1) nachbar++; if(calcfeld[0][hoehe-2]==1) nachbar++; if(calcfeld[0][0]==1) nachbar++; if(calcfeld[1][0]==1) nachbar++; if(calcfeld[breite-1][0]==1) nachbar++; if(calcfeld[breite-1][hoehe-1]==1) nachbar++; if(calcfeld[breite-1][hoehe-2]==1) nachbar++; } if((x==0)&&(y!=0)&&(y!=hoehe-1)) //Randzellen links { if(calcfeld[x][y-1]==1) nachbar++; if(calcfeld[x][y+1]==1) nachbar++; if(calcfeld[x+1][y-1]==1) nachbar++; if(calcfeld[x+1][y]==1) nachbar++; if(calcfeld[x+1][y+1]==1) nachbar++; if(calcfeld[breite-1][y]==1) nachbar++; if(calcfeld[breite-1][y-1]==1) nachbar++; if(calcfeld[breite-1][y+1]==1) nachbar++; } if((y==0)&&(x!=0)&&(x!=breite-1)) //Randzellen oben { if(calcfeld[x-1][y]==1) nachbar++; if(calcfeld[x-1][y+1]==1) nachbar++; if(calcfeld[x][y+1]==1) nachbar++; if(calcfeld[x+1][y]==1) nachbar++; if(calcfeld[x+1][y+1]==1) nachbar++; if(calcfeld[x-1][hoehe-1]==1) nachbar++; if(calcfeld[x][hoehe-1]==1) nachbar++; if(calcfeld[x+1][hoehe-1]==1) nachbar++; } if((x==breite-1)&&(y!=0)&&(y!=hoehe-1)) //Randzellen rechts { if(calcfeld[x-1][y]==1) nachbar++; if(calcfeld[x-1][y-1]==1) nachbar++; if(calcfeld[x-1][y+1]==1) nachbar++; if(calcfeld[x][y-1]==1) nachbar++; if(calcfeld[x][y+1]==1) nachbar++; if(calcfeld[0][y-1]==1) nachbar++; if(calcfeld[0][y]==1) nachbar++; if(calcfeld[0][y+1]==1) nachbar++; } if((y==hoehe-1)&&(x!=0)&&(x!=breite-1)) //Randzellen unten { if(calcfeld[x-1][y]==1) nachbar++; if(calcfeld[x-1][y-1]==1) nachbar++; if(calcfeld[x-1][0]==1) nachbar++; if(calcfeld[x][y-1]==1) nachbar++; if(calcfeld[x][0]==1) nachbar++; if(calcfeld[x+1][y-1]==1) nachbar++; if(calcfeld[x+1][y]==1) nachbar++; if(calcfeld[x+1][0]==1) nachbar++; } } else { //reguläre Zelle: if(calcfeld[x-1][y]==1) nachbar++; if(calcfeld[x-1][y-1]==1) nachbar++; if(calcfeld[x-1][y+1]==1) nachbar++; if(calcfeld[x][y-1]==1) nachbar++; if(calcfeld[x][y+1]==1) nachbar++; if(calcfeld[x+1][y-1]==1) nachbar++; if(calcfeld[x+1][y]==1) nachbar++; if(calcfeld[x+1][y+1]==1) nachbar++; } //Anzahl der Nachbarn wird ausgewertet if((feld[x][y]==0)&&(nachbar==3)) feld[x][y]=1; if((feld[x][y]==1)&&(nachbar<2)) feld[x][y]=1; if((feld[x][y]==1)&&((nachbar==2)||(nachbar==3))) feld[x][y]==1; if((feld[x][y]==1)&&(nachbar<3)) feld[x][y]==0; } } printf("\n\nNach Berechnung:%d\n", feld[4][4]); } //Wird zu beginn einmal ausgeführt, um alle werte im array zuerst auf null zu setzen und dann mit 0 oder 1 zu besetzen. void start(int breite, int hoehe) { int feld[breite][hoehe]; printf("\n\nVor Nullsetzung: %d\n", feld[4][4]); //Werte werden auf 0 gesetzt for (int y=0; y<hoehe; y++) { for(int x=0; x<breite; x++) { feld[x][y]=0; } } printf("\n\nNach Nullsetzung: %d\n", feld[4][4]); //Werte werden zufällig auf 0 oder 1 gesetzt for(int x=0; x<breite; x++) { for(int y=0; y<hoehe; y++) { feld[x][y]=rand()%2; } } printf("\n\nNach Zufall: %d\n", feld[4][4]); } //Die für das Array berechneten Werte werden ausgegeben (x für 1 und . für 0) void show(int breite, int hoehe) { int feld[breite][hoehe]; printf("\n\nVor Show:%d\n", feld[4][4]); for (int y=0; y<hoehe; y++) { for(int x=0; x<breite; x++) { if (feld[x][y]==1) { printf("x "); } else { printf(". "); } } printf("\n"); } printf("\n\nNach Show:%d\n", feld[4][4]); } //Die Eingabe wird überprüft. (min 3x3, max 20x20) int check(int breite, int hoehe) { if(hoehe<3||breite<3) { printf("\nFeld zu klein!"); return 1; } if(hoehe>20||breite>20) { printf("\nFeld zu groß"); return 1; } return 0; } Die printfs in den Funktionen dienen mir nur zur Kontrolle der werte zu verschiedenen Zeitpunkten. So läuft das Programm zwar, allerdings nicht sinnvoll, da jede Funktion das Array "feld" neu deklariert und die verschiedenen Funktionen daher nicht, wie gewünscht, am selben Array arbeiten. Ich hoffe es blickt wer durch Danke im Vorraus!! Bernhard

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...