C - SALVARE ELEMENTI DI UNA MATRICE IN UN VETTORE SENZA RIPETIZIONI

di il
5 risposte

C - SALVARE ELEMENTI DI UNA MATRICE IN UN VETTORE SENZA RIPETIZIONI

Salve, come si può evincere dal titolo ho bisogno di un aiuto per salvare gli elementi di un array bidimensionale (matrice) in un array monodimensionale (vettore) in modo tale che ogni singolo elemento della matrice compaia una ed una sola volta nel vettore. Vi posto il codice che ho scritto finora, senza aver ottenuto risultato positivo:
 vett[0]=mat[0][0]; // il primo elemento non deve essere confrontato perchè è il primo che andremo ad inserire
    k=0;
    do {
        rip=0;
        for (i = 0; i < r; i++) {
            for (j = 0; j < c; j++) {
                for (s = 0; s < k + 1; s++) {
                    if (mat[i][j] == vett[s]) {
rip=1;
                    }
                    if (rip==0){
                        vett[k+1]=mat[i][j];
                        k=k+1;
                    }
                }
            }
        }
    }while(i<r);
    printf("\n %d\n",k);
    for(s=0;s<k+1;s++){
        printf("%5d",vett[s]);
    }

        }
Ho trascritto solo la porzione di codice utile. Se può servire, la matrice e le sue dimensioni sono prese da un file di testo e viene anche stampata correttamente, l'unico problema che mi ferma per finire questa traccia è questo problema, che sicuramente sarà una sciocchezza, ma proprio non riesco a venirne a capo. Spero possiate aiutarmi e vi ringrazio anticipatamente!

5 Risposte

  • Re: C - SALVARE ELEMENTI DI UNA MATRICE IN UN VETTORE SENZA RIPETIZIONI

    Non capisco perché ti sei andato a incasinare con un do...while quando bastano i due for annidati che hai già scritto
  • Re: C - SALVARE ELEMENTI DI UNA MATRICE IN UN VETTORE SENZA RIPETIZIONI

    Il do-while l'ho inserito per poter inserire a sua volta la variabile RIP, che deve valere 1 nel caso si incontra almeno una ripetizione e 0 nel caso in cui non se ne incontrino e ciò viene ripetuto per ogni elemento della matrice. Il do-while quindi, mi permette di portarlo a 0 tutte le volte finchè non si raggiunge l'indice massimo di riga/colonna della matrice. In ogni caso, riusciresti a trovare una qualche soluzione? Sto impazzendo su questa sciocchezza!
  • Re: C - SALVARE ELEMENTI DI UNA MATRICE IN UN VETTORE SENZA RIPETIZIONI

    BigBoss1926 ha scritto:




    In ogni caso, riusciresti a trovare una qualche soluzione?
    Lo ho già fatto
    E te lo ho già detto

    Evidentemente 'rip' non va messa lì...


    Anzi aggiungo:

    Con un po' di pensiero in più rip manco serve e si può accelerare significativamente anche il ciclo
  • Re: C - SALVARE ELEMENTI DI UNA MATRICE IN UN VETTORE SENZA RIPETIZIONI

    Ciao, scusa ma ho lasciato perdere per un po' questo esercizio. Ti ringrazio intanto per le risposte che mi hai fornito. Ti vorrei chiedere, gentilmente, se potessi scrivermi (se non chiedo troppo ovviamente) questa porzione di codice in modo tale che funzioni e magari se puoi anche spiegarmi come procedi. A me piace tantissimo sbattere la testa poichè preferisco arrivarci sempre da solo alle soluzione, ma in questo caso mi sono arreso.. Proprio non riesco a venirne fuori!
  • Re: C - SALVARE ELEMENTI DI UNA MATRICE IN UN VETTORE SENZA RIPETIZIONI

    Ma se ti ha detto come fare...
    
            k = 0;
            for (i = 0; i < r; i++) {
                for (j = 0; j < c; j++) {
                    rip = 0;
                    for (s = 0; s < k; s++) 
                        if (mat[i][j] == vett[s]) 
                            rip = 1;
                    if (rip==0)
                         vett[k++]=mat[i][j];
                }
            }
    
Devi accedere o registrarti per scrivere nel forum
5 risposte