Proszę o sprawdzenie poprawności działania poniższego (amatorskiego) kodu, to moja pierwsza próba napisania takiego automatu.
Program zapisuje w drugiej tablicy wartości, które otrzymuje dzięki tablicy pierwszej i poniższym regułom (elementy skrajne, które nie posiadają dwóch sąsiadów, generują liczbę na podstawie jednego sąsiada i elementu z drugiego końca tablicy)
Reguły (czarne okienko to 1, białe to 0)
Moje pytania:
Dlaczego z lewej strony w konsoli kod jest "ładnie" ścięty, a z prawej nie?
Nie rozumiem dlaczego funkcja newF zwraca czasami 5, wydaje mi się że rozpatrzone w niej są wszystkie przypadki dotyczące zer i jedynek, czyli powinna zwracać tylko jedynki lub zera.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define size 30
int newF(int, int, int);
void arprnt(int a[], int);
void arev(int a[], int b[], int s);
int test(int a[], int);
int main()
{
srand(time(NULL));
int tab[size], ew[size];
int i, num=0;
for(i=0; i<size; ++i)
{
tab[i] = rand()%2;
printf("%d ", tab[i]);
}
int stan = 0;
while(1)
{
if(stan)
{
arev(ew, tab, size);
arprnt(tab, size);
stan = !stan;
num = test(ew, size);
if(!num)
{
return 0;
}
}
else
{
arev(tab, ew, size);
arprnt(ew, size);
stan = !stan;
num = test(tab, size);
if(!num)
{
return 0;
}
}
}
return 0;
}
int newF(int a, int b, int c)
{
if(a==0 && b==0 && c==0)
{
return 0;
}
if(a==1 && b==1 && c==1)
{
return 0;
}
if(a == 1)
{
if(b == 1)
{
if(c == 0)
{
return 1;
}
}
else if(b == 0)
{
if(c == 1)
{
return 0;
}
else
{
return 1;
}
}
}
else if(a == 0)
{
if(b == 1)
{
if(c == 1)
{
return 1;
}
else
{
return 0;
}
}
else
{
if(c == 1)
{
return 1;
}
}
}
return 5;
}
void arprnt(int a[], int b)
{
int i;
printf("\n");
for(i=0; i<b; ++i)
{
if(a[i] == 5) // (a[i] == 5 || a[i] == 1) zeby wypisalo same zera
{
printf(" ");
}
else
{
printf("%d ", a[i]);
}
}
}
void arev(int a[], int b[], int s)
{
int i;
for(i=0; i<s; ++i)
{
if(i == 0)
{
b[i] = newF(a[size-1], a[0], a[1]);
}
if(i == size-1)
{
b[i] = newF(a[size-2], a[size-1], a[0]);
}
b[i] = newF(a[i-1], a[i], a[i+1]);
}
}
int test(int a[], int c)
{
int i, num=0;
for(i=1; i<c; ++i)
{
if(a[0] != a[i])
{
num++;
}
}
return num;
}