elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Invocacion funcion con variables de tipo puntero
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Invocacion funcion con variables de tipo puntero  (Leído 969 veces)
LadyWin

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Invocacion funcion con variables de tipo puntero
« en: 20 Julio 2021, 00:59 am »

Hola, esto es una parte de un programa que estoy haciendo que evalúa los posibles movimientos, en este caso, de un caballo de el ajedrez, los 0 serian espacios vacíos, el punto de partida seria el 0 de la posición v[4][0]:
 
                                                   1 1 0 1 1
                                                    1 1 1 1 1
                                                    1 0 1 1 1
                                                    1 1 1 1 1
                                                    0 1 1 1 1


Código
  1. int main (){
  2.    int a=4,b=0;
  3.    int v[N][M]={(1,1,0,1,1),(1,1,1,1,1),(1,0,1,1,1),(1,1,1,1,1),(0,1,1,1,1)};
  4.    printf(" return--> %i ",mov1(v,&a,&b)); //devuelve 1
  5.    printf(" return--> %i ",mov1(v,&a,&b)); // pero aca devuelve 0
  6.    return 0;
  7. }
  8. int mov1 (int v[N][M],int *a,int *b){
  9.   if (v[*a-2][*b+1]==0){
  10.       *a=*a-2;
  11.       *b=*b+1;
  12.       return 1;
  13.   }else{
  14.            return 0;
  15.   }
  16. }

Este código debería retornar dos veces 1 pero desconozco la razón del porqué en la segunda invocación no me evalúa correctamente la condición de if y me devuelve 0, se deberá a que estoy utilizando mal los punteros?


En línea

Locura_23

Desconectado Desconectado

Mensajes: 40



Ver Perfil
Re: Invocacion funcion con variables de tipo puntero
« Respuesta #1 en: 20 Julio 2021, 03:33 am »

Hola @LadyWin

Te dejo mis ideas jaja...Por ahi ya lo sabes pero, creo que la única forma que eso te retorna 0 es que ese if de la línea 9 es distinto de cero. Al utilizar punteros acordate que modificas el valor de la variable misma... entonces, la segunda llamada no va a devolver 1 porque se modificaron las variables en sí mismas. Osea que te está posicionando en otro casillero del tablero que no es cero...
Por ahi te interese hacer paso de parametros por valor, y vos le pasas la posición del tablero que queres evaluar.

Luego... en mi humilde opinión, te conviene hacer más descriptivos los nombres de tus variables y funciones, código aburrido y simple = código funcional y facil de mantener. Por ejemplo, la función puede llamarse: evalua_movimiento_caballo(), de un vistazo ya sabes qué hace.

PD: en el caso de que esa función busque las posibles posiciones del caballo (las que son igual a cero en la matriz), tal vez podrías hacer un while o for que recorra cada fila de la matriz hasta que encuentre una posición cero, y si no encuentra ninguna salta a la fila que viene...


« Última modificación: 20 Julio 2021, 03:50 am por Locura_23 » En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.495



Ver Perfil
Re: Invocacion funcion con variables de tipo puntero
« Respuesta #2 en: 20 Julio 2021, 17:15 pm »

Tienes un problema en la línea 3:
Para crear los diferentes elementos del array has escrito
Código:
(1,1,0,1,1),(1,1,1,1,1),(1,0,1,1,1),(1,1,1,1,1),(0,1,1,1,1)

Con los paréntesis no generas elementos, sino que agrupas operaciones. Pues bien dentro de los paréntesis estás usando el operador coma.

El operador coma es un operador binario que evalúa la primera expresión y descarta su valor, después evalúa la segunda expresión y devuelve el resultado. Encadenando expresiones, cómo lo has hecho estás devolviendo el último operando de cada grupo de paréntesis.

Por otra parte, cuándo inicializas un array se puede hacer de forma incompleta dando valor a las primeras posiciones; el compilador entiende que debe dejar las siguientes a 0 por lo que en realidad tu código genera el siguiente array:
Código:
1 1 1 1 1
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0

Para solucionar esto sólo cambia los paréntesis por llaves en tu inicialización del array.
En línea

while(is_alive(yourself)) {
    make_true(yourself, yourdreams);
}
LadyWin

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Invocacion funcion con variables de tipo puntero
« Respuesta #3 en: 20 Julio 2021, 17:43 pm »

Hola @LadyWin

Te dejo mis ideas jaja...Por ahi ya lo sabes pero, creo que la única forma que eso te retorna 0 es que ese if de la línea 9 es distinto de cero. Al utilizar punteros acordate que modificas el valor de la variable misma... entonces, la segunda llamada no va a devolver 1 porque se modificaron las variables en sí mismas. Osea que te está posicionando en otro casillero del tablero que no es cero...
Por ahi te interese hacer paso de parametros por valor, y vos le pasas la posición del tablero que queres evaluar.

Luego... en mi humilde opinión, te conviene hacer más descriptivos los nombres de tus variables y funciones, código aburrido y simple = código funcional y facil de mantener. Por ejemplo, la función puede llamarse: evalua_movimiento_caballo(), de un vistazo ya sabes qué hace.

PD: en el caso de que esa función busque las posibles posiciones del caballo (las que son igual a cero en la matriz), tal vez podrías hacer un while o for que recorra cada fila de la matriz hasta que encuentre una posición cero, y si no encuentra ninguna salta a la fila que viene...

Tenés razon, mejorare el nombre que utilizo para mis variables y funciones, gracias por el dato!
En línea

LadyWin

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Invocacion funcion con variables de tipo puntero
« Respuesta #4 en: 20 Julio 2021, 17:44 pm »

Tienes un problema en la línea 3:
Para crear los diferentes elementos del array has escrito
Código:
(1,1,0,1,1),(1,1,1,1,1),(1,0,1,1,1),(1,1,1,1,1),(0,1,1,1,1)

Con los paréntesis no generas elementos, sino que agrupas operaciones. Pues bien dentro de los paréntesis estás usando el operador coma.

El operador coma es un operador binario que evalúa la primera expresión y descarta su valor, después evalúa la segunda expresión y devuelve el resultado. Encadenando expresiones, cómo lo has hecho estás devolviendo el último operando de cada grupo de paréntesis.

Por otra parte, cuándo inicializas un array se puede hacer de forma incompleta dando valor a las primeras posiciones; el compilador entiende que debe dejar las siguientes a 0 por lo que en realidad tu código genera el siguiente array:
Código:
1 1 1 1 1
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0

Para solucionar esto sólo cambia los paréntesis por llaves en tu inicialización del array.

Mil gracias, ahora me funciona correctamente!  :D :D :D :D :D
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
puntero a funcion
Programación C/C++
kondrag_X1 2 2,516 Último mensaje 30 Abril 2011, 19:49 pm
por leogtz
Funcion y puntero
Programación C/C++
gonzalo_C 2 1,485 Último mensaje 9 Febrero 2012, 17:01 pm
por gonzalo_C
[duda] invocacion de una funcion
Programación C/C++
dabaji 4 1,275 Último mensaje 8 Septiembre 2012, 13:57 pm
por eleon
Problema con variables puntero
Programación C/C++
oxi12pek 7 1,552 Último mensaje 5 Noviembre 2012, 17:26 pm
por BatchianoISpyxolo
¿Alguien podria explicarme como funciona el puntero tipo función?
Programación C/C++
Gojira 1 639 Último mensaje 25 Febrero 2018, 19:30 pm
por MAFUS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines