Progetto c++ Itinerario

di il
76 risposte

76 Risposte - Pagina 5

  • Re: Progetto c++ Itinerario

    Per esempio:

    Itinerario 1: Scuola - Casa
    la strada che da scuola mi porta a casa passa anche per Ristorante e per Supermercato

    Itinerario 2: Ristorante - Albergo
    la strada che porta da Ristorante ad Albergo passa anche per Supermercato

    Quindi hanno in comune un punto i due itinerari
  • Re: Progetto c++ Itinerario

    Giusto, quindi dovrai iterare sui 'Luoghi' contenuti in un percorso e vedere se almeno uno è presente nell' altro percorso.
    Ora vediamo un po', prova a leggere sotto:
    
    bool ContenitoreItinerari::Confronta(Itinerario itinerario1, Itinerario itinerario2)
    {
    	for (vector<Luogo>::iterator it1 = itinerario1.luoghi.begin();
                       it1 != itinerario1.luoghi.end(); ++it1) 
    	{
    		Luogo luogo1 = *it1;
    		for (vector<Luogo>::iterator it2 = itinerario2.luoghi.begin(); 
                                  it2 != itinerario2.luoghi.end(); ++it2) 
    		{
    			Luogo luogo2 = *it2;
    			if ((luogo1.latitudine == luogo2.latitudine) && 
                                        (luogo1.longitudine == luogo2.longitudine))
    				return true;
    		}
    	}
    
    	return false;
    }
    
    Ti è chiaro? Se non capisci cosa c' è scritto conviene che ci fermiamo e passi il week-end a colmare alcune lacune.
  • Re: Progetto c++ Itinerario

    Praticamente la funzione confronta, appunto confronta i 2 luoghi dei due itinerari (1 e 2) e se trova latitudine e longitudine uguale in almeno uno dei due luoghi restituisce true, altrimenti false
  • Re: Progetto c++ Itinerario

    Ora mi tocca farti qualche domanda per vedere se stai capendo, cosa intendi con i '2 luoghi' ? perche 2 ? Sai cosa vogliono dire Begin e End? cosa significa *it1? Non è un terzo grado ma mi serve un po' di feedback.
  • Re: Progetto c++ Itinerario

    2 luoghi perchè nel metodo che hai implementato ne hai messi 2 a cnonfronto ma potevano essere infiniti, begin ed end servono ad aprire e chiudere le iterazioni, it1 e it2 stanno per iteratore 1 e 2
  • Re: Progetto c++ Itinerario

    Veramente a confronto sono messi due itinerari, ognuno dei quali contiene un vettore di 'Luoghi' che possono essere quanti te ne pare. Comunque può andare

    La funzione di prima ti restituisce true o false se i percorsi hanno un 'Luogo' in comune. Ora dovresti scrivere un' altra funzione che dato un insieme di percorsi trova tutti quelli che non hanno punti in comune con gli altri.

    Perlomeno prova a descrivere come fare.
  • Re: Progetto c++ Itinerario

    Provo a scriverla
  • Re: Progetto c++ Itinerario

        bool ContenitoreItinerari :: ConfrontaDiversi(Itinerario itinerario1, Itinerario itinerario2);
        {
            for (vector<Luogo>::iterator it1 = itinerario1.luoghi.begin();
                 it1 != itinerario1.luoghi.end(); ++it1)
            {
                Luogo luogo1 = *it1;
                for (vector<Luogo>::iterator it2 = itinerario2.luoghi.begin();
                     it2 != itinerario2.luoghi.end(); ++it2)
                {
                    Luogo luogo2 = *it2;
                    if ((luogo1.latitudine != luogo2.latitudine) &&
                        (luogo1.longitudine != luogo2.longitudine))
                        return true;
                }
            }
            
            return false;
        }    
        
    Così per tutti gli itinerari...
  • Re: Progetto c++ Itinerario

    Intanto si dovrebbe chiamare 'CercaDiversi' e non 'ConfrontaDiversi', enon dovrebbe lavorare su due itinerari ma su un elenco di itinerari.
    Questo potrebbe essere un modo:
    
    cout << "Percorsi differenti:" << endl;
    vector<Itinerario> differenti;
    for (vector<Itinerario>::iterator it1 = contenitore.itinerari.begin(); it1 != contenitore.itinerari.end(); ++it1) 
    {
    	for (vector<Itinerario>::iterator it2 = contenitore.itinerari.begin(); it2 != contenitore.itinerari.end(); ++it2) 
    	{
    		if ((it1 != it2) && (contenitore.Confronta(*it1, *it2) == false))
    		{
    			differenti.push_back(*it1);
    			cout << it1->nome << endl;
    		}
    	}
    }
    
    Questo potrebbe essere un pezzo del codice della classe di test, esamina contenitoreItinerai e quando trova un percorso che non ha punti in comune con nessuno degli altri, lo scrive a video e lo aggiunge al vettore 'differenti'.
  • Re: Progetto c++ Itinerario

    Ok, però mi da un errore nel metodo confronta:

    Definiton or redeclaration of "Confronta" not allowed inside a function.
  • Re: Progetto c++ Itinerario

    Vabbe, hai definito due volte 'Confronta', ora si tratta di fare un po di ordine. Comunque adesso direi che può bastare, me ne vado a spasso. Hai abbastanza materiale, ripassati gli iteratori e vedi di assemblare il tutto.
    Ci risentiamo la settimana prossima.
  • Re: Progetto c++ Itinerario

    Ok faccio un po di ordine nel codice perchè è un casino...grazie
  • Re: Progetto c++ Itinerario

    Mi sto impazzendo e non riesco a togliere quell'errore nel metodo Confonta. Ho provato a togliere il punto e virgola, a metterlo fuori dal main, niente da fare...
  • Re: Progetto c++ Itinerario

    Ma il metodo confronta non devo dichiararlo dentro la classe contenitore itinerario?
  • Re: Progetto c++ Itinerario

    Si, va proprio li, cosa è che non ti funziona? mostra il codice.
Devi accedere o registrarti per scrivere nel forum
76 risposte