
raphael monteiro
Membros-
Total de itens
3 -
Registro em
-
Última visita
Tudo que raphael monteiro postou
-
Problemas em programar pilha em C++
pergunta respondeu ao raphael monteiro de raphael monteiro em C, C++
puts amigo desculpas! e obrigado pelas dicas!!! se deu uma forçona! obrigado! Amigo sem querer abusar, mais e q como tenho q apresentar preciso saber porque você tiro o gets e uso esse %30s scanf("%30s",&pes.nome); obrigado! -
Problemas em programar pilha em C++
pergunta respondeu ao raphael monteiro de raphael monteiro em C, C++
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<conio.h> #include <ctype.h> #define MAX 5 typedef struct Pessoa{ char nome[30]; int idade; }TPessoa; typedef struct Pilha{ int topo; TPessoa pessoas[MAX]; }TPilha; //--------Funções--------- int menu(); void iniciaPilha (TPilha *p); int pilhaVazia(TPilha *L); int pilhaCheia(TPilha *L); void empilha(TPessoa p, TPilha *L); TPessoa topo(TPilha *ptr); void imprimirPilha(TPilha *L); TPessoa Desempilhar(TPilha *L); //------------------------- int main () { TPilha Pilha; iniciaPilha (&Pilha); TPessoa pes; int opt; do{ opt = menu(); switch(opt){ case 1:{// empilha if(pilhaCheia(&Pilha)==1){ printf("Pilha cheia.\n"); } else { printf("Informa -> 1)nome 2)idade\n"); fflush(stdin); gets(pes.nome); scanf("%i",&pes.idade); empilha(pes, &Pilha); system("cls"); } break; } case 2:{// desempilhar Desempilhar(&Pilha); printf("---REMOVENDO---\n"); printf("Nome: %s\n",pes.nome); printf("Idade: %i\n",pes.idade); break; } case 3:{ // mostrar o topo topo (&Pilha); break; } case 4:{ // imprimir pilha imprimirPilha(&Pilha); break; } case 5:{ // inicia pilha iniciaPilha (&Pilha); break; } case 0:{ //sai do programa printf("-----Saindo!-----\n"); break; default: printf("Opcao Invalida!\n"); }// fim case 0 }//fim switch }while(opt != 0); // fim do system("pause"); return 0; } // fim main int menu(){ int opt; printf("1 - Empilhar\n"); printf("2 - Desempilhar\n"); printf("3 - Mostrar Topo\n"); printf("4 - Imprimir pilha\n"); printf("5 - Iniciar pilha\n"); printf("0 - Sair\n"); scanf("%i",&opt); system("cls"); return opt; } void iniciaPilha(TPilha *L) { L->topo = MAX; } int pilhaVazia(TPilha *L){//bool if(L->topo == MAX ) return 1; //true else return 0; //false } int pilhaCheia(TPilha *L){ if (L->topo == -1) return 1; else return 0; } void empilha(TPessoa p, TPilha *L){ // empilhar. if (L->topo == -1) printf ("Pilha Cheia!\n\n"); else { L->topo--; L->pessoas[L->topo]=p; }//fim else } //fim empilha TPessoa topo(TPilha *L){ // imprimir o topo da pilha. if(L->topo==MAX) puts("A pilha esta vazia!\n"); else{ printf("Nome: %s ",L->pessoas[L->topo].nome); printf("Idade: %i\n",L->pessoas[L->topo].idade); }//fim do else }// fim topo void imprimirPilha(TPilha *L){ // imprimir a pilha completa. if(L->topo==MAX){ puts("A pilha esta vazia!\n"); } else{ int i=L->topo; while(i<MAX){ printf("Nome: %s ",L->pessoas[i].nome); printf("Idade: %i\n",L->pessoas[i].idade); i++; }// fim while }// fim else }// fim imprimir TPessoa Desempilhar(TPilha *L){ if (L->topo == MAX) printf ("\n Pilha vazia!!!\n"); else L->topo++; }// fim desepilha vlw pelas dicas já alterei muito os comandos. agora so to tendo erros na hora de desempilhar, e ainda não consegui entender porque o valor definido por MAX não funciona. a função iniciar pilha e so pra reinciar a função. vo retirar os //fim if etc... A dificuldade q to tendo no desempilhar é que vamos supor que eu empilhei nesta ordem ... Nome A - Idade 1, Nome b - Idade 2, Nome c - Idade 3. otimo dai eu mando desempilhar, oque acontece, ele desempilha tira o nome e a idade e mostra " REMOVENDO Nome c - Idade 3 " dai eu mando desempilhar novamente porem agora a pilha já esta " Nome A - Idade 1, Nome b - Idade 2 " certo, dinovo ele vai mostrar " REMOVENDO Nome c - Idade 3 ". isso e q não quero quero q ele mostre " REMOVENDO Nome B - Idade 2 ". e o valor de MAX q eu to falando e q ele ta definido em 5 mais ele não diz pilha cheia. nunca! obrigado pelas dicas, e obrigado pelas futuras dicas ajudas, correções etc... so uma OBS o trabalho e pra hoje anoite se alguém puder dar uma forcinha ainda essa tarde eu agradeço muito. -
ola amigos so novo aqui no forum to fazendo um trabalho e to tendo uma dificuldade em para a opreção de empilhar quando chega no valor definido por MAX variavel q usei para definir o tamanho do meu vetor. vo dar uma breve introdução doque to fazendo. Bom tenho que fazer 1 programa usando pilha com as seguintes funções: empilhar, desempilhar, imprimir a pilha, imprimir o topo. as funções eu não posso alterar, tenho q fazer o trabalho baseado nelas! oque me foi dado para fazer o trabalho foi. o prototipo das funções void iniciarPilha(TPilha *ptr); void empilhar(TPessoa p, TPilha *ptr); TPessoa Desempilhar(TPilha *ptr); TPessoa topo(TPilha *ptr); void imprimirPilha(TPilha *ptr); e as estruturas typedef struct Pessoa{ char nome[30]; int idade; }TPessoa; typedef struct Pilha{ TPessoa pessoas[MAX]; int topo; }TPilha; ai vai o que eu já fiz! #include<stdio.h> #include<stdlib.h> #include<string.h> #include<conio.h> #include <ctype.h> #define MAX 3 typedef struct Pessoa{ char nome[30]; int idade; }TPessoa; typedef struct Pilha{ int topo; TPessoa pessoas[MAX]; }TPilha; //--------Funções--------- int menu(); void iniciaPilha (TPilha *p); int pilhaVazia(TPilha *L); int pilhaCheia(TPilha *L); void empilha(TPessoa p, TPilha *L); void topo(TPilha *ptr); void imprimirPilha(TPilha *L); void Desempilhar(TPilha *L, TPessoa *excluida); //------------------------- int main () { TPilha Pilha; TPilha * EPilha=&Pilha; iniciaPilha (&Pilha); TPessoa pes; int opt; do{ opt = menu(); switch(opt){ case 1:{// empilha if(pilhaCheia(&Pilha)==1){ puts ("pilha cheia!"); } else { printf("Informa -> 1)nome 2)idade\n"); fflush(stdin); gets(pes.nome); scanf("%i",&pes.idade); empilha(pes, &Pilha); system("cls"); } break; } case 2:{// desempilhar printf ("informa o nome da pessoa a ser removida:"); fflush(stdin); gets(pes.nome); Desempilhar(EPilha, &pes); printf("---REMOVENDO---\n"); printf("Nome: %s\n",pes.nome); printf("Idade: %i\n",pes.idade); break; } case 3:{ // mostrar o topo topo (EPilha); break; } case 4:{ // imprimir pilha imprimirPilha(EPilha); break; } case 5:{ // inicia pilha iniciaPilha (EPilha); break; } case 0:{ //sai do programa break; }// fim case 0 }//fim switch }while(opt != 0); // fim do system("pause"); return 0; } // fim main int menu(){ int opt; printf("1 - Empilhar\n"); printf("2 - Desempilhar\n"); printf("3 - Mostrar Topo\n"); printf("4 - Imprimir pilha\n"); printf("5 - Iniciar pilha\n"); printf("0 - Sair\n"); scanf("%i",&opt); system("cls"); return opt; } void iniciaPilha(TPilha *L) { L->topo = MAX; } int pilhaVazia(TPilha *L){//bool if(L->topo == MAX ) return 1; //true else return 0; //false } int pilhaCheia(TPilha *L){ if (L->topo == -1) return 1; else return 0; } void empilha(TPessoa p, TPilha *L){ // empilhar. if (pilhaCheia(L)) printf ("Pilha Cheia!\n\n"); else { L->topo--; L->pessoas[L->topo]=p; }//fim else } //fim empilha void topo(TPilha *L){ // imprimir o topo da pilha. if(L->topo==MAX) puts("A pilha esta vazia!\n"); else{ printf("Nome: %s ",L->pessoas[L->topo].nome); printf("Idade: %i\n",L->pessoas[L->topo].idade); }//fim do else }// fim topo void imprimirPilha(TPilha *L){ // imprimir a pilha completa. if(L->topo==MAX){ puts("A pilha esta vazia!\n"); } else{ int i=L->topo; while(i<MAX){ printf("Nome: %s ",L->pessoas[i].nome); printf("Idade: %i\n",L->pessoas[i].idade); i++; }// fim while }// fim else }// fim imprimir void Desempilhar(TPilha *L, TPessoa *excluida){ if (L->topo == MAX){ printf ("\n Pilha vazia!!!\n"); }//fim if else { int i; for (i=MAX-1;i>=(L->topo); i--){ if(!strcmp(excluida->nome, L->pessoas[i].nome)){ int ii=i; i--; for (ii=ii; i>-1; ii--, i--){ L->pessoas[ii] = L->pessoas[i]; }//fim for L->topo++; break; }//fim do if }//fim for }//fim else }// fim desepilha Ai galera agora so não to conseguindo fazer o empilhar respeitar o limite definido! me da uma força ai to definindo MAX como 3 e a função empilha não para quando empilho o 3 nome ele vai ate eu enjuar! obrigado desde já espero vocês possam me ajudar. sei que não e legal ficar perguntando como faz e tal se ta certo e tal porque isso toma bastante o tempo da gente mais to realmente com essa dificuldade to fazendo estre programa desde ontem atarde. e cheguei ate ai já tem umas 3 horas q tento resolver esse problema do limite MAX e de desempilhar!