Problema conta occorrenze in una sequenza

di il
23 risposte

23 Risposte - Pagina 2

  • Re: Problema conta occorrenze in una sequenza

    Nippolo ha scritto:


    Ci rinuncio!
    Scusa potresti spiegarmi direttamente tu che intendi?
    Ps: Tra l'altro le variabili non possono essere trattate allo stesso modo anche perché car sarebbe un tipo char invece le altre due sono due int.
  • Re: Problema conta occorrenze in una sequenza

    WinterSoldier ha scritto:


    Weierstrass ha scritto:


    WinterSoldier ha scritto:




    Ciao, ti ringrazio per la tua risposta, ma il tuo programma non funziona correttamente
    Il programma funziona correttamente, te lo riscrivo completo:
    
    #include <iostream>
    using namespace std;
    
    int main()
    {
     char seq1[100];
     char seq2[100];
     int i = 0;
     int occ = 0;
    	
     printf("Inserisci la sequenza terminata da * : ");
     cin >> seq1;
     printf("\nInserisci il pattern da 3 caratteri : ");
     cin >> seq2;
    	
     while (seq1[i] != '*'){
        if(seq1[i] == seq2[0] && seq1[i+1] == seq2[1] && seq1[i+2] == seq2[2])
            occ++;
        i++;
     }
     
     printf("Il numero di occorrenze del pattern nella sequenza e' : ");
     cout << occ;
    	
     return 0;
    }
    
    Quello che e' sbagliato è il tuo test. Tu scrivi
    Se la sequenza X fosse 0 1 0 1 1 0 1 0 1 0 1 * e la sequenza Y fosse 1 0 1 il programma stamperebbe 3
    perché la sequenza Y è presente 3 volte in X: 0 1 0 1 1 0 1 0 1 0 1 *.
    Ma questo non è vero perché nella sequenza 01011010101* il pattern 101 occorre 4 volte, non 3

    01011010101*
    01011010101*
    01011010101*
    01011010101*
    Ciao, ti ringrazio ed in effetti ora funziona correttamente il tuo programma.
    Per quanto riguarda gli esempi, teoricamente è come dici tu, ma nella traccia la prof chiede proprio che non vengano accettare le occorrenze "concatenate", spero tu capisca ciò che intendo. Semplicemente ogni occorrenza deve iniziare da un carattere che non è stato utilizzato da nessuna occorrenza precedente.
    E quindi potresti modificare il codice con qualcosa tipo
    
    while (seq1[i] != '*'){
        if(seq1[i] == seq2[0] && seq1[i+1] == seq2[1] && seq1[i+2] == seq2[2]){
            occ++;
            i+=3;
        }
        else
            i++;
     }
    
  • Re: Problema conta occorrenze in una sequenza

    Weierstrass ha scritto:


    E quindi potresti modificare il codice con qualcosa tipo
    ...
    Quella questione è stata già risolta, il problema adesso è un altro.

    WinterSoldier ha scritto:


    Scusa potresti spiegarmi direttamente tu che intendi?
    Ps: Tra l'altro le variabili non possono essere trattate allo stesso modo anche perché car sarebbe un tipo char invece le altre due sono due int.
    Non c'entra niente il tipo in questo caso, il punto è che se utilizzi una variabile devi prima assegnargli un valore. Visto che con cont e occ lo fai, perchè con la variabile car invece no?
    Mettiamola diversamente... considera il seguente codice:
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        char c;
        if(c == '*')
        {
            cout << "1";
        }
        else
        {
            cout << "2";
        }
    }
    Quale sarà l'output?
  • Re: Problema conta occorrenze in una sequenza

    Nippolo ha scritto:



    Non c'entra niente il tipo in questo caso, il punto è che se utilizzi una variabile devi prima assegnargli un valore. Visto che con cont e occ lo fai, perchè con la variabile car invece no?
    Mettiamola diversamente... considera il seguente codice:
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        char c;
        if(c == '*')
        {
            cout << "1";
        }
        else
        {
            cout << "2";
        }
    }
    Quale sarà l'output?
    Stamperà 2 perché il valore di c non essendo specificato è "vuoto". Comunque capisco cosa intendi, però non mi sono mai posto il problema perché anche negli esercizi guida dati dalla prof non sempre i valori vengono inizializzati, soprattutto quando poi li prendiamo noi da tastiera. Cosa che non accade con i contatori che invece di norma li inizializzo sempre a 0.
  • Re: Problema conta occorrenze in una sequenza

    Le variabili si inizzializzano PUNTO. Non é un errore non inizializzarle se assegni loro un valore prima di leggerle, ma si parla di 2 caratteri da aggiungere su una riga, non mi pare uno spreco metterli
  • Re: Problema conta occorrenze in una sequenza

    WinterSoldier ha scritto:


    Stamperà 2 perché il valore di c non essendo specificato è "vuoto".
    Sbagliato, è poco probabile ma potrebbe anche stampare 1. Il motivo, come ho già provato a spiegarti più volte, è che una variabile non inizializzata non è come dici tu "vuota" (che poi bisognerebbe vedere cosa significa), ma presenta un valore indeterminato che dipende da cosa si trova in quel momento nelle locazioni di memoria ad essa dedicate.
    Se ancora non ci credi prova a lanciare il seguente codice:
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        int a, b, c;
        cout << a << endl << b << endl << c;
    }

    WinterSoldier ha scritto:


    ... non mi sono mai posto il problema perché anche negli esercizi guida dati dalla prof non sempre i valori vengono inizializzati, soprattutto quando poi li prendiamo noi da tastiera.
    Riprendo quello che ho scritto in precedenza
    se utilizzi una variabile devi prima assegnargli un valore
    Come vedi io parlo di assegnazione in generale, che comprende sia il caso di inizializzazione che quello di inserimento da tastiera.
  • Re: Problema conta occorrenze in una sequenza

    silente ha scritto:


    Le variabili si inizzializzano PUNTO. Non é un errore non inizializzarle se assegni loro un valore prima di leggerle, ma si parla di 2 caratteri da aggiungere su una riga, non mi pare uno spreco metterli
    Hai ragione, diciamo che erroneamente non inizializzavo le variabili che prendevo poi da tastiera, ma imparerò a farlo da ora in poi
  • Re: Problema conta occorrenze in una sequenza

    Nippolo ha scritto:



    Sbagliato, è poco probabile ma potrebbe anche stampare 1. Il motivo, come ho già provato a spiegarti più volte, è che una variabile non inizializzata non è come dici tu "vuota" (che poi bisognerebbe vedere cosa significa), ma presenta un valore indeterminato che dipende da cosa si trova in quel momento nelle locazioni di memoria ad essa dedicate.
    Se ancora non ci credi prova a lanciare il seguente codice:
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        int a, b, c;
        cout << a << endl << b << endl << c;
    }
    Riprendo quello che ho scritto in precedenza
    se utilizzi una variabile devi prima assegnargli un valore
    Come vedi io parlo di assegnazione in generale, che comprende sia il caso di inizializzazione che quello di inserimento da tastiera.
    Ho capito ciò che vuoi dirmi, imparerò a inizializzare le variabili in ogni occasione, ti ringrazio per il tempo che mi hai dedicato
  • Re: Problema conta occorrenze in una sequenza

    WinterSoldier ha scritto:


    Ho capito ciò che vuoi dirmi, imparerò a inizializzare le variabili in ogni occasione, ti ringrazio per il tempo che mi hai dedicato
    Di niente, anche se non è proprio quello che stavo cercando di spiegarti!
Devi accedere o registrarti per scrivere nel forum
23 risposte