Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    [c++] controllo in vector <int> non funzionante...

    Ho un vector <int> compara che contiene dinamicamente... 9 valori int sempre diversi...

    Con questo cod

    codice:
    //CONFRONTO VERO E PROPRIO...
    
    
    for (int i = 0; i < compara.size(); i++) {
      //cout << compara[i] << endl;
      
    
      if (compara[i] == compara[i + 1]) {
        cout << "\nVALORE trovato!";
        contadoppioni++;
        cout << "\n";
        cout << contadoppioni;
        
        
        //occorrenzetrovate.push_back(contadoppioni);
        
        cout << "\n";
        cin.get();
      }
      else {
        cout << "\n\nVALORE NON trovato!";
        contadoppioni=contadoppioni+0;
        cout << "\n";
       cin.get();
      }
      
    
    
    
      
      }
    
    cout << "\n\n";
    cout << "occorrenze trovate in questa ottina... : ";
    cout << contadoppioni;
    cout << "\n\n";
    Cercavo di rilevare eventuali occorrenze doppie...
    es

    1,2,6,8,10,1,7,89,90 -> occorrenza doppia perchè l'1 è presente due volte...

    Ma non funzia...

    Testandolo infatti con qualcosa di questo tipo:

    1,2,3,4,5,1,2,88,77,88

    non mi rileva affatto nè l'1 nè il 2 che sono presenti entrambi 2 volte...

    Grazie a chi mi aiuta a rilevare l'errore sicuramente da me messo nel mio cod. di cui sopra.


  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Analizza bene cosa fa quell' if e riflettici sopra. Capirai il problema.
    (Ed è pure strano che il programma non dia errore).
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    ho capito che quell'if non funzia...

    Originariamente inviato da shodan
    Analizza bene cosa fa quell' if e riflettici sopra. Capirai il problema.
    (Ed è pure strano che il programma non dia errore).
    compara[0]==compara[1]
    compara[1]==compara[2]
    ecc...

    quindi salta un sacco di confronti... tipo
    compara[0]==compara[7] ad esempio...

    Ma come posso sapere se e quante occorrenze in compara sono presenti 2 volte?




    tnx!

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    A parte che avresti anche un problema di buffer overflow con quel codice (controlla i valori che assume l'indice i e soprattutto i+1), non devi fare altro che un doppio ciclo iterativo innestato: per ogni elemento, controlli se è presente o no un valore uguale in tutto il vettore; al massimo poi puoi tenere traccia dei valori già esaminati in maniera tale da evitare inutili controlli già eseguiti: se ad esempio il primo elemento è 2 e trovi che anche il sesto lo è, allora quando arriverai al sesto salti il controllo perché già sai che quell'elemento è presente due volte.
    every day above ground is a good one

  5. #5
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Se si può: anche ordinare il vettore sarebbe un'idea.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  6. #6
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    ho provato così...

    Originariamente inviato da shodan
    Se si può: anche ordinare il vettore sarebbe un'idea.
    codice:
    int contadoppioni=0;
    
    sort(compara.begin(),compara.end());
    
    int MISURAVECTOR;
    MISURAVECTOR=compara.size();
    //cout << "\nMISURA VECTOR TEMPORANEA: ";
    //cout << MISURAVECTOR;
    //cout << "\n\n";
      
      for (int i = 0; i < MISURAVECTOR; i++) {
      //cout << compara[i] << endl;
    
      if (compara[i] == compara[i + 1]) {
        //cout << "VALORE trovato!";
        contadoppioni++;
        //cout << "\n";
        
        cout << "\n\n";
        cout << "valore uguale trovato: ";
        cout << compara[i];
        cout << "\n\n";
        cin.get();
        
      }
    Ma sembra non controllare tutto... ugualmente... Prende in considerazione solo alcuni casi...


  7. #7
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    Re: ho provato così...

    Originariamente inviato da freetom
    codice:
    int contadoppioni=0;
    
    sort(compara.begin(),compara.end());
    
    int MISURAVECTOR;
    MISURAVECTOR=compara.size();
    //cout << "\nMISURA VECTOR TEMPORANEA: ";
    //cout << MISURAVECTOR;
    //cout << "\n\n";
      
      for (int i = 0; i < MISURAVECTOR; i++) {
      //cout << compara[i] << endl;
    
      if (compara[i] == compara[i + 1]) {
        //cout << "VALORE trovato!";
        contadoppioni++;
        //cout << "\n";
        
        cout << "\n\n";
        cout << "valore uguale trovato: ";
        cout << compara[i];
        cout << "\n\n";
        cin.get();
        
      }
    Ma sembra non controllare tutto... ugualmente... Prende in considerazione solo alcuni casi...

    Eppure adesso dovrebbe funzionare perchè nel caso ad esempio avessi:

    1,2,70,89,23,2,8,12,20

    dopo il sort avrei

    1,2,2,8,12,20,23,70,89

    e quindi il confronto

    compara[i]==compara[i+1]

    dovrebbe funzionare in quanto la verifica si può fare correttamente anche solo su quelli contigui appunto...

    Ma anche così (usando prima il sort) invece purtroppo mi salta numerosi confronti positivi...

    Why???

    Grazie agli/alle esperti/e


  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Starai sbagliando qualcosa da qualche altra parte... posta il programma completo se non è estremamente lungo. Tieni comunque presente che la condizione di uscita del for è da rivedere... non è i < MISURAVECTOR ma i < MISURAVECTOR - 1. Prova a convincertene.
    every day above ground is a good one

  9. #9
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    risolto non importa + grazie.

    Originariamente inviato da YuYevon
    Starai sbagliando qualcosa da qualche altra parte... posta il programma completo se non è estremamente lungo. Tieni comunque presente che la condizione di uscita del for è da rivedere... non è i < MISURAVECTOR ma i < MISURAVECTOR - 1. Prova a convincertene.

    risolto così:

    codice:
      for (int i = 0; i < MISURAVECTOR; i++) {
    
    
        cout << "\n\n";
        cout << "TUTTO IL VECTOR COMPARA: ";
        cout << compara[0];
        cout << "-";
        cout << compara[1];
        cout << "-";
        cout << compara[2];
        cout << "-";
        cout << compara[3];
        cout << "-";
        cout << compara[4];
        cout << "-";
        cout << compara[5];
        cout << "-";
        cout << compara[6];
        cout << "-";
        cout << compara[7];
        cout << "-";
        cout << compara[8];
        cout << "\n\n";
        cout << "***";
        cout << compara[i];
        cout << "<>";
        cout << compara[i+1];
        cout << "***";
        cout << "\n\n";
        cout << "ADESSO IL CONFRONTO SEMBRA AVVENIRE... ma funzionera'???";
        cout << "\n\n";
        if (compara[i] == compara[i+1]) {
        cout << "CONFRONTO AVVENUTO CON SUCCESSO!!!";
        contadoppioni++;
        cout << "\n\n";
        cin.get();
        }
        else {
        cout << "\n\n";
        cout << "*** Occorrenza non trovata ***";
        cout << "\n\n";
        cin.get();
        }
        
    cout << "\n\n";
    cout << "occorrenze trovate in questa ottina... : ";
    
    cout << contadoppioni;
    
    cout << "\n\n";
        
    
    
    }

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 © 2024 vBulletin Solutions, Inc. All rights reserved.