Name: Anonymous 2010-06-07 16:25
Hello, /prog/,
game of life, doesn't run if the height of the grid is > than width. It crashes when creating a border.. I just don't know anymore.
#include <stdio.h>
#include <stdlib.h>
void border(int height, int width, int **grid)
{
int i, j;
i = 0;
for(j=0;j< height;j++)
{
*(*(grid+i)+j) = '0';
}
j = 0;
for(i=0;i< (width-1);i++)
{
*(*(grid+i)+j) = '0';
}
i = (width-1);
for(j=0;j< height;j++)
{
*(*(grid+i)+j) = '0';
}
j = (height-1);
for(i=0;i< (width-1);i++)
{
*(*(grid+i)+j) = '0';
}
}
void print(int **grid, int width, int height)
{
int i, j;
for(i=0;i< width;i++)
{
for(j=0;j< height;j++)
{
printf("%c",*(*(grid+i)+j));
} printf("\n");
}
}
void play(int width, int height, int **grid, int **grid2)
{
int i, j, live=0,dead=0;
for(i=1;i< (width-1);i++)
{
for(j=1;j< (height-1);j++)
{
printf("%c",*(*(grid+i)+j));
} printf("\n");
}
for(i=1;i< (width-1);i++)
{
for(j=1;j< (height-1);j++)
{
if ( *(*(grid+i)+(j-1)) == '0')
++dead;
if ((*(*(grid+i)+(j+1))) == '0')
++dead;
if ((*(*(grid+(i-1))+(j-1))) == '0')
++dead;
if ((*(*(grid+(i-1))+j)) == '0')
++dead;
if ((*(*(grid+(i-1))+(j+1))) == '0')
++dead;
if ((*(*(grid+(i+1))+(j-1))) == '0')
++dead;
if ((*(*(grid+(i+1))+j)) == '0')
++dead;
if ((*(*(grid+(i+1))+(j+1))) == '0')
++dead;
if ( *(*(grid+i)+(j-1)) == '*')
++live;
if ((*(*(grid+i)+(j+1))) == '*')
++live;
if ((*(*(grid+(i-1))+(j-1))) == '*')
++live;
if ((*(*(grid+(i-1))+j)) == '*')
++live;
if ((*(*(grid+(i-1))+(j+1))) == '*')
++live;
if ((*(*(grid+(i+1))+(j-1))) == '*')
++live;
if ((*(*(grid+(i+1))+j)) == '*')
++live;
if ((*(*(grid+(i+1))+(j+1))) == '*')
++live;
if (*(*(grid+i)+j) == '0' && live == 3)
*(*(grid2+i)+j) = '*';
else *(*(grid2+i)+j) = '0';
if (*(*(grid+i)+j) == '*' && live < 2 )
*(*(grid2+i)+j) = '0';
if (*(*(grid+i)+j) == '*' && live > 3 )
*(*(grid2+i)+j) = '0';
if (*(*(grid+i)+j) == '*' && (live == 3 || live == 2) )
*(*(grid2+i)+j) = '*';
live = 0; dead = 0;
}
}
system("pause");
system("cls");
}
void main(void) {
FILE *filas;
int width = 0,a;
int height = 0;
int **grid, **grid2, i=1, j=1;
int line[100]={};
char newl, c;
if((filas=fopen("grid.txt","r"))==NULL)
{
printf("err\n"); exit(1);
}
fgets(line, 100, filas);
width = strlen(line)+1;
rewind(filas);
do {
newl = getc(filas);
if ( newl == '\n' )
height++;
} while ( newl != EOF);
rewind(filas);
height = height + 3;
a=height;
height=width;
width=a;
if((grid = (int**)malloc((sizeof(int*))*(width))) == NULL)
exit(EXIT_FAILURE);
for( i = 0 ; i < height ; i++ )
if((*(grid+i) = (int*)malloc(sizeof(int)*(height))) == NULL)
exit(EXIT_FAILURE);
if((grid2 = (int**)malloc((sizeof(int*))*(width))) == NULL)
exit(EXIT_FAILURE);
for( i = 0 ; i < height ; i++ )
if((*(grid2+i) = (int*)malloc(sizeof(int)*(height))) == NULL)
exit(EXIT_FAILURE);
i = 1; j = 1;
do
{
c = getc(filas);
if ( c != 10 && c != EOF )
{
*(*(grid+i)+j) = c;
printf("i-%d : j-%d %c\n",i, j, *(*(grid+i)+j) );
if ( i< (width-1) )
if ( j< (height-2) )
j++;
else
{
j=1;
i++;
}
}
}while (c!=EOF);
printf("\n\n\n\n\n\n");
//border
border(height, width, grid);
border(height, width, grid2);
print(grid, width, height);
printf("\n\n\n");
//play
do{
play(width, height, grid, grid2);
play(width, height, grid2, grid);
} while(1);
}
game of life, doesn't run if the height of the grid is > than width. It crashes when creating a border.. I just don't know anymore.
#include <stdio.h>
#include <stdlib.h>
void border(int height, int width, int **grid)
{
int i, j;
i = 0;
for(j=0;j< height;j++)
{
*(*(grid+i)+j) = '0';
}
j = 0;
for(i=0;i< (width-1);i++)
{
*(*(grid+i)+j) = '0';
}
i = (width-1);
for(j=0;j< height;j++)
{
*(*(grid+i)+j) = '0';
}
j = (height-1);
for(i=0;i< (width-1);i++)
{
*(*(grid+i)+j) = '0';
}
}
void print(int **grid, int width, int height)
{
int i, j;
for(i=0;i< width;i++)
{
for(j=0;j< height;j++)
{
printf("%c",*(*(grid+i)+j));
} printf("\n");
}
}
void play(int width, int height, int **grid, int **grid2)
{
int i, j, live=0,dead=0;
for(i=1;i< (width-1);i++)
{
for(j=1;j< (height-1);j++)
{
printf("%c",*(*(grid+i)+j));
} printf("\n");
}
for(i=1;i< (width-1);i++)
{
for(j=1;j< (height-1);j++)
{
if ( *(*(grid+i)+(j-1)) == '0')
++dead;
if ((*(*(grid+i)+(j+1))) == '0')
++dead;
if ((*(*(grid+(i-1))+(j-1))) == '0')
++dead;
if ((*(*(grid+(i-1))+j)) == '0')
++dead;
if ((*(*(grid+(i-1))+(j+1))) == '0')
++dead;
if ((*(*(grid+(i+1))+(j-1))) == '0')
++dead;
if ((*(*(grid+(i+1))+j)) == '0')
++dead;
if ((*(*(grid+(i+1))+(j+1))) == '0')
++dead;
if ( *(*(grid+i)+(j-1)) == '*')
++live;
if ((*(*(grid+i)+(j+1))) == '*')
++live;
if ((*(*(grid+(i-1))+(j-1))) == '*')
++live;
if ((*(*(grid+(i-1))+j)) == '*')
++live;
if ((*(*(grid+(i-1))+(j+1))) == '*')
++live;
if ((*(*(grid+(i+1))+(j-1))) == '*')
++live;
if ((*(*(grid+(i+1))+j)) == '*')
++live;
if ((*(*(grid+(i+1))+(j+1))) == '*')
++live;
if (*(*(grid+i)+j) == '0' && live == 3)
*(*(grid2+i)+j) = '*';
else *(*(grid2+i)+j) = '0';
if (*(*(grid+i)+j) == '*' && live < 2 )
*(*(grid2+i)+j) = '0';
if (*(*(grid+i)+j) == '*' && live > 3 )
*(*(grid2+i)+j) = '0';
if (*(*(grid+i)+j) == '*' && (live == 3 || live == 2) )
*(*(grid2+i)+j) = '*';
live = 0; dead = 0;
}
}
system("pause");
system("cls");
}
void main(void) {
FILE *filas;
int width = 0,a;
int height = 0;
int **grid, **grid2, i=1, j=1;
int line[100]={};
char newl, c;
if((filas=fopen("grid.txt","r"))==NULL)
{
printf("err\n"); exit(1);
}
fgets(line, 100, filas);
width = strlen(line)+1;
rewind(filas);
do {
newl = getc(filas);
if ( newl == '\n' )
height++;
} while ( newl != EOF);
rewind(filas);
height = height + 3;
a=height;
height=width;
width=a;
if((grid = (int**)malloc((sizeof(int*))*(width))) == NULL)
exit(EXIT_FAILURE);
for( i = 0 ; i < height ; i++ )
if((*(grid+i) = (int*)malloc(sizeof(int)*(height))) == NULL)
exit(EXIT_FAILURE);
if((grid2 = (int**)malloc((sizeof(int*))*(width))) == NULL)
exit(EXIT_FAILURE);
for( i = 0 ; i < height ; i++ )
if((*(grid2+i) = (int*)malloc(sizeof(int)*(height))) == NULL)
exit(EXIT_FAILURE);
i = 1; j = 1;
do
{
c = getc(filas);
if ( c != 10 && c != EOF )
{
*(*(grid+i)+j) = c;
printf("i-%d : j-%d %c\n",i, j, *(*(grid+i)+j) );
if ( i< (width-1) )
if ( j< (height-2) )
j++;
else
{
j=1;
i++;
}
}
}while (c!=EOF);
printf("\n\n\n\n\n\n");
//border
border(height, width, grid);
border(height, width, grid2);
print(grid, width, height);
printf("\n\n\n");
//play
do{
play(width, height, grid, grid2);
play(width, height, grid2, grid);
} while(1);
}