Scorrere fino ad N.

di il
6 risposte

Scorrere fino ad N.

Ciao volevo chiedervi come scorrere un array fino a N in C++.
In pratica devo vedere quanti elementi ci sono uguali nell'array. Questi elementi uguali dipendono da N.
Vi spiego:

N = 3;
dim = 9;
A[dim] = {1,1,1,2,2,2,3,3,3};

Vorrei scorrere l'array e se ci sono 3 elementi uguali ossia 3 numeri 1 uguali, 3 numeri 2 uguali e 3 numeri 3 uguali mi stampa "ok" altrimenti mi stampa "No".

Con 3 elementi lo riesco a fare ma se ne metto 4 non riesco più. Come dovrei fare? Il numero di elementi dipende da N. Quindi se N = 3 il contatore deve controllare se sono uguali i numeri a blocchi di 3 elementi. Se N = 4, il contatore deve controllare se ci sono 4 blocchi di elementi uguali. Quindi 4 numeri 1, 4 numeri 2 e 4 numeri 3.

Se non mi sono spiegato chiedete pure.
Grazie delle eventuali risposte !

6 Risposte

  • Re: Scorrere fino ad N.

    Hai detto che fino a 3 riesci a farlo, se posti il codice vediamo insieme cosa dobbiamo modificare per farlo funzionare anche con più di 3 blocchi. Inoltre, il numero di 'blocchi' dipende da N? devono essere consecutivi oppure un blocco può essere separato da un altro blocco? I blocchi possono ripetersi? ad esempio:
    
    N=3;
    {1,1,1, 0,0,2,2,2,3,3,3} //è valido?
    {1,1,1,0,0,2,2,2} //è valido?
    {1,1,1,2,2,2,2,2,2} //è valido?
    
  • Re: Scorrere fino ad N.

    Guarda allora ti spiego: Se la dimensione dell'array è 9 ovviamente ci devono essere 9 elementi.
    Il programma mi deve restituisce "ok" se questo array è formato da blocchi di N elementi tutti uguali.
    Se anche solo un numero del blocco è diverso dal blocco stesso il programma mi deve restituire "No".

    Alcuni esempi per chiarire:

    1)
    
    Dim = 4;
    
    N = 2;
    A = {11,22} mi restituisce OK !
    //Qui deve controllare solamente due numeri perchè N = 2. Ci sono 2 blocchi : il primo formato da 1,1 e l'altro formato da 2,2.
    
    2)
    
    dim = 12;
    N = 4;
    
    A = {1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4} mi restituisce OK !
    
    -Controllo se il primo blocco formato da 1,1,1,1 è composta da uguali elementi ==> Si!
    -Controllo se il secondo blocco formato da 2,2,2,2 è composta da uguali elementi ==> Si!
    -Controllo se il terzo blocco formato da 3,3,3,3 è composto da uguali elementi ==> Si!
    -Controllo se il quarto blocco formato da 4,4,4,4 è composta da uguali elementi ==> Si!
    - Restituisce OK!.
    
    //Controlla i primi 4 elementi del primo blocco, i secondi 4 elementi del secondo blocco etc.
    Se ogni blocco ha gli elementi uguali (del relativo blocco) allora restituisce OK.
    
    A = {1,1,1,1,2,2,2,2,3,3,4,3,4,4,4,4}  restituisce NO !
    
    Il blocco formato da 3,3,4,3 non contiene tutti gli stessi elementi. Gli altri blocchi ossia: 1,1,1,1 2,2,2,2, e 4,4,4,4 vanno bene. 
    
    I primi due esempi che hai fatto tu non sono validi perchè in origine io ho una matrice quadrata quindi i blocchi devono essere quadrati.Immagina di mettere a matrice gli elementi dell'array in base ad N.

    1° esempio fatto da te:
    
    N = 3;
    1 1 1
    0 0 2
    2 2 3
    3 3    ==> Mancherebbe un elemento. Anche se ci metto un elemento ad esempio il numero 3 mi restituisce NO. Perchè: A ={1,1,1,0,0,2,2,2,3,3,3,3(elemento aggiunto)}. 
    -controlla il primo blocco (1,1,1) ==> ok!
    -controlla il secondo blocco (0,0,2) ==> No !
    -Esci dal programma. 
    
    2° Esempio che hai fatto.
    
    N = 3;
    
    1 1 1
    0 0 2
    2 2   ==> Manca sempre un elemento.Per il motivo detto sopra restituisce No.
    
    3° esempio che hai fatto.
    
    N = 3
    
    1 1 1
    2 2 2
    2 2 2
    Questa matrice va bene e restituirebbe OK.
    

    Se servono ancora delle spiegazioni ditemelo, sono a vostra disposizione !
  • Re: Scorrere fino ad N.

    Ora si, infatti non avevi specificato che si trattava di una matrice quadrata . comunque come ho detto nel post precedente, metti il codice così che vediamo insieme cosa c'è che non va con più di 3 blocchi.
    Comunque in base a quello che mi hai appena detto, nel tuo esempio dove dim=12 , se N=4 dovrebbe essere dim=16 .
  • Re: Scorrere fino ad N.

    Si scusa metto con N = 3.
    
    
    A ={1,1,1,2,2,2,3,3,3}
    
    for(int i = 0; i < 9; i++)
    {
       if(a[i] == a[i+1] && a[i+1] == a[i+2])
       { 
           cout << "Ok\n";
        }
    
    }
    
    
    Mi stampa 3 volte OK.

    Quindi dovrebbe andare bene, però solo per 3 elementi.

    Ps: Scusa degli errori !

    Grazie delle risposte.
  • Re: Scorrere fino ad N.

    Dovresti generalizzare il problema. dato che devi operare su una matrice quadrata con N righe ed N colonne , quindi un array N*N , dovresti fare prima il controllo se l'array può essere visto come la 'serializzazione' in memoria di tale matrice (l'array risulta una matrice quadrata di ordine N se : dim. array / N = N e dim. array modulo N = 0 ). se queste condizioni non sono verificate, allora sicuro non stai operando su una 'matrice quadrata' per cui ritorni falso. nel caso siano verificate entrambi, allora puoi procedere per vedere se 'tutti gli elementi' di ogni 'riga' sono uguali. La riga è di dimensione N, per cui è un semplice confronto con il primo elemento della riga e i restanti. appena trovi un numero nella riga diverso da un altro numero nella stessa riga, ritorni falso. Solo se tutto va bene ritorni vero. Prova a ristrutturare il tuo codice in base a ciò che ti ho detto, poi postalo e vediamo.
  • Re: Scorrere fino ad N.

    Grazie ci provo se non riesco lo posto , o quanto meno posto come l'ho fatto.
    Grazie ancora !
Devi accedere o registrarti per scrivere nel forum
6 risposte