Hola buenos dí9as ;D llevo una mañana chunga intentando que una función devuelva un array de 2 elementos, pero solo devuelve bien lo que se encuentra en la posición 0, lo que hay en la posición 1, nada de nada, naranjas de la china, no señor.
¿alguna solución?
es algo como
return el_array
array = funcion();
Pues tienes que en el Return poner la posicion que quieres devolver, de que tipo es la funcion ? Si quieres devolver todo el array tendria que ser de tipo array, lo mejor es que pongas todo el código para que te puedan ver donde esta el problema...
Hala, a chorrro.
Quiero devolver el array entero, para manejarlo dese otro proceso como tal, un array, una colección de elementos.
[code language="bennu"]function int camino(fila,col)
private
dir1=0;
dir2=0;
dir3=0;
dir4=0;
direccion=0;
color=0;
dirs[2];
begin
say("Analizando el camino más ventajoso*****");
if( espacios[fila][col+1]<=3 and espacios[fila][col+1]!=0 )
color=espacios[fila][col+1];
for(i=1;i<_columnas and espacios[fila][col+i]==color;i++)
dir1++;
end
say("la derecha tiene: "+dir1);
/*----*/
end
if(espacios[fila][col-1]<=3 and espacios[fila][col-1]!=0)
color=espacios[fila][col-1];
for(i=1;i>0 and espacios[fila][col-i]==color;i--)
dir2++;
end
say("la izquierda tiene: "+dir2);
/*----*/
end
if(espacios[fila+1][col]<=3 and espacios[fila+1][col]!=0)
color=espacios[fila+1][col];
for(i=1;i<_filas and espacios[fila+i][col]==color;i++)
dir3++;
end
say("abajo tiene: "+dir3);
/*----*/
end
if(espacios[fila-1][col]<=3 and espacios[fila-1][col]!=0)
color=espacios[fila-1][col];
for(i=1;i>0 and espacios[fila-i][col]==color;i--)
dir4++;
say("arriba tiene: "+dir4);
end
/*----*/
end
if(dir1>dir2 and dir1>dir3 and dir1>dir4)
direccion=1;
Say("El camino a tomar es derecha");
elseif(dir2>dir3 and dir2>dir4)
direccion=2;
Say("El camino a tomar es izquierda");
elseif(dir3>dir4)
Say("El camino a tomar es abajo");
direccion=3;
else
Say("El camino a tomar es arriba");
direccion=4;
end
switch(direccion)
case 1://derecha
dirs[0]=0;
dirs[1]=1;
say("Dando instrucciones para ir a la derecha "+dirs[0]+"-"+dirs[1]);
end
case 2://izquierda
dirs[0]=0;
dirs[1]=-1;
say("Dando instrucciones para ir a la izquierda "+dirs[0]+"-"+dirs[1]);
end
case 3: //abajo
dirs[0]=1;
dirs[1]=0;
say("Dando instrucciones para ir abajo "+dirs[0]+"-"+dirs[1]);
end
case 4://arriba
dirs[0]=-1;
dirs[1]=0;
say("Dando instrucciones para ir abajo "+dirs[0]+"-"+dirs[1]);
end
end
return &dirs;
end[/code]
He intentado solucionarlo poniendo un tipo de dato
type tipo_dir
int h;
int v;
end
y luego
Function tipo_dir camino();
pero al hacer
dirs=camino();
Me dice que se requiere una estructura. ¿?
No lo entiendo.
Logicamente, tu funcion devuelve un int, y ese int es el valor que el array guarda en la primera posición, ya que devuelves &dirs, si quieres otra posicion seria &dirs[1].
Si lo que quieres es devolver el valor h, v de una estructura, declaralo así:
STRUCT tipo_dir[2000] // Pon la dimension que entiendas, cada una tendra un valor para h y otro para v
h, v;
END
Despues en tu funcion
lo devuelves con:
tipo_dir[0].h = 0;
tipo_dir[0].v = 1; // como ves para el indice 0, ya tienes valor para h y v
Emmmm, no.
Creo que se debe a que la variable dirs (sobre la que escribes) no es de tipo tipo_dir, al menos es lo que indica el error.
Y creo que se ha contado ya en innumerables ocasiones (incluso con hilos con el mismo nombre) que las function sólo devuelven valores INT, es una limitación (aunque a mi me ha devuelto punteros, pero supongo que porque son del mismo tamaño ???).
El caso es que para esto es mejor usar variables globales o, en su defecto, punteros. Salvo que alguien más puesto que yo me corrija