Foros del Web » Programación para mayores de 30 ;) » C/C++ »

./a.out

Estas en el tema de ./a.out en el foro de C/C++ en Foros del Web. Hola que tal !!. Estoy haciendo una simulación a partículas en un gas. La verdad no sé mucho de programación y en laboratorio nos dieron ...
  #1 (permalink)  
Antiguo 05/12/2008, 11:03
 
Fecha de Ingreso: mayo-2007
Mensajes: 16
Antigüedad: 17 años
Puntos: 0
./a.out

Hola que tal !!.

Estoy haciendo una simulación a partículas en un gas. La verdad no sé mucho de programación y en laboratorio nos dieron el código del programa. Después de mucho ya lo logré compilar sin embargo no logro ejecutarlo, me sale un error de "Segmentation fault"; segun me dicen que es error del programa pero no encuentro nada.
Ahi va el código
-------------------------------------

//simulacion de gases
#include<stdio.h>
#include<math.h>
int N;
float lambda=1.5, energia=0.0,energiaold,n,sig;
float T,A,rx[26],ry[26],L;
void inicio(void);
void montecarlo(void);
float ran(void);
void salida(void);
void energia1(void);
void periodicas(int);
int traslape(int);
main ()
{
inicio ();
montecarlo();
salida();
energia1();
}

void inicio(void)
{
int i,m,j;
float rho,sig=1.0;
N=25;
rho=0.1;
A=(float)N*sig*sig/rho;
L=sqrt(A);

//generar las coordenadas
m=1;
for(i=1;j<=5;++i){
for(j=1;j<=5;++j){
rx[m]=(0.01+(L-0.02/4)*(j-1));
ry[m]=(0.01+(L-0.02/4)*(i-1));
++m;
}}
}
void montecarlo(void)
{
int i,j=1;
float desp=0.4;
energia1();
energiaold=energia;
for(j=1;j<1000;j++)
i=random()%25+1;
do{
rx[i]=rx[i]+desp*(ran()-0.5);
ry[i]=ry[i]+desp*(ran()-0.5);
periodicas(i);
traslape(i);
energia1();
}
while (energia>=energiaold);
}



float ran(void)
{
float r;
r=(float)(random(1000))/1000.0;
return(r);
}
void salida(void){
}

int traslape(int i){
int t=0,k,n,sig;
float dx,dy,d2;
for(k=1; k<=n; ++k)
if (k!=i){
dx=rx[i]-rx[k];
dy=ry[i]-ry[k];
d2=dx*dx+dy*dy;
if(d2<sig*sig) t=1;}
return(t);}

void configuracion(void){
int i;
for(i=1;i<=25;++i) printf("%d %f\t %f\n",i,rx[i],ry[i]);
}


void energia1(void){
int i,j,n;
float rr;
for(i=1;i<=n-1;++i);
for(j=i+1;j<=n;++j){
//distancia entre moleculas.
rr=(rx[i]-rx[j])*(rx[i]-rx[j])+(ry[i]-ry[j])*(ry[i]-ry[j]);
if(rr<=lambda*lambda) energia+=-1;
}}

//subrutinas periodicas.
void periodicas(int i){
if(rx[i]>L) rx[i]-=L;
else if(rx[i]<0.0) rx[i]+=L;
if(ry[i]>L) ry[i]-=L;
else if(ry[i]<0.0) rx[i]+=L;
}

--------------------------
Si alguien sabe como lo puedo arreglar sería muy bueno.

Gracias!!
  #2 (permalink)  
Antiguo 05/12/2008, 15:37
 
Fecha de Ingreso: febrero-2006
Mensajes: 49
Antigüedad: 18 años, 2 meses
Puntos: 1
Respuesta: ./a.out

Buenasss

Uno de los motivos que veo a simple vista, es que en este fragmento

Código HTML:
//generar las coordenadas
m=1;
for(i=1;j<=5;++i){
for(j=1;j<=5;++j){
rx[m]=(0.01+(L-0.02/4)*(j-1));
ry[m]=(0.01+(L-0.02/4)*(i-1));
++m;
}}
pusiste j en el primer for en lugar de i, eso hace que valores queden sin setear, porque el segundo for nunca se hace si la "basura en j" es mayor a 5, y si es menor se hace una vez sola. Otra cosa, acordate que los elementos de los vectores comienzan a numerarse desde el 0, vos seteas m en 1, estas dejando la primera posicion del vector con basura, eso puede ocasionarte problemas si la accedes.

Fijate si con eso se arregla. Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:29.