Gustavo (Kbça) Postado Março 29, 2008 Denunciar Share Postado Março 29, 2008 //algoritmo da Torre de Hanoi//Gustavo Zanatta Bruno#include <stdio.h>#include<conio.h>#include <stdlib.h>#define MAX 3struct 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 More sharing options...
0 fabioem Postado Novembro 20, 2009 Denunciar Share Postado Novembro 20, 2009 Cara podes resolver este problema sem nenhuma pilha,veja meu blog,com 43 linhas tu mata a xarada!http://fabone.04live.com/Primeiro-blog-b1/...ativo-b1-p2.htm Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonathan Queiroz Postado Novembro 20, 2009 Denunciar Share Postado Novembro 20, 2009 Esse tópico já tem mais de um ano... Evite também postar a mesma mensagem em vários tópicos. Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Gustavo (Kbça)
//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