29/01/2010, 09:32
|
| | Fecha de Ingreso: enero-2010
Mensajes: 2
Antigüedad: 15 años 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 |