Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: marcodaran en 29 de Mayo 2017, 05:16
-
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 ;
}
-
Buenas marcodaran, he intentado compilar el código y me da un error en la línea 97
for(i=0;i<ej.y;i++)
error 'i' undeclared (first use in this function)
El código no parece atenerse al estándar C
Salu2