Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: m@o_614 en 21 Diciembre 2011, 05:47 am



Título: Torres de Hanoi
Publicado por: m@o_614 en 21 Diciembre 2011, 05:47 am
Código
  1.  
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define TORRE_INICIAL 1
#define TORRE_AUXILIAR 2
#define TORRE_FINAL 3
#define MAX_DISCOS 5

int hanoi(int numDiscos, int torreInicial, int torreAuxiliar, int torreFinal);
int inicializa_discos(int cantDiscos);
int diametro_discos(int cantDiscos);

int main()
{
    int cantDiscos, movimientos;
    system("Cls");
    printf("TORRES DE HANOI\n\n");
   printf("\nCantidad de discos a mover (max 5): ");
   scanf("%d", &cantDiscos);
   if(cantDiscos>MAX_DISCOS)
       printf("\nError! numero de discos maximo es 5\n");
    else
    {
        printf("\nLa serie de movimientos a realizar es:\n");
        printf("\nDiscos al inicio, se muestra el diametro de los discos:\n");
        printf("Torre1: \n",inicializa_discos(cantDiscos));
        printf("Torre2: \n");
        printf("Torre3: \n");
        movimientos = hanoi(cantDiscos, TORRE_INICIAL, TORRE_AUXILIAR, TORRE_FINAL);
        printf("\nSe realizaron en total %d movimientos\n", movimientos);
        printf("Presione una tecla para continuar...\n");
        getch();

    }
    return 0;
}

int hanoi(int numDiscos, int torreInicial, int torreAuxiliar, int torreFinal)
{
    int cantDiscos;
    static int movimientos = 0;
   if(numDiscos == 1)
   {
      printf("Mover el disco superior de la torre %d a la torre %d\n",torreInicial, torreFinal);
      movimientos++;
      printf("Torre1: \n");
      printf("Torre2: \n");
      printf("Torre3: \n");
   }
   else
   {
      hanoi(numDiscos - 1, torreInicial, torreFinal, torreAuxiliar);
      printf("Mover el disco superior de la torre %d a la torre %d\n",torreInicial, torreFinal);
      movimientos++;
      printf("Torre1: \n");
      printf("Torre2: \n");
      printf("Torre3: \n");
      hanoi(numDiscos - 1, torreAuxiliar, torreInicial, torreFinal);
   }
   return movimientos;
}

int inicializa_discos(cantDiscos)
{
    int i;
    for(i=cantDiscos;cantDiscos>=1;cantDiscos--)
       printf("%d",cantDiscos);

  return(cantDiscos);
}

Tengo un problema en la linea numero 26 de mi codigo, en vez de imprimir:

Torre1: 3 2 1 <- Son el numero de discos con los que se inicializa la torre.
 me imprime esto:

321Torre1:  (deberia de ser alreves)
 creo que no estoy llamando bien a la funcion inicializa_discos()

gracias de antemano


Título: Re: Torres de Hanoi
Publicado por: naderST en 21 Diciembre 2011, 05:54 am
Y la parte donde colocas %d?

Código
  1. printf("Torre1: \n",inicializa_discos(cantDiscos));


Título: Re: Torres de Hanoi
Publicado por: m@o_614 en 21 Diciembre 2011, 05:59 am
se lo habia colocado asi:

printf("Torre1: %d\n",inicializa_discos(cantDiscos));

y me imprime

321Torre1: 0


Título: Re: Torres de Hanoi
Publicado por: eltongabinghiman en 21 Diciembre 2011, 06:00 am
Probá llamando afuera del printf a la función inicializa_discos.


Título: Re: Torres de Hanoi
Publicado por: naderST en 21 Diciembre 2011, 06:02 am
Claro, porque al hacer ese printf() primero se llama a la función inicializa_discos() y en esa función lo que haces es imprimir 321 y luego imprimes el valor de retorno de dicha función que sería 0 ya que al hacer el for cantDiscos queda en 0 y eso es lo que estás retornando.

Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.