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!
Pergunta
raphael monteiro
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!
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!
Editado por raphael monteiroLink para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.