Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

Problema ao usar Pilha Dinâmica

Collapse
X
 
  • Filter
  • Tempo
  • Show
Clear All
new posts

  • Font Size
    #1

    C / C++ Problema ao usar Pilha Dinâmica

    Bom pessoal, estou fazendo um trabalho de AEDS para a faculdade e corria tudo aos trancos e barrancos quando tudo desmoronou.....
    Estava usando as filas normalmente, só que em determinado momento preciso tirar de uma fila e passar para uma pilha, mas simplesmente não consigo. Todas as modificações que imaginei eu fiz e, quando não dava fatal error, dava pilha vazia.
    Não sei se mostrando os dois vai ser o suficiente, mas vou postar os envolvidos na história: CriaPilha(); Empilha(); ImprimePilha(); DesceAviao();

    Por favor galera, dá uma forcinha ai....

    Código:
    typedef struct NODO {
            struct REG dado; struct NODO *proximo;
    }PILHA;
    PILHA *CriaPilha()
    {
          return NULL;
    }
    PILHA *Empilha(PILHA *topo, struct REG &elemento)
    {
          struct NODO *p;
          p = (struct NODO * )malloc(sizeof(struct NODO));
          p->dado = elemento;
          p->proximo = topo;
          return p; // p é o novo topo
    }
    void ImprimePilha(PILHA *p)
    {
        PILHA *f;
        f=CriaPilha();
        int i;
        f=p;
        if (PilhaVazia(f))
           cout <<"A pilha de Avioes Aterrissados esta vazia...";
        else 
        for (i=1;!PilhaVazia(f);f=f->proximo)
    	{
    		cout <<i <<" - " <<f->dado.voo <<" - " <<f->dado.origem
            <<" - " <<f->dado.destino <<" - " <<"COMB: "
            <<f->dado.comb <<"\n"; i++;
        }
    }
    int DesceAviao(FILA *v, PILHA *d)
    {
         struct NODO *aviao;
         if(FilaVazia(v))
              cout <<"\nA fila de Avioes em Voo esta vazia...";
         else {
         Desenfileira(v, aviao->dado);
         Empilha(d, aviao->dado);
         cout <<"Aviao: " <<aviao->dado.voo <<" - " <<aviao->dado.origem 
              <<" - " <<aviao->dado.destino
              <<" - Aterrissado...\n"
              <<"Imprimindo a pilha atual de Avioes Aterrissados:\n\n";
         ImprimePilha(d);
         }
    }

  • Font Size
    #2
    Eu não consigo desse jeito. Coloque o código todo.
    “Finalmente encontrei um inimigo digno de mim e uma jornada em que preciso desenvolver toda a minha coragem, pois temos de combater homens bravos e monstruosas feras.”, Alexandre, o Grande.

    Comment


    • Font Size
      #3
      Postado Originalmente por Rolando Sanches Ver Post
      Eu não consigo desse jeito. Coloque o código todo.
      Código:
      #include <cstdlib>
      #include <iostream>
      #include <stdio.h>
      #include <stdlib.h>
      
      using namespace std;
      struct REG{
             int voo;
             int comb;
             char origem[4];
             char destino[4];
      };
      typedef struct NODO {
              struct REG dado; struct NODO *proximo;
      }PILHA;
      PILHA *CriaPilha()
      {
            return NULL;
      }
      PILHA *Empilha(PILHA *topo, struct REG &elemento)
      {
            struct NODO *p;
            p = (struct NODO * )malloc(sizeof(struct NODO));
            p->dado = elemento;
            p->proximo = topo;
            return p; // p é o novo topo
      }
      PILHA *Desempilha(PILHA *topo, struct REG &elemento)
      {
            if (topo != NULL )
            {
            elemento = topo->dado;
            topo = topo->proximo;
            }
            return topo;
      }
      int PilhaVazia(PILHA *topo)
      {
          return topo==NULL;
      }
      void ImprimePilha(PILHA *p)
      {
          PILHA *f;
          int i;
          f=p;
          if (PilhaVazia(f))
             cout <<"A pilha de Avioes Aterrissados esta vazia...";
          else 
          for (i=1;!PilhaVazia(f);f=f->proximo)
      	{
      		cout <<i <<" - " <<f->dado.voo <<" - " <<f->dado.origem
              <<" - " <<f->dado.destino <<" - " <<"COMB: "
              <<f->dado.comb <<"\n"; i++;
          }
      }
      typedef struct REGFILA {
              struct NODO *frente, *tras;
      } FILA;
      FILA *CriaFila()
      {
           FILA *f;
           f = (FILA * )malloc(sizeof(FILA));
           f->frente = NULL;
           f->tras = NULL;
           return f;
      }
      int FilaVazia(FILA *fila)
      {
          return fila == NULL || fila->frente == NULL;
      }
      int Enfileira(FILA *fila, struct REG elemento)
      {
          struct NODO *p;
          if (fila == NULL) return 0; // inconsistente;
          p = (struct NODO *)malloc(sizeof(struct NODO));
          p->dado = elemento;
          p->proximo = NULL; // p vai ficar antes do ultimo
          if (fila->frente ==NULL) // Fila vazia, é o primeiro a entrar
          fila->frente = p;
          else fila -> tras -> proximo = p; 
          fila -> tras = p;// p é o novo elemento de trás
          return 1; // termino Ok
      }
      int Desenfileira(FILA *fila, struct REG &elemento)
      {
          struct NODO *q;
          if (fila == NULL || fila->frente == NULL) return 0;
          elemento = fila->frente->dado;
          q = fila->frente;
          fila->frente = q->proximo; // proximo aponta p/ o 2o
                                     // ou para NULL se só tiver 1
         free(q); // libera o nodo da frente ...
         if (fila -> frente == NULL) // ficou vazia …
         fila -> tras = NULL;
         return 1; // termino Ok
      }
      void ImprimeFila(FILA *fila)
      {
          FILA *f;
          int i;
          f=CriaFila();
          f->frente=fila->frente;
          if(f == NULL || f->frente == NULL)
                  cout <<"\nA fila esta vazia...\n\n";
          else for (i=1;f->frente!=NULL;f->frente = f->frente->proximo)
      	{
      		cout <<i <<" - " <<f->frente->dado.voo <<" - " <<f->frente->dado.origem
              <<" - " <<f->frente->dado.destino <<" - " <<"COMB: "
              <<f->frente->dado.comb <<"\n"; i++;
          }
      }
      void menu()
      {
           cout <<"\n\n\n1 - Cadastrar um aviao;\n"
           <<"2 - Fazer vistoria em um aviao;\n"
           <<"3 - Abastecer proximo aviao;\n"
           <<"4 - Colocar proximo aviao em voo;\n"
           <<"5 - Pousar proximo aviao no destino;\n"
           <<"6 - Retorna aviao para voo;\n"
           <<"7 - Aviao retorna para origem;\n"
           <<"8 - Sair do programa;\n\n";
      }
      
      int RegAviao()
      {
           FILE *arq; struct REG AVIAO;
           if((arq = fopen("aviaos.bin","a+b"))==NULL)
           {
             cout <<"Erro ao abrir o arquivo...";
             return 0;
           }
           cout <<"Digite o codigo do aviao: ";
           cin >>AVIAO.voo;
           cout <<"Digite a origem do aviao " <<AVIAO.voo <<": ";
           cin >>AVIAO.origem;
           cout <<"Digite o destino do aviao " <<AVIAO.voo <<": ";
           cin >>AVIAO.destino;
           AVIAO.comb=0;
           cout <<"\n";
           fwrite(&AVIAO,sizeof(AVIAO),1,arq);
           fclose(arq);
           cout <<"Registrado com sucesso\n\n";
           return 1;
      }
      int InsAviao(FILA *Inspecao)
      {
          int proc;
          FILE *arq; struct REG AVIAO;
          arq = fopen("aviaos.bin","rb");
           if(arq==NULL)
           {
             cout <<"Erro ao abrir o arquivo...";
             return 0;
           }
           cout <<"\nDigite o codigo do aviao procurado: ";
           cin >>proc;
           fread(&AVIAO,sizeof(AVIAO),1,arq);
           cout <<"\nPesquisando...\n";
           while(!feof(arq))
           {
            if (AVIAO.voo == proc)
            {
               Enfileira(Inspecao,AVIAO);
               cout <<"Aviao: " <<AVIAO.voo <<" - " <<AVIAO.origem <<" - " <<AVIAO.destino
               <<" colocado na fila de inspecao...\n"
               <<"Imprimindo a fila atual da inspecao:\n\n";
               ImprimeFila(Inspecao);   
               break;
            }
            fread(&AVIAO,sizeof(AVIAO),1,arq);
            };
           if (AVIAO.voo != proc) cout <<"Nao Encontrado...";
           
           fclose(arq);
           return 1;
      }
      int AbasAviao(FILA *f, FILA *a)
      {
           FILA *aux;
           aux=CriaFila();
           aux->frente=f->frente;
           if(f->frente==NULL||aux->frente==NULL)
                {cout <<"\nA fila Inspecao esta vazia..."; return 0;}
           aux->frente->dado.comb=1;
           Enfileira(a, aux->frente->dado);
           cout <<"Aviao: " <<aux->frente->dado.voo <<" - " <<aux->frente->dado.origem 
                <<" - " <<aux->frente->dado.destino
                <<" - Abastecido...\n"
                <<"Imprimindo a fila atual dos Abastecidos:\n\n";
           ImprimeFila(a);
           Desenfileira(f, f->frente->dado);   
      }
      int VooAviao(FILA *a, FILA *v)
      {
           FILA *aux;
           aux=CriaFila();
           aux->frente=a->frente;
           if(a->frente==NULL||aux->frente==NULL)
                {cout <<"\nA fila de Abastecidos esta vazia..."; return 0;}
           Enfileira(v, aux->frente->dado);
           cout <<"Aviao: " <<aux->frente->dado.voo <<" - " <<aux->frente->dado.origem 
                <<" - " <<aux->frente->dado.destino
                <<" - Colocado em Voo...\n"
                <<"Imprimindo a fila atual de Avioes em Voo:\n\n";
           ImprimeFila(v);
           Desenfileira(a, a->frente->dado);
           return 1;  
      }
      int DesceAviao(FILA *v, PILHA *d)
      {
           struct REG aviao;
           if(FilaVazia(v))
                cout <<"\nA fila de Avioes em Voo esta vazia...";
           else {
           Desenfileira(v, aviao);
           Empilha(d, aviao);
           cout <<"Aviao: " <<aviao.voo <<" - " <<aviao.origem 
                <<" - " <<aviao.destino
                <<" - Aterrissado...\n"
                <<"Imprimindo a pilha atual de Avioes Aterrissados:\n\n";
           ImprimePilha(d);
           }
      }
      int SobeAviao(FILA *v, PILHA *d)
      {
           
      }
      int OrigAviao()
      {
           
      }
      int main(int argc, char *argv[])
      {
          int opcao;
          FILA *AInsp, *AAbast, *AVoo;
          PILHA *APouso;
          AInsp=CriaFila();
          AAbast=CriaFila();
          AVoo=CriaFila();
          APouso=CriaPilha();
          cout <<"\t\t\tBEM-VINDO AO SISTEMA AIRFLY!!!!!!\n\n\n";
          cout <<"Menu Principal:";
          menu();
          cout<<"\n\nEntre com sua opcao: ";
          cin >>opcao;
          while(opcao!=8){
              switch(opcao)
              { 
                case 1: {RegAviao(); break;}
                case 2: {InsAviao(AInsp); break;}
                case 3: {AbasAviao(AInsp, AAbast); break;}
                case 4: {VooAviao(AAbast, AVoo); break;}
                case 5: {DesceAviao(AVoo, APouso); break;}
                
              }
              menu();
              cout<<"\n\nEntre com sua opcao: ";
              cin >>opcao;
          }
          
          cout <<"\n\n\n\n\n\nObrigado...Volte Sempre\n";
          
          system("PAUSE");
          return EXIT_SUCCESS;
      }

      Comment

      X
      Working...
      X