Funcion que devuelva un array

Started by Danielo515, April 20, 2010, 10:32:09 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Danielo515

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();

FreeYourMind

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...

Danielo515


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]

Danielo515

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.


FreeYourMind

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

Drumpi

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
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)