Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    c++ coda,errore che non trovo

    codice:
    #include <stdafx.h>
    #include <ctime>
    #include <iostream>
    #include <cstdlib>
    #include <conio.h>
    #include <cmath>
    using namespace std;
    
    struct utente //struttura di ogni utente
    	{
    		int orette;//il tempo di arrivo
    		int minutini; //il tempo di arrivo
    		int minuti; // il tempo che ci vuole a servire
    		utente * info; // parte informativa
    	};
    
    void orologio (time_t &, int &, int &, utente *&); // clock del programma
    void aggiunta_nodo (utente *&, utente  *&, bool &);// aggiunta nuovo nodo
    void visual_fila(utente *, int, int);// visualizzazione della gente in fila
    
    int main()
    {
    	time_t tempo;
    	tempo=time(NULL); // presa del tempo iniziale
    	int minute=0; // minuti
    	int hour=7; // ore
    
    	utente* testa=NULL; // puntatore di testa
    	utente* ptr;//nodo di coda
    	bool stato=0; //0 vuota ; 1 non vuota
    	
    	cout<<hour<<":"<<minute;//visualizzazzione del primo orologio
    	//menu
    	cout<<"           _-:()===<([Menu Informativo])>===():-_"<<endl<<endl;
    	cout<<"_-:(1)==========<([Aggiunta Nuovo utente in coda])>==========(1):-_"<<endl;
    	cout<<"_-:(2)===<([Calcolo tempo  per tutti gli utenti in coda])>===(2):-_"<<endl;
    	cout<<"_-:(3)=========<([Calcolo orario di fine servizio])>=========(3):-_"<<endl;
    	cout<<"_-:(4)=======<([Calcolo numero di utenti accettabili])>======(4):-_"<<endl;
    	visual_fila(testa,minute,hour);
    	char k;
    	do
    	{
    		orologio(tempo, minute, hour, testa);
    		if(kbhit())//kbhit rileva se viene premuto un tasto da tastiera
    		{
    			k=getch();//preleva il codice direttamente dal buffer di input
    			switch(k)
    			{
    			case '1':
    				{
    					cout<<endl<<endl<<"Nuovo utente aggiunto alla fila alle ore: "<<hour<<":"<<minute<<endl;
    					aggiunta_nodo(testa, ptr ,stato);
    					ptr->minutini=minute;
    					ptr->orette=hour;
    					system("cls");
    					cout<<hour<<":"<<minute;
    					cout<<"           _-:()===<([Menu Informativo])>===():-_"<<endl<<endl;
    					cout<<"_-:(1)==========<([Aggiunta Nuovo utente in coda])>==========(1):-_"<<endl;
    					cout<<"_-:(2)===<([Calcolo tempo  per tutti gli utenti in coda])>===(2):-_"<<endl;
    					cout<<"_-:(3)=========<([Calcolo orario di fine servizio])>=========(3):-_"<<endl;
    					cout<<"_-:(4)=======<([Calcolo numero di utenti accettabili])>======(4):-_"<<endl;
    					visual_fila(testa,minute,hour);
    				}break;
    			}
    		}
    	}while(hour!=10);
    	return 0;
    }
    void orologio (time_t & tempo, int & minute, int & hour, utente * & head)
    {
    	time_t trascorso;
    	trascorso=time(NULL);
    	if(trascorso-tempo==60)
    	{
    		minute++;
    		tempo=time(NULL);
    		if(minute==60)
    		{
    			hour++;
    		}
    		system("cls");
    		//Menu aggiornato
    		cout<<hour<<":"<<minute;
    		cout<<"           _-:()===<([Menu Informativo])>===():-_"<<endl<<endl;
    		cout<<"_-:(1)==========<([Aggiunta Nuovo utente in coda])>==========(1):-_"<<endl;
    		cout<<"_-:(2)===<([Calcolo tempo  per tutti gli utenti in coda])>===(2):-_"<<endl;
    		cout<<"_-:(3)=========<([Calcolo orario di fine servizio])>=========(3):-_"<<endl;
    		cout<<"_-:(4)=======<([Calcolo numero di utenti accettabili])>======(4):-_"<<endl;
    		visual_fila(head, minute, hour);
    	}
    }
    void visual_fila(utente * head, int minute, int hour)
    {
    	utente * ptr;
    	ptr=head;
    	cout<<endl<<endl<<endl<<"No || orario d'arrivo || orario di fine lavoro"<<endl<<endl;
    	if(ptr==NULL)
    	{
    		cout<<"Fila Vuota..."<<endl;
    	}
    	else
    	{
    		int temporum=0;//una specie di offset serve ad aggiungere i minuti di lavoro del precedente al successivo in fila
    		int gente=1;// numeri di persone in fila
    		int minuti_max;
    		int ore_max=hour;
    
    		do
    		{
    			cout<<gente<<"     "<<ptr->orette<<":"<<ptr->minutini<<"                ";// visualizzazione orario arrivo
    			if(ptr->minuti+ptr->minutini+temporum>59)
    			{	
    				ore_max++;
    				minuti_max=abs((ptr->minuti-(ptr->minutini+temporum)));
    				gente++;
    				cout<<ore_max<<":"<<minuti_max;
    				temporum+=ptr->minuti;
    				if(ore_max==hour && minuti_max== minute)//aggiornamento fila
    				{
    					temporum-=ptr->minuti;
    					head=ptr->info;
    					delete(ptr);
    				}
    			}
    			else
    			{
    				gente++;
    				cout<<ore_max<<":"<<ptr->minuti+ptr->minutini+temporum;
    				temporum+=ptr->minuti;
    				if(minute==ptr->minuti+ptr->minutini+temporum)//aggiornamento fila
    				{
    					temporum-=ptr->minuti;
    					head=ptr->info;
    					delete(ptr);
    				}
    			}
    			if(temporum>59)
    			{
    				temporum=0;
    			}
    			cout<<endl;
    			ptr=ptr->info;
    		}while(ptr!=NULL);
    	}
    }
    
    
    void aggiunta_nodo(utente * & nodo, utente * & ptr, bool & stato)
    {
    	if(stato==0)
    	{
    		cout<<"Aggiunta nuovo utente in fila..."<<endl<<endl;
    		stato=1;
    		nodo= new utente;
    		nodo->info=NULL;
    		ptr=nodo;
    		do
    		{
    			cout<<"Quanti minuti servono per finire il lavoro?(da 5 a 30 minuti)"<<endl;
    			cin>>nodo->minuti;
    		}while(nodo->minuti<1 || nodo->minuti>30);//ricordiamo di rimetterlo a 5
    	}
    	else
    	{
    		utente * temp=new utente;
    		ptr->info=temp;
    		ptr=temp;
    		ptr->info=NULL;
    		do
    		{
    			cout<<"Quanti minuti servono per finire il lavoro?(da 5 a 30 minuti)"<<endl;
    			cin>>ptr->minuti;
    		}while(nodo->minuti<1 || nodo->minuti>30);//ricordiamoci di rimetterlo a 5
    	}
    }
    nella funzione visual_fila oltre a tenere aggiornata la fila e a visualizzarla sotto il menu deve anche eliminare dalla fila gli elementi che sono stati serviti, funziona per il primo, ma per il secondo no, e la fila non si aggiorna subito appena si finisce di servire uno... perchè ancora non l'ho capito.
    ALLA GUERRA!!!

  2. #2
    cosa deve farei il programma
    e la libreria l'hai creata tu o è presente nel c++???

  3. #3
    tutte le librerie sono presenti in c++, il programma mette in cosa delle persone prendendo l'orario in cui arrivano in coda e quanto ci vuole per servirle. Poi piano piano che il tempo passa quelli che sono stati serviti vengono cancellati e la fila scala di un postto. Il fattore è che la fila non scala di un posto...
    ALLA GUERRA!!!

  4. #4
    uhm...
    ora vedo se riesco a darti un aiutino..
    che fanno queste librerie?

    #include <stdafx.h>
    #include <conio.h>

  5. #5
    stdafx.h serve per far funzionare il programma, senza quello non funziona nulla, il conio serve a far funzionare quelle due funzioni che servono a fare il cin>> senza però scrivere cin>> e interrompere il programma per aspettare che tu digiti qualcosa.
    le funzioni sono:
    codice:
    if(kbhit())//kbhit rileva se viene premuto un tasto da tastiera
    		{
    			k=getch();//preleva il codice direttamente dal buffer di input
    ...
    ALLA GUERRA!!!

  6. #6
    stai usando una libreria specifica di windows il cui header è conio.h, se vuoi aiuto anche da chi non usa windows dovresti utilizzare codice standard.
    ciao
    sergio

  7. #7
    per il momento non è quello il problema, il problema è che non cancella dinamicamente i nodi della fila, e la fila si può implementare anche su linux. io voglio aiuto su quello, non sul conio che funziona bene.
    Grazie
    ALLA GUERRA!!!

  8. #8
    va bene, ma se non posso compilare i codice come posso darti una mano?
    ciao
    sergio

  9. #9
    Anche questo è vero... non sò cosa si può andare a sustituire per il conio, se riesci ad arrivarci guardando solo il codice va bene, senò aspetto un altro aiuto...
    Grazie comunque per la disponibilità
    ALLA GUERRA!!!

  10. #10
    mi spiace ma non è possibile dedurre il funzionamento del programma solo dal codice in maniera efficiente, l'unico sistema è verificarne l'output con un debugger o con delle istruzioni mirate interne al codice
    bye
    sergio

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.