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

Problema con Array

Estas en el tema de Problema con Array en el foro de C/C++ en Foros del Web. Hola, Quería presentaros un problema que tengo, cree una función que me crea una serie de valores aleatorios que mete dentro de un array de ...
  #1 (permalink)  
Antiguo 29/01/2010, 07:21
 
Fecha de Ingreso: enero-2010
Mensajes: 2
Antigüedad: 14 años, 3 meses
Puntos: 0
Problema con Array

Hola,

Quería presentaros un problema que tengo, cree una función que me crea una serie de valores aleatorios que mete dentro de un array de enteros perteneciente a una estructura definida como cromosomas. La función lo hace todo muy bien, imprimo los valores dentro de un fichero bien, luego regreso al main, y cuando lo imprimo en otro fichero, me cambia el último valor. Esto por qué se debe?.

Espero me podáis ayudar, y siento si me expresé mal, es mi primer post en este foro..

Gracias!

Eduardo
  #2 (permalink)  
Antiguo 29/01/2010, 07:38
 
Fecha de Ingreso: agosto-2009
Ubicación: Cartagena, Colombia
Mensajes: 516
Antigüedad: 14 años, 8 meses
Puntos: 13
Respuesta: Problema con Array

Puedes poner el codigo que tienes para examinarlo
__________________
Un camino de mil millas comienza por el primer paso. Lao Tse
  #3 (permalink)  
Antiguo 29/01/2010, 09:32
 
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
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 15:46.