Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: Danielo515 on April 20, 2010, 10:32:09 AM

Title: Funcion que devuelva un array
Post by: Danielo515 on April 20, 2010, 10:32:09 AM
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();
Title: Re: Funcion que devuevla array
Post by: FreeYourMind on April 20, 2010, 10:49:15 AM
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...
Title: Re: Funcion que devuevla array
Post by: Danielo515 on April 20, 2010, 10:54:41 AM

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]
Title: Re: Funcion que devuevla array
Post by: Danielo515 on April 20, 2010, 11:06:32 AM
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.

Title: Re: Funcion que devuevla array
Post by: FreeYourMind on April 20, 2010, 11:51:45 AM
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
Title: Re: Funcion que devuelva un array
Post by: Drumpi on April 20, 2010, 01:09:53 PM
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