Autor Tema: Funciones con Estructuras de parametros autómata celular en C (lenguajeC)  (Leído 2057 veces)

marcodaran

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 1
    • Ver Perfil
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 ;
    }




« Última modificación: 24 de Junio 2017, 19:17 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
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

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".