Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

praca domowa 'gra w życie'

Ostatnio zmodyfikowano 2013-01-23 11:42
Autor Wiadomość
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ć ;/

C/C++
# 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;
   
   
}

P-74706
kubawal
» 2013-01-22 20:17:25
Dak kod w [cpp]...[/cpp].
P-74708
kejkun
» 2013-01-22 20:22:34
P-74710
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 ;/
P-74715
Berux
» 2013-01-22 21:04:49
Napewno "zainkluduj" <cstdlib>

chodzi mi tutaj między innymi o funkcje rand()
P-74722
coolpawel
Temat założony przez niniejszego użytkownika
» 2013-01-22 21:22:47
zmieniłem troche kod: usunalem z niego to:
C/C++
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?



C/C++
# 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;
   
   
}
P-74729
adam_1234_adam
» 2013-01-22 21:35:19
srand(time(NULL)) umieść w main() a nie w pętli
P-74731
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 ?
P-74732
« 1 » 2
  Strona 1 z 2 Następna strona