praca domowa 'gra w życie'
Ostatnio zmodyfikowano 2013-01-23 11:42
coolpawel Temat założony przez niniejszego użytkownika |
praca domowa 'gra w życie' » 2013-01-22 20:14:07 Witam, dostałem takie zadanie domowe na zaliczenie semestru: Dana jest dwuwymiarowa tablica 10x10 symbolizująca komórki. Tablicę należy losowo wypełnić cyframi „1” lub „0”. Można przyjąć, że „0” oznacza martwą komórkę natomiast „1” żywą komórkę. Typowa komórka ma 8 sąsiadów (z lewej, z prawej, z góry, z dołu oraz czterech po skosach). Dana komórka zmienia swój stan (żywa lub martwa) wg następujących reguł: - komórka ożywa gdy ma dokładnie trzech żywych sąsiadów - komórka pozostaje żywa gdy ma 2 lub 3 sąsiadów - komórka umiera gdy ma mniej niż 2 sąsiadów (umiera z samotności) - komórka umiera gdy ma więcej niż 4 sąsiadów (umiera z przeludnienia) Program ma wyświetlać postać tablicy po każdej z 10 faz życia. Najbardziej chodzi mi o ostatnią linijkę polecenia, bo nie wiem czy dobrze wstawiłem funkcję for(int i=0;i<=10;i++). Po tym zabiegu program zaczął wyświetlać co drugą fazę życia nie jako tablice 10x10 tylko kolumne pod kolumną. Mam jeszcze jedno pytanie dlaczego tylko co drugą faze pyta czy chce zobaczyć kolejną? Miałem kiedyś c++ ale sporo zapomniałem i nie mogę sobie poradzić ;/ # include <iostream> # include <time.h> # include <conio.h>
using namespace std;
int wyswietl( int tab[ 10 ][ 10 ] ) { int licznik = 0; for( int i = 0; i < 10; i++ ) { cout << endl; for( int j = 0; j < 10; j++ ) { if( tab[ i ][ j ] == 1 ) licznik++; cout << tab[ i ][ j ] << " "; } } cout << endl << endl << "Pozostalo przy zyciu " << licznik << " komorek" << endl; return 0; } int zmien( int tab[ 10 ][ 10 ] ) { for( int x = 0; x < 10; x++ ) { for( int y = 0; y < 10; y++ ) { int ilosc = 0; if( tab[ y ][ y ] == 0 ) { if( tab[ x ][ y - 1 ] == 1 ) ilosc++; if( tab[ x - 1 ][ y ] == 1 ) ilosc++; if( tab[ x - 1 ][ y - 1 ] == 1 ) ilosc++; if( tab[ x + 1 ][ y - 1 ] == 1 ) ilosc++; if( tab[ x + 1 ][ y ] == 1 ) ilosc++; if( tab[ x - 1 ][ y + 1 ] == 1 ) ilosc++; if( tab[ x ][ y + 1 ] == 1 ) ilosc++; if( tab[ x + 1 ][ y + 1 ] == 1 ) ilosc++; if( ilosc == 3 ) { tab[ x ][ y ] = 1; } } if( tab[ x ][ y ] == 1 ) { if( tab[ x ][ y - 1 ] == 1 ) ilosc++; if( tab[ x - 1 ][ y ] == 1 ) ilosc++; if( tab[ x - 1 ][ y - 1 ] == 1 ) ilosc++; if( tab[ x + 1 ][ y - 1 ] == 1 ) ilosc++; if( tab[ x + 1 ][ y ] == 1 ) ilosc++; if( tab[ x - 1 ][ y + 1 ] == 1 ) ilosc++; if( tab[ x ][ y + 1 ] == 1 ) ilosc++; if( tab[ x + 1 ][ y + 1 ] == 1 ) ilosc++; if( ilosc == 2 || ilosc == 3 ) { tab[ x ][ y ] = 1; } if( ilosc < 2 ) { tab[ x ][ y ] = 0; } if( ilosc >= 4 ) { tab[ x ][ y ] = 0; } } } } cout << endl; wyswietl( tab ); return 0; } int generuj() { for( int i = 0; i <= 10; i++ ) { char a; int tab[ 10 ][ 10 ], licznik = 0; srand( time( 0 ) ); for( int i = 0; i < 10; i++ ) { cout << endl; for( int j = 0; j < 10; j++ ) { tab[ i ][ j ] = rand() % 2; if( tab[ i ][ j ] == 1 ) licznik++; cout << tab[ i ][ j ] << " " << endl; } } cout << endl << endl << "Zywych komorek: " << licznik << endl; cout << "Czy chesz zobaczyc kolejna faze zycia ?(T/N) : "; cin >> a; if( a == 't' || a == 'T' ) { system( "cls" ); zmien( tab ); getch(); } } return 0; }
int main() { char a; generuj(); cout << endl; } |
|
kubawal |
» 2013-01-22 20:17:25 Dak kod w [cpp]...[/cpp]. |
|
kejkun |
» 2013-01-22 20:22:34 |
|
coolpawel Temat założony przez niniejszego użytkownika |
» 2013-01-22 20:40:55 a moglibyście napisać co można edytować w tym programie co podałem, bo tego ze strony w ogóle nie rozumiem i ma wiele błędów ;/ |
|
Berux |
» 2013-01-22 21:04:49 Napewno "zainkluduj" <cstdlib>
chodzi mi tutaj między innymi o funkcje rand() |
|
coolpawel Temat założony przez niniejszego użytkownika |
» 2013-01-22 21:22:47 zmieniłem troche kod: usunalem z niego to: cout << endl << endl << "Zywych komorek: " << licznik << endl;
cout << "Czy chesz zobaczyc kolejna faze zycia ?(T/N) : "; cin >> a; if( a == 't' || a == 'T' ) Moglibyście sprawdzić czy teraz działa on zgodnie z poleceniem z pierwszego postu? # include <iostream> # include <time.h> # include <conio.h>
using namespace std;
int wyswietl( int tab[ 10 ][ 10 ] ) { int licznik = 0; for( int i = 0; i < 10; i++ ) { cout << endl; for( int j = 0; j < 10; j++ ) { if( tab[ i ][ j ] == 1 ) licznik++; cout << tab[ i ][ j ] << " "; } } cout << endl << endl << "Pozostalo przy zyciu " << licznik << " komorek" << endl << "Nacisnij dowolny klawisz..."; return 0; } int zmien( int tab[ 10 ][ 10 ] ) { for( int x = 0; x < 10; x++ ) { for( int y = 0; y < 10; y++ ) { int ilosc = 0; if( tab[ y ][ y ] == 0 ) { if( tab[ x ][ y - 1 ] == 1 ) ilosc++; if( tab[ x - 1 ][ y ] == 1 ) ilosc++; if( tab[ x - 1 ][ y - 1 ] == 1 ) ilosc++; if( tab[ x + 1 ][ y - 1 ] == 1 ) ilosc++; if( tab[ x + 1 ][ y ] == 1 ) ilosc++; if( tab[ x - 1 ][ y + 1 ] == 1 ) ilosc++; if( tab[ x ][ y + 1 ] == 1 ) ilosc++; if( tab[ x + 1 ][ y + 1 ] == 1 ) ilosc++; if( ilosc == 3 ) { tab[ x ][ y ] = 1; } } if( tab[ x ][ y ] == 1 ) { if( tab[ x ][ y - 1 ] == 1 ) ilosc++; if( tab[ x - 1 ][ y ] == 1 ) ilosc++; if( tab[ x - 1 ][ y - 1 ] == 1 ) ilosc++; if( tab[ x + 1 ][ y - 1 ] == 1 ) ilosc++; if( tab[ x + 1 ][ y ] == 1 ) ilosc++; if( tab[ x - 1 ][ y + 1 ] == 1 ) ilosc++; if( tab[ x ][ y + 1 ] == 1 ) ilosc++; if( tab[ x + 1 ][ y + 1 ] == 1 ) ilosc++; if( ilosc == 2 || ilosc == 3 ) { tab[ x ][ y ] = 1; } if( ilosc < 2 ) { tab[ x ][ y ] = 0; } if( ilosc >= 4 ) { tab[ x ][ y ] = 0; } } } } cout << endl; wyswietl( tab ); return 0; } int generuj() { for( int i = 1; i <= 10; i++ ) { char a; int tab[ 10 ][ 10 ], licznik = 0; srand( time( 0 ) ); for( int i = 0; i < 10; i++ ) { cout << endl; for( int j = 0; j < 10; j++ ) { tab[ i ][ j ] = rand() % 2; if( tab[ i ][ j ] == 1 ) licznik++; cout << tab[ i ][ j ] << " " << endl; } } { system( "cls" ); zmien( tab ); getch(); } } return 0; }
int main() { char a; generuj(); cout << endl; } |
|
adam_1234_adam |
» 2013-01-22 21:35:19 srand(time(NULL)) umieść w main() a nie w pętli |
|
coolpawel Temat założony przez niniejszego użytkownika |
» 2013-01-22 21:39:55 co to zmienia w działaniu programu, bo u mnie działa tak jak wczesniej ? |
|
« 1 » 2 |