-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMain_Life.c
More file actions
100 lines (95 loc) · 2.9 KB
/
Copy pathMain_Life.c
File metadata and controls
100 lines (95 loc) · 2.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include <stdlib.h>
#include <stdio.h>
#define LINE_NUMBER 5
#define COLUMN_NUMBER 5
#define MAX_LENGTH 3
void print_result (int ms[LINE_NUMBER][COLUMN_NUMBER])
{
int i1, i2;
for (i1=0; i1<LINE_NUMBER; i1++) {
puts("");
for (i2=0; i2<COLUMN_NUMBER; i2++)
printf ("%2d", ms[i1][i2]);
}
}
int life(int ms[LINE_NUMBER][COLUMN_NUMBER], int y, int x)
{
int i=0;
x--;
if (x<0) x+=COLUMN_NUMBER;
if (ms[y][x]==1) i++;
y--;
if (y<0) y+=LINE_NUMBER;
if (ms[y][x]==1) i++;
x++;
if (x>=COLUMN_NUMBER) x-=COLUMN_NUMBER;
if (ms[y][x]==1) i++;
x++;
if (x>=COLUMN_NUMBER) x-=COLUMN_NUMBER;
if (ms[y][x]==1) i++;
y++;
if (y>=LINE_NUMBER) y-=LINE_NUMBER;
if (ms[y][x]==1) i++;
y++;
if (y>=LINE_NUMBER) y-=LINE_NUMBER;
if (ms[y][x]==1) i++;
x--;
if (x<0) x+=COLUMN_NUMBER;
if (ms[y][x]==1) i++;
x--;
if (x<0) x+=COLUMN_NUMBER;
if (ms[y][x]==1) i++;
y--;
if (y<0) y+=LINE_NUMBER;
x++;
if (x>=COLUMN_NUMBER) x-=COLUMN_NUMBER;
if (ms[y][x]==0)
if (i==3) return 1;
else return 0;
else
if (i==2 || i==3)
return 1;
else return 0;
}
int next_generation (int ms[LINE_NUMBER][COLUMN_NUMBER])
{
int i1, i2, next_generation_ms [LINE_NUMBER][COLUMN_NUMBER];
for (i1=0; i1<LINE_NUMBER; i1++)
for (i2=0; i2<COLUMN_NUMBER; i2++)
next_generation_ms[i1][i2]=life (ms, i1, i2);
for (i1=0; i1<LINE_NUMBER; i1++)
for (i2=0; i2<COLUMN_NUMBER; i2++)
ms[i1][i2]=next_generation_ms[i1][i2];
print_result (next_generation_ms);
puts ("");
return ms[LINE_NUMBER][COLUMN_NUMBER];
}
int main ()
{
FILE *f;
int generetion, i1, i2, ms[LINE_NUMBER][COLUMN_NUMBER], mas[COLUMN_NUMBER*LINE_NUMBER]={0, 0, 0, 0, 0,
0, 0, 1, 0, 0,
0, 0, 0, 1, 0,
0, 1, 1, 1, 0,
0, 0, 0, 0, 0};
char char_n[MAX_LENGTH];
if (!(f=fopen ("file", "w+b")))
return 0;
fwrite (mas, sizeof(int), COLUMN_NUMBER*LINE_NUMBER, f);
rewind (f);
printf ("Enter number of generations: ");
while (1) {
fgets (char_n, MAX_LENGTH, stdin);
generetion=strtol (char_n, NULL, 10);
if (generetion>0)
break;
}
for (i1=0; i1<LINE_NUMBER; i1++)
fread (ms[i1], sizeof(int), COLUMN_NUMBER, f);
for (i1=0; i1<LINE_NUMBER; i1++)
for (i2=0; i2<COLUMN_NUMBER; i2++)
if (ms[i1][i2]!=0) ms[i1][i2]=1;
for (i1=0; i1<generetion; i1++)
ms[LINE_NUMBER][COLUMN_NUMBER]=next_generation (ms);
fclose (f);
}