Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Programmazione c++ pila

    ho scritto questa pila con le principali istruzione ma dov'è che sbaglio ? visto che quando vado provarla mi funziona solo una volta se tutto va bene!! e la funzione stampa come si fa?
    grazie per il vostro aiuto! ve ne sarò riconoscente a vita!!!


    codice:
    #include <cstdlib>
    #include <iostream>
    #include "pila.h"
    using namespace std;
    void menu();
    
    int main(int argc, char *argv[])
    {
    pila a;
    int scelta;
    int t;
    int e; //elemento da inserire
    
    do {
    menu();
    cout<<"inserisci scelta"<<endl;
    cin>>scelta;
    switch(scelta) {
    case 1: cout<<"inserisci elemento"<<endl; cin>>e; a.push(e); break;
    case 2: cout<<"gli elementi della pila sono"<<endl; a.stampa(e); break;
    case 3: cout<<"l'elemento in testa e': "<<endl; a.pop(e); break;
    case 4: cout<<"copia elemento in testa alla pila"<<endl; a.top(e); break;
    default : break;
    }
    } while(scelta <6);
    
    system("PAUSE");
    return EXIT_SUCCESS;
    }
    void menu() {
    cout<<"*****************************************************************************"<<endl;
    cout<<"******************************************************************************"<<endl;
    cout<<"1)inserisci elemento"<<endl;
    cout<<"2)stampa pila"<<endl;
    cout<<"3 prelevare elemento in testa alla pila"<<endl;
    cout<<"4) copia elemento in testa alla pila"<<endl; 
    cout<<"*****************************************************************************"<<endl;
    cout<<"******************************************************************************"<<endl;
    }
    
    
    
    #ifndef _pila_h_
    #define _pila_h_
    
    typedef int E;
    class pila {
    public:
    pila(); //costruttore
    
    void push (const E e);
    void stampa(E & e);
    void pop (E & e);
    void top (E & e) const; 
    bool empty () const ;
    bool full() const;
    private :
    enum{N=100}; //massimlo numero di elementi nella pila 
    E p[N]; //p array di N elementi di tipo E
    int t; //t puntatore alla testa dell'array
    
    };
    
    
    
    
    
    #endif
    
    
    #include <cstdlib>
    #include <iostream>
    #include "pila.h"
    using namespace std;
    
    //prototipo
    
    pila :: pila() { (t=0);}
    // assegna a empty true se la pila e' vuota
    bool pila::empty() const {
    return (t==0); }
    //assegna a full true se la pila è piena 
    bool pila :: full () const {
    return (t==N); }
    
    //inserisci elemento
    void pila:: push(const E e) {
    p[t]=e;
    t++;
    }
    //stampa pila
    void pila:: stampa(E & e){
    while(t!=0){
    e=p[t-1];
    t--;
    cout<<" "<<e<<endl;} }
    //preleva elemento in testa
    void pila:: pop (E & e){
    t--; e=p[t];
    cout<<" "<<e<<endl;
    }
    // copia elemento in testa alla pila
    void pila :: top (E & e) const {
    e=p[t-1];
    cout<<" "<<e<<endl;
    }

  2. #2
    Ho dato un'occhiata al volo e posso dirti che dovresti modificare la funzione stampa, perchè una volta modificata la variabile t che usi per contare gli elementi ti ritrovi con valori strani.
    Usa semplicemente una nuova variabile, che inizializzerai al valore di t.

    codice:
    //stampa pila
    void pila:: stampa(E & e){
    
       int x;
    
       x=t;
       
       while(x!=0){
          e=p[x-1];
          x--;
          cout<<" "<<e<<endl;
       }
    
    }
    Spero di essere stato chiaro

  3. #3
    si grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.