Gustavo (Kbça)

Membros
  • Content Count

    1
  • Joined

  • Last visited

Community Reputation

0 Neutro

About Gustavo (Kbça)

  1. //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....