Ir ao conteúdo

Posts recomendados

Postado

O problema original diz o seguinte :

Faça um programa que implemente as tarefas de um entregador de correspondências postais. Levando em consideração que as correspondências são empilhadas na sacola e devem ser entregues levando-se sempre em consideração a que se encontra no topo da sacola. O número máximo de correspondências numa sacola será de 50. A pilha deverá armazenar o identificador de cada correspondência, o identificador deve ser um número inteiro e positivo.

O programa deve permitir escolher qualquer uma das opções abaixo:
1 – Inserir correspondência na sacola (empilhar);

2 – Remover correspondência da sacola (desempilhar);

3 – Verificar se a sacola está cheia ou vazia;

4 – Verificar a próxima correspondência a ser entregue;

5 – Informar quantas correspondências existem na sacola;

0 – Encerrar o programa;

contudo, na criação do meu código estou tendo dificuldade em mostrar o próximo ( identificador) e informar o tamanho da pilha, pois só aprendi até empilhar e desempilhar.

#include<stdio.h>
#include<string.h>
#include <ctype.h>
#include <stdlib.h>



#define MAX 50

typedef struct sacola{
 
     int identifcador;
}Tsacola;

typedef struct Pilha{
        int topo;
        Tsacola sacolas[MAX];
}TPilha;


int menu();
void iniciaPilha (TPilha *p);
int pilhaVazia(TPilha *L);
int pilhaCheia(TPilha *L);
void empilha(Tsacola p, TPilha *L);
void topo(TPilha *ptr);
void imprimirPilha(TPilha *L);
void Desempilhar(TPilha *L);


int main () {
    TPilha Pilha;
    TPilha * EPilha=&Pilha;
    iniciaPilha (&Pilha);
    Tsacola sac;
    int opt;
    do{
       opt = menu();
       switch(opt){
           case 1:
              if(pilhaCheia(&Pilha)==1)
                 printf("pilha cheia!");
              else {
                 puts("Informe o identifcador da correspondencia -> numero inteiro e positivo");
                 scanf("%d",&sac.identificador);
                 empilha(sac, &Pilha);
              }
              break;

           case 2:
              if (pilhaVazia)
                  Desempilhar(EPilha);
               break;

           case 3:
              topo (EPilha);
              break;

           case 4:
              imprimirPilha(EPilha);
              break;

           case 5:
              iniciaPilha (EPilha);
              break;
       }
    }while(opt != 0); 
    return 0;
} 

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("%d",&opt);
    return opt;
}

void iniciaPilha(TPilha *L) {
     L->topo = 0;
}

int pilhaVazia(TPilha *L){//bool
    if(L->topo == 0 )
        return 1; //true
    else
        return 0; //false
}

int pilhaCheia(TPilha *L){
    if (L->topo == MAX)
        return 1;
    else
        return 0;
}

void empilha(Tsacola p, TPilha *L){
     if (pilhaCheia(L))
          printf ("Pilha Cheia!\n\n");
     else {
          L->sacolas[L->topo]=p;
          L->topo++;
     }
}

void topo(TPilha *L){ // imprimir o topo da pilha.
     if(L->topo == 0)
          puts("A pilha esta vazia!\n");
     else{
          printf("Identificador: %d\n",L->sacolas[L->topo-1].identificador);
     }
}

void imprimirPilha(TPilha *L){
      if(L->topo == 0)
          puts("A pilha esta vazia!\n");
     else{
          int i;
          for(i=0; i<L->topo; i++){
              printf("identificador: %d\n",L->sacolas[i].identificador);
           }
     }
}

void Desempilhar(TPilha *L){
     if (L->topo == 0)
        printf ("\n Pilha vazia!!!\n");
     else
     L->topo--;
}

Além disso, a há um erro nas linhas 45, 114 e 124 quando vou compilar.

 

  • Curtir 2
Postado

eu fiz algumas modificações, mas quando o programa é compilado o case 6 não mostrar se a pilha está cheia ou vazia como deveria., não mostra nada quando se digita o 6.

você saberia me dizer por  que ?

#include<stdio.h>
#include<string.h>
#include <ctype.h>
#include <stdlib.h>



#define MAX 50

typedef struct sacola{
 
     int identificador;
}Tsacola;

typedef struct Pilha{
        int topo;
        Tsacola sacolas[MAX];
}TPilha;


int menu();
void iniciaPilha (TPilha *p);
int pilhaVazia(TPilha *L);
int pilhaCheia(TPilha *L);
void empilha(Tsacola p, TPilha *L);
void topo(TPilha *ptr);
void imprimirPilha(TPilha *L);
void Desempilhar(TPilha *L);


int main () {
    TPilha Pilha;
    TPilha * EPilha=&Pilha;
    iniciaPilha (&Pilha);
    Tsacola sac;
    int opt;
    do{
       opt = menu();
       switch(opt){
           case 1:
              if(pilhaCheia(&Pilha)==1)
                 printf("pilha cheia!");
              else {
                 puts("Informe o identifcador da correspondencia -> numero inteiro e positivo");
                 scanf("%d",&sac.identificador);
                 empilha(sac, &Pilha);
              }
              break;

           case 2:
              if (pilhaVazia)
                  Desempilhar(EPilha);
               break;

           case 3:
              topo (EPilha);
              break;

           case 4:
              imprimirPilha(EPilha);
              break;

           case 5:
              iniciaPilha (EPilha);
              break;
           case 6:
               pilhaCheia (EPilha);
               pilhaVazia (EPilha);
			  break; 	
       }
    }while(opt != 0); 
    return 0;
} 

int menu(){
    int opt;
    printf("1 - Empilhar- enserir correspondencia\n");
    printf("2 - Desempilhar- remover correspondencia\n");
    printf("3 - Mostrar proxima correspondencia a ser entregue\n");
    printf("4 - Imprimir pilha- quantidade de correspondencias\n");
    printf("5 - Iniciar pilha\n");
    printf("6- Mostrar se a pilha esta cheia ou vazia\n");
    printf("0 - Sair\n");
    scanf("%d",&opt);
    return opt;
}

void iniciaPilha(TPilha *L) {
     L->topo = 0;
}

int pilhaVazia(TPilha *L){//bool
    if(L->topo == 0 ){
    	printf("PILHA VAZIA!\n");
        return 1; }//true
    else{ if(L->topo!=0)
        return 0; }//false
}

int pilhaCheia(TPilha *L){
    if (L->topo == MAX){
    	printf("PILHA CHEIA\n");
        return 1; }
    else
        return 0;
    
}

void empilha(Tsacola p, TPilha *L){
     if (pilhaCheia(L))
          printf ("Pilha Cheia!\n\n");
     else {
          L->sacolas[L->topo]=p;
          L->topo++;
     }
}

void topo(TPilha *L){ // imprimir o topo da pilha.
     if(L->topo == 0)
          puts("A pilha esta vazia!\n");
     else{
          printf("Identificador: %d\n",L->sacolas[L->topo-1].identificador);
     }
}

void imprimirPilha(TPilha *L){
      if(L->topo == 0)
          puts("A pilha esta vazia!\n");
     else{
          int i,cont=0;
          for(i=0; i<L->topo; i++){
          	cont++;
              printf("identificador: %d\n EXISTEM %d CORRESPONDENCIAS\n",L->sacolas[i].identificador,cont++);
           }
     }
}

void Desempilhar(TPilha *L){
     if (L->topo == 0)
        printf ("\n Pilha vazia!!!\n");
     else
     L->topo--;
}

 

pilha.png

pilha2.png

adicionado 0 minutos depois

@devair1010

  • Curtir 1
Postado

@gabrielleletice   A opção 6 está funcionando, porém  as funções que ela vai 

que são a pilhaVazia e pilhaCheia está precisando de mais alguns comandos

pois se nada tiver sido empilhado ela mostra  pilhavazia, mas se já houver sido

empilhado algum dado ela volta sem escrever nada, então precisa de mais

esses comandos na função pilhaVazia :

int pilhaVazia(TPilha *L){//bool
    if(L->topo == 0 ){
    	printf("PILHA VAZIA!\n");
        return 1; }//true
    else{ if(L->topo!=0){printf("A Pilha Nao esta Vazia Mas Tambem Nao esta Cheia\n");
        printf("A Pilha Contem %d",L->topo);printf(" Elementos\n\n");
        return 0;}
        }//false

 

  • Curtir 1
Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!