Ir para conteúdo
Fórum Script Brasil
  • 0

Problema em código simplificado da Torre de Hanoi


Gustavo (Kbça)

Pergunta

//algoritmo da Torre de Hanoi

//Gustavo Zanatta Bruno

#include <stdio.h>

#include<conio.h>

#include <stdlib.h>

#define MAX 3

struct pilha{

float areapilha[MAX];

int topo;

};

typedef struct pilha Tpilha;

void init_pilha(Tpilha*elem);

void push_pilha(Tpilha*elem,float valor);

float pop_pilha(Tpilha*elem);

unsigned int is_empty_pilha(Tpilha elem);

unsigned int is_full_pilha(Tpilha elem);

float top_pilha(Tpilha elem);

void main(void){

Tpilha memoria[3];

memoria[0].areapilha[0] = 3;

memoria[0].areapilha[1] = 2;

memoria[0].areapilha[2] = 1;

memoria[0].topo = 2;

init_pilha (&memoria[1]);

init_pilha (&memoria[2]);

int op;

do{

printf ("1)Exibe os valores das pilhas.\n");

printf ("2)Movimenta os valores das pilhas.\n");

printf ("3)Desistir!\n");

printf ("Opção escolhida --->");

scanf ("%d",&op);

switch(op){

case 1:

int i,p;

printf ("Digite o numero de qual pilha que deseja ver os valores (lembrando que existem as pilhas 0, 1, e a 2).\n");

scanf ("%d",&p);

if (is_empty_pilha(memoria[p])==1)

{

printf ("Pilha vazia!\n");

}

else

{

for(i=memoria[p].topo;i>-1;i--){

printf("%.2f\n",memoria[p].areapilha);

};

};

system ("pause");

break;

case 2:

int pr, pi;

float vr;

printf("Digite o número da pilha que você deseja retirar o elemento (lembrando que existem as pilhas 0, 1, e a 2).\n");

scanf ("%d",&pr);

if (is_empty_pilha(memoria[pr])==1)

{

printf ("Pilha vazia!\n");

}

else

{

printf ("\nDigite o numero da pilha que você deseja incluir o elemento retirado anteriormente.\n");

scanf ("%d",π);

if (is_full_pilha(memoria[pi])==1)

{

printf ("Pilha de inclusão cheia!\n");

}

else

{

if (top_pilha(memoria[pi])>vr)

{

vr = pop_pilha(&memoria[pr]);

push_pilha(&memoria[pi],vr);

printf ("Inserção feita com sucesso.\n");

}

else

{

printf ("O elemento no topo da pilha de inserção é menor que o valor inserido.\n");

printf ("MOVIMENTO NÃO PERMITIDO!!!!!!!!\n");

};

};

};

system ("pause");

break;

case 3:

system ("pause");

break;

default:

printf("Opção inválida!!!!(Sabe ler não babaca?!?!?!)\n");

system ("pause");

break;

}

system ("cls");

}while(op!=3);

}

void init_pilha(Tpilha*elem){

elem->topo=-1;

}

unsigned int is_empty_pilha(Tpilha elem){

unsigned int ret;

ret=1;

if (elem.topo!=-1)

ret=0;

return ret;

}

unsigned int is_full_pilha(Tpilha elem){

unsigned int ret;

ret=1;

if (elem.topo!=MAX-1)

ret=0;

return ret;

}

float top_pilha (Tpilha elem){

return elem.areapilha[elem.topo];

}

float pop_pilha(Tpilha*elem){

float ret;

ret=-1;

if(!is_empty_pilha(*elem)){

ret=elem->areapilha[elem->topo];

elem->topo--;

}else{

printf("Pilha vazia");

}

return ret;

}

void push_pilha(Tpilha*elem, float valor){

if (!is_full_pilha(*elem)){

elem->topo++;

elem->areapilha[elem->topo]=valor;

}else{

printf("Pilha cheia");

}

}

Só movimenta os elementos 1 vez....

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...