El programa es un autómata celular El problema es que al correrlo directamente no corre, el problema se encuentra en la función CrearNuevo pero no consigo encontrarlo no se si este mal la declaración de la función con los parámetros de la estructura.
#include <stdio.h>
#include <stdlib.h>
struct datos{
int x;
int y;
int matriz2[1000][1000];
}ej;
int vecinoIzquierdo(struct datos *ej,int i,int j);
int vecinoDerecho(int i,int j,struct datos *ej );
void convertir(int convertido[],int regla);
struct datos CrearNueva(struct datos *ej,int convertido[]);
/*
r=vecinoIzquierdo(i,matriz,ej.x,ej.y);
*/
int main()
{
/*
int i,j;
int convertido[8];
int regla;
printf("\n holakjd");
struct datos ej;
printf("dar el tamano de la matriz a crear para nuestro automata celular(x,y)");
do {
printf("\n dar el tamano de la matriz a crear (x)");
scanf("%d",&ej.x);
}
while(ej.x<0);
printf("\n holakjd");
do{
printf("dar el tamano de la matriz a crear (y)");
scanf("%d",&ej.y);
}
while (ej.y<=0);
int matriz[ej.y][ej.x];
for(j=0;j<ej.x;j++)
{
i=0;
matriz[i][j]=rand() % 2;
}
for(i=1;i<ej.y;i++)
{
for(j=0;j<ej.x;j++)
{
matriz[i][j]=0;
}
}
for(i=0;i<ej.y;i++)
{
printf("\n");
for(j=0;j<ej.x;j++)
{
printf("%d",matriz[i][j]);
}
}
printf("\n dar un numero para crear la regla");
scanf("%d",®la);
convertir(convertido,regla);
for(i=0;i<8;i++)
{
printf("\n i %d", convertido[i]);
}
/*matriz3=matriz[ej.y][ej.x];*/
for(i=0;i<ej.y;i++)
{
printf("\n");
for(j=0;j<ej.x;j++)
{
ej.matriz2[i][j]=matriz[i][j];
}
}
for(j=0;j<ej.y;j++)
{
printf("\n");
for(i=0;i<ej.x;i++)
{
ej=CrearNueva(&ej,convertido);
}
}
}
void convertir(int convertido[],int regla)
{
int contador=0;
int *num, *aux;
num=®la;
while(*num>0)
{
convertido[contador]=*num%2;
contador++;
*num=*num/2;
}
while(contador<8){
convertido[contador]=0;
contador++;
}
return convertido;
}
struct datos CrearNueva(struct datos *ej,int convertido[]){;
struct datos nuevo;
int i;
int j;
nuevo.x=(*ej).x;
nuevo.y=(*ej).y;
for(j=0;j<(*ej).y;j++)
{
for(i=0;i<(*ej).x;i++)
{
if ((*ej).matriz2[vecinoIzquierdo(&ej,i,j)]==0 && (*ej).matriz2[i]==0 && (*ej).matriz2[vecinoDerecho(&ej,i,j)]==0)
{
nuevo.matriz2[j][i]=convertido[0];
}
if((*ej).matriz2[vecinoIzquierdo(&ej,i,j)]==0 && (*ej).matriz2[i]==0 && (*ej).matriz2[vecinoDerecho(&ej,i,j)]==1)
{
nuevo.matriz2[j][i]=convertido[1];
}
if((*ej).matriz2[vecinoIzquierdo(&ej,i,j)]==0 && (*ej).matriz2[i]==1 && (*ej).matriz2[vecinoDerecho(&ej,i,j)]==0)
{
nuevo.matriz2[j][i]=convertido[2];
}
if((*ej).matriz2[vecinoIzquierdo(&ej,i,j)]==0 && (*ej).matriz2[i]==1 && (*ej).matriz2[vecinoDerecho(&ej,i,j)]==1)
{
nuevo.matriz2[j][i]=convertido[3];
}
if((*ej).matriz2[vecinoIzquierdo(&ej,i,j)]==1 && (*ej).matriz2[i]==0 && (*ej).matriz2[vecinoDerecho(&ej,i,j)]==0)
{
nuevo.matriz2[j][i]=convertido[4];
}
if((*ej).matriz2[vecinoIzquierdo(&ej,i,j)]==1 && (*ej).matriz2[i]==0 && (*ej).matriz2[vecinoDerecho(&ej,i,j)]==1)
{
nuevo.matriz2[j][i]=convertido[5];
}
if((*ej).matriz2[vecinoIzquierdo(&ej,i,j)]==1 && (*ej).matriz2[i]==1 && (*ej).matriz2[vecinoDerecho(&ej,i,j)]==0)
{
nuevo.matriz2[j][i]=convertido[6];
}
if((*ej).matriz2[vecinoIzquierdo(&ej,i,j)]==1 && (*ej).matriz2[i]==1 && (*ej).matriz2[vecinoDerecho(&ej,i,j)]==1)
{
nuevo.matriz2[j][i]=convertido[7];
}
}
}
return nuevo;
}
int vecinoIzquierdo(struct datos *ej,int i,int j){
int a;
if(i-1>=0)
{
a=i-1;
}
else{
a=(*ej).matriz2[(*ej).x-1];
}
return a;
}
int vecinoDerecho(int i,int j,struct datos *ej){
int a;
a=((i+1)%((*ej).x));
return a ;
}