C/Visual C - Hanoi recursivo lenguaje C

   
Vista:

Hanoi recursivo lenguaje C

Publicado por ElZar (1 intervención) el 05/12/2011 00:00:44
Si lo compiláis con el Dev-C++ no os dará ningún error en el código...
Alguien puede echarme una mano? Creo que el error está en el tema de los punteros.. Ya que si lo debugáis hay un punto que no entra en ninguno de los caso de "Otra_torre".

Si hubiése un fallo en el códgio seria en Otra_Torre, las otras funciones seguro que están bien...


#include <stdio.h>
#include <conio.h>
#include <math.h>
#define GRAD2PI (3.14159265359F/180.F)

void Mover_Piezas(float *Torre_A,float *Torre_B, int Npeces);
float Otra_Torre(float *Torre_A, float *Torre_B);
void Canviar_Pieza(float *Torre_A, float *Torre_B);

float Torre_A[6], Torre_B[6], Torre_C[6],x,y,z;
int Npiezas=0;

int main(void){
Torre_A[0]= 322.F; // X
Torre_A[1]= 211.F; // Y
Torre_A[2]= 46.F; // Z
Torre_A[3]= (float)atan2(Torre_A[1], Torre_A[0]); // YAW
Torre_A[4]= 90.F*GRAD2PI; // PITCH
Torre_A[5]= 0.F*GRAD2PI; // ROLL

Torre_B[0]= 0.F;; // X
Torre_B[1]= 380.F; // Y
Torre_B[2]= 41.F; // Z
Torre_B[3]= (float)atan2(Torre_B[1], Torre_B[0]); // YAW
Torre_B[4]= 90.F*GRAD2PI; // PITCH
Torre_B[5]= 0.F*GRAD2PI; // ROLL

Torre_C[0]= 180.F; // X
Torre_C[1]= 300.F; // Y
Torre_C[2]= 206.F; // Z
Torre_C[3]= (float)atan2(Torre_C[1], Torre_C[0]); // YAW
Torre_C[4]= 90.F*GRAD2PI; // PITCH
Torre_C[5]= 0.F*GRAD2PI; // ROLL

x = Torre_A[0];
y = Torre_B[0];
z = Torre_C[0];

printf("Escribe número piezas que tendrá la torre de Hanoi: ");
scanf("%d",&Npiezas);
Mover_Piezas(Torre_A, Torre_B, Npiezas);

return 0;
}

void Mover_Piezas(float *Torre_A,float *Torre_B, int Npiezas)
{

*Torre_C= Otra_Torre(Torre_A, Torre_B); // Busca la torre auxiliar

if(Npiezas!=1)
{
Mover_Piezas(Torre_A, Torre_C, Npiezas-1);
Canviar_Pieza(Torre_A, Torre_B); // Sólo mueve la pieza superior
Mover_Piezas(Torre_C, Torre_B, Npiezas-1);
}else{
Canviar_Pieza(Torre_A, Torre_B); // Sólo mueve la pieza superior
}
}

float Otra_Torre(float *Torre_A, float *Torre_B)
{
if(((Torre_A[0]==x)&&(Torre_B[0]==y)) || ((Torre_A[0]==y)&&(Torre_B[0]==x))) {
return *Torre_C;
}

if(((Torre_A[0]==y)&&(Torre_B[0]==z)) || ((Torre_A[0]==z)&&(Torre_B[0]==y))) {
return *Torre_A;
}

if(((Torre_A[0]==z)&&(Torre_B[0]==x)) || ((Torre_A[0]==x)&&(Torre_B[0]==z))){
return *Torre_B;
}
}

void Canviar_Pieza(float *Torre_A, float *Torre_B){
printf("\n%f->%f\n",Torre_A[0],Torre_B[0]);

}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Hanoi recursivo lenguaje C

Publicado por Zarlok (1 intervención) el 06/12/2011 03:04:32
El fallo está en los punteros creo... Si os fijáis en el primer mover_piezas cuando ya ha hecho otratorre y entra en el if. cuando entra a la funcion mover_pieza torre b i torre c valen 180, en cambio torre c tendría que valer 0 i b 180. El fallo está en el tema punteros. Alguna ayuda?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar