Ver Mensaje Individual
  #3 (permalink)  
Antiguo 29/01/2010, 09:32
yokito1985
 
Fecha de Ingreso: enero-2010
Mensajes: 2
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Problema con Array

typedef struct chrom // creating the chrom structure
{
int bit[50];
float fit;
int cruce;
float bondad;
}chrom;

void generar(chrom cromosoma[30],int n);


main(){
int Ai,Bi,Ci,m,n,i,j,tiempo,inicio=1,maximo,j1;
chrom cromosomas[30];
srand((unsigned) time(NULL));
char *nombre;
int A[25],aleatorio;
float M[25][25];
int S[25];
int B[25];
int T[25];
int m1,n1;
float **coste;
int **x;
float objetivo;
char nombre2[20];
FILE *fichero;
char *nombre3;
nombre3="prueba2-3.txt";
dimensionmatriz(&m,&n,nombre2);

coste=reservar_tabla(m,n);
m1=m;
n1=n;
x=reservar_tablai(m,n);
leerf(coste,S,A,nombre2);

for(i=1;i<=25;i++){
B[i]=A[i];
T[i]=S[i];}
if((fichero=fopen(nombre3, "w+")) == NULL) //
{
printf("ERROR: No se puede abrir el fichero. (Crea el fichero antes)");
exit(1);
}
generar(cromosomas,n);
fprintf(fichero,"\n cromosoma30[3]=%i " ,cromosomas[30].bit[3]);
fprintf(fichero,"Generación:\n");
for(i=1;i<=30;i++){
fprintf(fichero,"\nCromosoma:%i \n",i);
for(j1=1;j1<=(n1+m1-1);j1++){
fprintf(fichero,"%i " ,cromosomas[i].bit[j1]);}
}
fprintf(fichero,"\n cromosoma30[3]=%i " ,cromosomas[30].bit[3]);

fclose(fichero);

void generar(chrom cromosoma[30], int n)
{
int aleatorio,j,i,j1;
int numeros[n];
FILE *fichero2;
char *nombre4;
nombre4="generacion.txt";
if((fichero2=fopen(nombre4, "w+")) == NULL) //
{
printf("ERROR: No se puede abrir el fichero. (Crea el fichero antes)");
exit(1);
}


for(i=1;i<=30;i++){
for (j=1;j<=n;j++)
numeros[j]=0;
for(j=1;j<=n;j++){
inicio:
aleatorio = (int)((n+1)*(rand())/(RAND_MAX+1.0)); //Genero número aleatorio entre 0 y n;
if (aleatorio==0)
aleatorio++; // No puede existir barco 0;
if(numeros[aleatorio]!=1){
numeros[aleatorio]=1;}
else if(numeros[aleatorio]==1){
goto inicio;}
cromosoma[i].bit[j]=aleatorio;

}
}


En generación el cromosoma[30][3] tiene un valor, y luego fuera, en el main imprimo 2 veces el cromosoma[30] antes y después de imprimir en fichero y me cambia. Me parece que es un problema de la stack..

Los datos de entrada los cojo de un fichero.

Gracias!

PD: He cortado partes del código para que no sea tan extenso, partes que no venían al caso para la pregunta