IALweb Homepage
Forum Home Forum Home > Programmazione > Programmazione > C/C++ - VISUAL C++
  New Posts New Posts RSS Feed - problema con pila
  FAQ FAQ  Forum Search   Events   Register Register  Login Login


REGISTRATEVI su IALWeb forum!

Topic Closedproblema con pila

 Post Reply Post Reply
Author
Message
falcon View Drop Down
Nuovo Utente
Nuovo Utente


Joined: 11/Nov/2008
Status: Offline
Points: 2
Direct Link To This Post Topic: problema con pila
    Posted: 27/Feb/2009 at 19:53
salve a tutti avrei un problemino con un programma che ho realizzato, vi dico già da adesso che nn sono ancora molto pratico con l'utilizzo della pila e della coda. il testo è il seguente

Quote In un ufficio postale è presente un solo sportello. Man mano che le persone arrivano si pongono in “coda” e vengono registrate da un impiegato fornendo le proprie generalità (nome,cognome,importo dei bollettini da pagare ). Man mano che le pratiche vengono sbrigate allo sportello, le persone escono dalla coda e le ricevute dei pagamenti vengono poste in una “pila”.

Scrivere un programma che tramite un menù di scelta possa eseguire le seguenti funzioni:

•    Registrare un nuovo cliente che si è messo in coda
•    Sapere quante persone sono in coda in un certo momento
•    Conoscere il nome e cognome della persona che deve essere servita
•    Conoscere nome e cognome dell’ultimo arrivato
•    Sapere quante persone sono state già servite
•    Conoscere la somma di tutti i bollettini pagati sino a un dato momento
•    Conoscere l’importo medio dei pagamenti effettuati



il mio problema dovrebbe essere causato dal caricamento della pila che non è stato eseguito coretamente, potreste dargli uno sguardo e aiutarmi ?


#include<iostream.h>
#include<conio.h>

struct in
{char nome[30];
 char cognome[30];
 float importo;};
 
struct nodo
{in info;
 nodo *next;};
 
 
struct coda
{nodo *testa;
 nodo *fondo;};
 
struct pila
{nodo *testa;};

//crea una pila vuota
void Crea(pila & P)
 {P.testa=NULL;}
 
 //crea coda vuota
  void crea(coda &c)
 {c.testa=NULL;
  c.testa=NULL;}

//test coda vuota
bool testvuota(coda c)
{return(c.testa==NULL);}

//test pila vuota
bool TestVuota (pila P)         & ;nbs p;    
 {return (P.testa==NULL);}


//procedura inserimento
void PUSH (coda &c,nodo *N )  
{if(testvuota(c))
  {c.testa=N;}
 else
 {c.fondo->next=N;}
 c.fondo=N;
 c.fondo->next=NULL;}
 
 //procedura contatore
void cont(coda c)
{nodo *comodo;
 comodo=c.testa;
 int cont;
 cont=0;
 while (comodo!=NULL)
 {cont=cont+1;
  comodo=comodo->next;}
 cout<<cont;}
 
 //procedura inserimento nuova persona
void inserimento( coda &c)
{ nodo *Temp;
  Temp=new nodo;
  cout<<"inserisci nome del cliente da servire ";
  cin>>Temp->info.nome;
  cout<<"inserisci cognome del cliente da servire ";
  cin>>Temp->info.cognome;
  cout<<"inserisci importo dei bollettini da pagare ";
  cin>>Temp->info.importo;
  Temp->next=NULL;
  PUSH(c,Temp);}
 
//procedura visualizzazione cliente da serveire
void visualserv( coda &c,pila &p)
{if(!testvuota(c))
 {cout<<"la persona che deve essere servita e' "<<endl;
 cout<<c.testa->info.nome<<endl;
 cout<<c.testa->info.cognome<<endl;
p.testa=c.testa;}
 else
 {cout<<"non c'e' nessuna persona da servire "<<endl;}}
 
 
void POP (coda &c,nodo *N)
{if(!testvuota(c))
 {N=c.testa;
  c.testa=N->next;
  N->next=NULL;}}
 

//procedura visualizzazione ultimo cliente arrivato
void visualult( coda &c)
{cout<<"l'ultima persona arrivata e' "<<endl;
 cout<<c.fondo->info.nome<<endl;
 cout<<c.fondo->info.cognome<<endl; }

//sapere quante persone sono già state servite 
void personeserv (pila p)
{if(!TestVuota(p))
 {nodo *comodo;
 comodo=p.testa;
 int cont;
 cont=0;
 while (comodo!=NULL)
 {cont=cont+1;
  comodo=comodo->next;}
  cout<<endl<<cont<<endl;}
 else
 {cout<<"non e' stato servito ancora nessun cliente "<<endl;}}
 
//somma bollettini pagati

void sommaimp (pila p)
{nodo *comodo;
 comodo=p.testa;
 float somma;
 somma=0;
 while (comodo!=NULL)
 {somma=somma+comodo->info.importo;
  comodo=comodo->next;}
  cout<<endl<<somma;}
 
//importo medio

void impmed (pila p)
 {nodo *comodo;
 comodo=p.testa;
 float somma;
 somma=0;
 int cont;
 cont=0;
 while (comodo!=NULL)
 {somma=somma+comodo->info.importo;
  cont=cont+1;
  comodo=comodo->next;}
  somma=somma/cont;
  cout<<endl<<somma;}
 



int main()
{char ris;
 int scelta;
 nodo *Temp;
 coda c1;
 pila p1;
 
 crea (c1);
 do{ cout<<"::::::::::::::::::::::::::::::::::::::"<< endl;
     cout<<":: Quale operazione vuoi svolgere ? ::"<<endl;
     cout<<":: 1) registrazione nuovo cliente   ::"<<endl;
     cout<<":: 2) numero persono in coda        ::"<<endl;
     cout<<":: 3) informazioni persona servita  ::"<<endl;
     cout<<":: 4) informazioni ultimo arrivato  ::"<<endl;
     cout<<":: 5) numero persone già servite    ::"<<endl;
     cout<<":: 6) somma bolletti pagati         ::"<<endl;
     cout<<":: 7) importo medio dei pagamenti   ::"<<endl;
     cout<<"::::::::::::::::::::::::::::::::::::::"<< endl;
     cout <<"  Quale operazione vuoi scegliere ?  "<<endl;
     cin>>scelta;
     cout<<endl<<endl;
      
     
 switch(scelta)
 {case 1://inserimento nuovo cliente
  inserimento (c1);
  break;
 
   case 2: //contatore persone in coda
   cont(c1);
   break;
  
   case 3://persona che deve essere servita
   visualserv(c1,p1);
    p1.testa->info.importo=c1.testa->info.importo;;
    p1.testa->next=NULL;
   POP (c1,Temp);
   break;
  
   case 4:// ultimo arrivato
   visualult(c1);
   break;
  
   case 5:
   personeserv (p1);
   break;
  
   case 6:
   sommaimp (p1);
   break;
  
   case 7:
   impmed (p1);
   break;}


 
 cout<<"vuoi continuare ad eseguire il programma s/n ";
 cin>>ris;
 system ("pause");
 system ("cls"); } while (ris == 's');
 return 0;}

 
 
 



Edited by falcon
Back to Top
Sponsored Links


Back to Top
 Post Reply Post Reply
  Share Topic   

Forum Jump Forum Permissions View Drop Down

Forum Software by Web Wiz Forums® version 10.17
Copyright ©2001-2013 Web Wiz Ltd.

This page was generated in 0,059 seconds.