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

Título: Funciones con Estructuras de parametros autómata celular en C (lenguajeC)
Publicado 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.

Código: [Seleccionar]
#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",&regla);

            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=&regla;


     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 ;
    }




Título: Re:Funciones con Estructuras de parametros autómata celular en C (lenguajeC)
Publicado por: Ogramar en 24 de Junio 2017, 19:17
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