diogotal 0 Denunciar post Postado Maio 18, 2015 Boa tarde,Tenho que fazer um programa em C++ que leia os caracteres de meu nome, imprima a pilha e depois imprima o inverso da pilha.O professor passou alguns algoritmos e pediu para fazermos isso, dei uma pesquisada na internet, alguns videos e cheguei no codigo abaixo, mas, tenho alguns erros que nao encontro, ou algo de errado que estou fazendo. Alguem pode me ajudar?Obs.: com numeros inteiros consegui fazer, mas com char.... #include <iostream> #include <conio.h> #include <stdio.h> #include <stdlib.h> using namespace std; int const MAX=1000; int pilha[MAX]; int tope; int pilha_tamanho(){ return tope+1; } bool pilha_vazia(){ if (tope==-1) return true; else return false; } bool pilha_cheia(){ if (tope==MAX-1) return true; else return false; } bool push (char &nom){ if (pilha_cheia()){ return false; }else{ pilha[tope]=nom; tope++; return true; } } bool pop (char nom){ if (pilha_vazia()){ return false; }else{ nom=pilha[tope]; tope--; return true; } } int main(){ int valor, i; char nom; cout<<"Empilhar"<<endl; push('d'); push('i'); push('o'); push('g'); push('o'); for(i=0; i<5; i++){ cout<<pilha[i]<<endl<<endl; } cout<<"Desempilhar"<<endl; while(pop(nom)){ cout<<valor<<endl<<endl; } cout<<"Tamanho da pilha: "<<pilha_tamanho(); return 0; } Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Maio 19, 2015 Se é C++, então pode deixar só o iostream, porque o resto é de C. #include <iostream> using namespace std; const int MAX=1000; char pilha[MAX]; int tope = 0; bool pilha_vazia(){ return !tope; } bool pilha_cheia() { return tope == MAX; } bool push (char nom){ if (pilha_cheia()) return false; pilha[tope] = nom; tope++; return true; } char pop (){ if (pilha_vazia()) return '\0'; char nom = pilha[tope-1]; tope--; return nom; } int main() { int valor, i; cout<<"Empilhar"<<endl; push('d'); push('i'); push('o'); push('g'); push('o'); for(i=0; i<tope; i++){ cout<<pilha[i]<<endl; } while(!pilha_vazia()) { cout<<pop()<<endl; } return 0; } Compartilhar este post Link para o post Compartilhar em outros sites
diogotal 0 Denunciar post Postado Maio 19, 2015 Obrigado pela ajuda, ficou perfeito. E antes de ver sua resposta eu consegui fazer, nao ficou tao optimizado igual o seu, mas funciou tbm. Vou mandar para que vejam. Mais uma vez obrigado. :thumbsup: #include <iostream> using namespace std; int const MAX=1000; char pilha[MAX]; int tope; int pilha_tamanho(){ return tope+1; } bool pilha_vazia(){ if (tope==-1) return true; else return false; } bool pilha_cheia(){ if (tope==MAX-1) return true; else return false; } bool push (char nom){ if (pilha_cheia()){ return false; }else{ pilha[tope]=nom; tope++; return true; } } bool pop (char &nom){ if (pilha_vazia()){ return false; }else{ nom=pilha[tope]; tope--; return true; } } main(){ int valor, i; char nom; cout<<"Empilhar"<<endl; push('D'); push('I'); push('O'); push('G'); push('O'); for(i=0; i<5; i++){ cout<<pilha[i]<<endl<<endl; } cout<<"Desempilhar"<<endl; while(pop(nom)){ cout<<nom<<endl<<endl; } cout<<"Tamanho da pilha: "<<pilha_tamanho(); return 0; } Compartilhar este post Link para o post Compartilhar em outros sites