Program w c (Gra w zycie)

0
#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)

0

A kompilator nie przyznaje się co do tego czemu mu się to nie podoba?
Ustaw kompilacje w wersji C99 dla gcc: -std=c99

0

Taki komunikat mi wyswietla

Message : Thread Error: Nieprawidłowe dojście (6)
Address : 0x0012765C

0

Kompilacja jest ustawiona na C99

2

Moja rada, wywal ten program i zacznij od nowa.

0

musisz zainkludować dwie dodaktowe biblioteki dla "sleep" i "system"
#include <stdlib.h>
#include <windows.h>
i wszystko śmiga poprawnie

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0