#include <stdio.h>
#include <time.h>
#define ROZMIAR 10 //definiujemy ilosc kolumn
#define cykle 35//definiujemy ilosc cykli zyciowych dla komorek
void akcja(int **p,int w,int k,int sasiad);
int **stworz_tablice();
void wyswietl_plansze(int **plansza);
int **cykl_zyciowy(int **plansza);
char martwa=176;
char zywa=219;
int main(void)
{
srand((unsigned int) time(NULL));
int **plansza = stworz_tablice();
for(int i=0; i<cykle; i++)
{
wyswietl_plansze(plansza);
cykl_zyciowy(plansza);
sleep(10);
system("cls");
}
return 0;
}
//----------------------------------------------------------------------------------------
int **stworz_tablice()
{
int **p = (int **) malloc (ROZMIAR * sizeof(int *));
p[0]=(int*)malloc(ROZMIAR * ROZMIAR *sizeof(int));
for(int i =1; i < ROZMIAR; i++)
{
p[i] = p[0]+ i * ROZMIAR;
}
char martwa=176;
char zywa=219;
for(int w = 0; w < ROZMIAR; w++)
for(int k = 0; k < ROZMIAR; k++)
p[w][k] = (rand()%2? martwa : zywa);
return p;
}
//----------------------------------------------------------------------------------------
void wyswietl_plansze(int **plansza)
{
int k,w;
/* RYSUJE GORNA CZESC TABELKI*/
for(k = 0 ; k<ROZMIAR ; k++)
printf(" ");
printf("\n");
/* KONCZY RYSOWAĆ GORNA CZESC TABELKI*/
for(int w = 0; w < ROZMIAR; w++)
{
printf(" -");
for(int k = 0; k < ROZMIAR; k++)
printf("----");
printf("\n |");
for(int k = 0; k < ROZMIAR; k++){
printf(" %c ", plansza[w][k]);
printf("|");
}
printf("\n");
}
printf(" -");
for(k = 0 ; k<ROZMIAR ; k++)
printf("----");
printf("\n");
}
//----------------------------------------------------------------------------------------
int **cykl_zyciowy(int **p)
{
int sasiad=0;
int k, i;
// dla prawego gornego rogu
k=ROZMIAR-1;
if(p[0][k-1]==zywa)
sasiad++;
if(p[1][k-1]==zywa)
sasiad++;
if(p[1][k]==zywa)
sasiad++;
akcja(p,i,k,sasiad);
/// dla lewego gornego rogu
sasiad=0;
i=0;
k=0;
if(p[i][k+1]==zywa)
sasiad++;
if(p[i+1][k+1]==zywa)
sasiad++;
if(p[i+1][k]==zywa)
sasiad++;
akcja(p,i,k,sasiad);
/// dla lewego dolnego rogu
sasiad=0;
i=ROZMIAR-1,k=0;
if(p[i-1][k]==zywa)
sasiad++;
if(p[i][k+1]==zywa)
sasiad++;
if(p[i-1][k+1]==zywa)
sasiad++;
akcja(p,i,k,sasiad);
/// dla prawego dolnego rogu
sasiad=0;
i=ROZMIAR-1,k=ROZMIAR-1;
if(p[i][k-1]==zywa)
sasiad++;
if(p[i-1][k-1]==zywa)
sasiad++;
if(p[i-1][k]==zywa)
sasiad++;
akcja(p,i,k,sasiad);
// dla gory od k 1-8
sasiad=0;
i=0;
for(k=1; k < ROZMIAR - 1; ++k){
if(p[i][k] == zywa){
if(p[i][k-1] == zywa)
sasiad++;
if(p[i+1][k-1] == zywa)
sasiad++;
if(p[i+1][k] == zywa)
sasiad++;
if(p[i+1][k+1] == zywa)
sasiad++;
if(p[i][k+1] == zywa)
sasiad++;
}
if(p[i][k] == martwa){
if(p[i][k-1] == zywa)
sasiad++;
if(p[i+1][k-1] == zywa)
sasiad++;
if(p[i+1][k] == zywa)
sasiad++;
if(p[i+1][k+1] == zywa)
sasiad++;
if(p[i][k+1] == zywa)
sasiad++;
}
akcja(p,i,k,sasiad);
}
// dla doł k 1-8
sasiad=0;
i=9;
for(k=1; k < ROZMIAR - 1; ++k){
if(p[i][k] == zywa){
if(p[i][k-1] == zywa)
sasiad++;
if(p[i-1][k-1] == zywa)
sasiad++;
if(p[i-1][k] == zywa)
sasiad++;
if(p[i-1][k+1] == zywa)
sasiad++;
if(p[i][k+1] == zywa)
sasiad++;
}
if(p[i][k] == martwa){
if(p[i][k-1] == zywa)
sasiad++;
if(p[i-1][k-1] == zywa)
sasiad++;
if(p[i-1][k] == zywa)
sasiad++;
if(p[i-1][k+1] == zywa)
sasiad++;
if(p[i][k+1] == zywa)
sasiad++;
}
akcja(p,i,k,sasiad);
}
// dla lewa str w 1-8
sasiad=0;
k=0;
for(i=1; k < ROZMIAR - 1; ++k){
if(p[i][k] == zywa){
if(p[i-1][k] == zywa)
sasiad++;
if(p[i-1][k+1] == zywa)
sasiad++;
if(p[i][k+1] == zywa)
sasiad++;
if(p[i+1][k+1] == zywa)
sasiad++;
if(p[i+1][k] == zywa)
sasiad++;
}
if(p[i][k] == martwa){
if(p[i-1][k] == zywa)
sasiad++;
if(p[i-1][k+1] == zywa)
sasiad++;
if(p[i][k+1] == zywa)
sasiad++;
if(p[i+1][k+1] == zywa)
sasiad++;
if(p[i+1][k] == zywa)
sasiad++;
}
akcja(p,i,k,sasiad);
}
// dla prawa str 1-8
sasiad=0;
k=9;
for(i=1; k < ROZMIAR - 1; ++k){
if(p[i][k] == zywa){
if(p[i-1][k] == zywa)
sasiad++;
if(p[i-1][k-1] == zywa)
sasiad++;
if(p[i][k-1] == zywa)
sasiad++;
if(p[i+1][k-1] == zywa)
sasiad++;
if(p[i+1][k] == zywa)
sasiad++;
}
if(p[i][k] == martwa){
if(p[i-1][k] == zywa)
sasiad++;
if(p[i-1][k-1] == zywa)
sasiad++;
if(p[i][k-1] == zywa)
sasiad++;
if(p[i+1][k-1] == zywa)
sasiad++;
if(p[i+1][k] == zywa)
sasiad++;
}
akcja(p,i,k,sasiad);
}
sasiad=0;
for(k = 1; k < ROZMIAR - 1; ++k){
for(i = 1; i < ROZMIAR -1; ++i){
if(p[k][i] == zywa){
if(p[k][i+1] == zywa)
sasiad++;
if(p[k+1][i+1] == zywa)
sasiad++;
if(p[k+1][i] == zywa)
sasiad++;
if(p[k+1][i-1] == zywa)
sasiad++;
if(p[k][i-1] == zywa)
sasiad++;
if(p[k-1][i-1] == zywa)
sasiad++;
if(p[k-1][i] == zywa)
sasiad++;
if(p[k-1][i+1] == zywa)
sasiad++;
}
if(p[k][i] == martwa){
if(p[k][i+1] == zywa)
sasiad++;
if(p[k+1][i+1] == zywa)
sasiad++;
if(p[k+1][i] == zywa)
sasiad++;
if(p[k+1][i-1] == zywa)
sasiad++;
if(p[k][i-1] == zywa)
sasiad++;
if(p[k-1][i-1] == zywa)
sasiad++;
if(p[k-1][i] == zywa)
sasiad++;
if(p[k-1][i+1] == zywa)
sasiad++;
}
akcja(p, k, i, sasiad);
}
}
return p;
}
//----------------------------------------------------------------------------------------
void akcja(int **p,int w,int k,int sasiad)
{
if(sasiad == 3)
p[w][k] = zywa;
if(sasiad == 3 && sasiad == 2)
p[w][k] = zywa;
if(sasiad == 1 && sasiad == 0)
p[w][k] = zywa;
if(sasiad >= 4)
p[w][k]=martwa;
}
Mam problem z tym programem, coś nie chce mi go kompilować.
Temat:
Dana jest tablica 10x10 symbolizująca komórki. Tablicę należy w sposób losowo wypełnić liczbami „0” lub „1”. Można przyjąć, że „0” oznacza martwą komórkę a „1” żywą komórkę. Typowa komórka ma ośmiu sąsiadów (z lewej, z prawej, z góry, z dołu oraz czterech po skosach). Komórka zmienia swój stan (żywa lub martwa) wg następujących reguł:
a) komórka staje się żywa gdy ma dokładnie trzech żywych sąsiadów
b) komórka pozostaje żywa gdy ma 2 lub 3 sąsiadów
c) komórka umiera gdy ma mniej niż 2 sąsiadów (umiera z samotności)
d) komórka umiera gdy ma więcej niż 4 sąsiadów (umiera z przeludnienia)