Come confrontare elementi dello stesso array?

di il
22 risposte

Come confrontare elementi dello stesso array?

Buonasera a tutti, avrei un problema, non so come confrontare elementi dello stesso vettore, cioè dato un vettore stabilire se ci sono elementi uguali

22 Risposte

  • Re: Come confrontare elementi dello stesso array?

    Il miglio sistema per ottenere risposte a questo tipo di domante NON E' chiederle al forum, ma ACQUISTARE un libro e studiare.

    Non e' per non rispondere.

    Il problema e' che esempi del genere li trovi PROPRIO nel capitolo relativo alla gestione dei vettori, che viene DOPO il capitolo sulle strutture di controllo del linguaggio, tra le quali c'e' il ciclo for che e' esattamente quello che ti serve.

    Per lavorare con i vettori devi sapere come creare e scandire un vettore.
    Per spare come creare un vettore, devi sapere come funziona l'allocazione di mememoria e che cosa e' un intero
    Per sapere come scandire un vettore, devi sapere come creare un ciclo e che cosa e' un indice,...

    Insomma, ci sono un sacco di concetti che DEVI CONOSCERE PRIMA prima di poter scrivere le 2.5 righe di codice che ti servirebbero per controllare se ci sono elementi duplicati in un vettore.

    Tra l'altro ci sarebbe anche il problema di come ORDINARE il vettore, il che richiede conoscere che cosa sia una funzione e, se vogliamo essere sofisticati, che cosa sia una funzione ricorsiva (quick sort).
  • Re: Come confrontare elementi dello stesso array?

    Dovresti scorrere l'array elemento per elemento, confrontando gli elementi per segnalare tutti i casi "doppi".

    Nel ciclo, potresti usare due contatori (i e j), il primo dei quali usato per scorrere tutti i valori una sola volta (i, da 0 a Q_ELEMENTI-1), il secondo invece usato per confrontare con quello che stai prendendo in considerazione tutti i valori NON ANCORA CONFRONTATI (j, da i+1 a Q_ELEMENTI-1).

    Il fatto che j non riprende ogni volta da capo deriva dal fatto che i confronti hanno questo schema (ipotizzando un array di 5 elementi e indicando coi numeri gli indici degli elementi dell'array):

    0-1 0-2 0-3 0-4 // nel primo ciclo controlliamo tutti gli abbinamenti
    1-2 1-3 1-4 // 1-0 è già stato controllato nel ciclo precedente
    2-3 2-4 // 2-0 e 2-1 son già stati controllati nei cicli precedenti
    3-4 // 3-0, 3-1 e 3-2 son già stati controllati nei cicli precedenti

    Ovviamente non avrebbe senso controllare 0-0, 1-1, 2-2 e così via, che infatti vengono saltati.
    #include <stdio.h>
    #include <stdlib.h>
    
    #define Q_ELEMENTI  13
    
    int main() {
        int i, j, v[Q_ELEMENTI] = { 3,1,3,4,2,0,6,5,3,8,4,9,7 };
    
        printf( "L'elenco dei valori:\n" );
    
        for( i=0; i<Q_ELEMENTI; ++i )
            printf( "%d%s", v[i], i!=Q_ELEMENTI-1?" ":"\n\n" );
    
        for( i=0; i<Q_ELEMENTI; ++i ) {
            for( j=i+1; j<Q_ELEMENTI; ++j ) {
                if( v[i] == v[j] ) {
                    printf( "L'elemento #%d e' uguale all'elemento #%d (%d)\n",
                            i+1, j+1, v[i] );
                }
            }
        }
    
        printf( "\nPremi \"invio\" per lasciare il programma... " );
        getchar();
        return 0;
    }
    Ha ragione migliorabile quando ti dice che ti conviene prendere le cose un po' "alla lontana" e andare a vedere con attenzione gli argomenti che ti ha indicato.
  • Re: Come confrontare elementi dello stesso array?

    AldoBaldo ha scritto:


    Ha ragione migliorabile quando ti dice che ti conviene prendere le cose un po' "alla lontana" e andare a vedere con attenzione gli argomenti che ti ha indicato.
    Poi puntualmente arrivi tu che gli eviti questo sforzo... e la possibilità di imparare risolvendo da solo (oltretutto sbagliando anche la prima for)
  • Re: Come confrontare elementi dello stesso array?

    Oregon: "sbagliando anche la prima for"

    Cioè? Non vedo l'errore. Ti riferisci al for in cui si elencano i valori nell'array o al più esterno dei cicli annidati?
  • Re: Come confrontare elementi dello stesso array?

    Leggi un libro, o cerca C vector sort
  • Re: Come confrontare elementi dello stesso array?

    AldoBaldo ha scritto:


    Oregon: "sbagliando anche la prima for"

    Cioè? Non vedo l'errore. Ti riferisci al for in cui si elencano i valori nell'array o al più esterno dei cicli annidati?
    Al più esterno...
  • Re: Come confrontare elementi dello stesso array?

    Dunque questo: for( i=0; i<Q_ELEMENTI; ++i )... cosa c'è che non va? Prende in considerazione tutti gli elementi del vettore, da v[0] a v[Q_ELEMENTI-1]. Non vedo.
  • Re: Come confrontare elementi dello stesso array?

    Sarebbe meglio se consideri gli elementi da da v[0] a v[Q_ELEMENTI-2]
  • Re: Come confrontare elementi dello stesso array?

    AldoBaldo ha scritto:


    Dunque questo: for( i=0; i<Q_ELEMENTI; ++i )... cosa c'è che non va? Prende in considerazione tutti gli elementi del vettore, da v[0] a v[Q_ELEMENTI-1]. Non vedo.
    E la seconda for che elementi prende in considerazione, in conseguenza di questa?

    Non è un vero e proprio errore ma bisogna stare attenti ...
  • Re: Come confrontare elementi dello stesso array?

    Ah, quello! L'avevo ovviamente notato quando ho effettuato il test con il debugger, però ho deciso intenzionalmente di lasciare le cose così, visto che il ciclo interno non considera comunque gli elementi "esterni" al vettore, per via della verifica j<Q_ELEMENTI che viene effettuata ad ogni passaggio.

    A questo punto mi viene da fare una domanda per la quale non ho mai trovato risposta: se scrivo un ciclo tipo for( i=0; i<variabile-1; ++i ), la sottrazione viene ripetuta ad ogni ripetizione del ciclo o solo in ingresso? A senso, mi verrebbe da pensare che debba essere ripetuta ad ogni ciclo, perché variabile potrebbe cambiare il suo valore nel corso dell'esecuzione. E se invece di una variabile usiamo una costante, tipo for(i=0; i<10-1; ++i )? (lo so che non ha senso mettere 10-1, però penso che il punto sia chiaro)
  • Re: Come confrontare elementi dello stesso array?

    Mi rispondo da solo: avviene ad ogni ripetizione del ciclo.
  • Re: Come confrontare elementi dello stesso array?

    Dunque, per quanto sia irrilevante, pare che la mia soluzione "risparmi" una quantità di operazioni maggiore rispetto a quelle che "spreca". Infatti genera un confronto j<Q_ELEMENTI in più, a fronte di una quantità di sottrazioni in meno che equivale alla quantità degli elementi nell'array.
  • Re: Come confrontare elementi dello stesso array?

    Quantità di sottrazioni?
  • Re: Come confrontare elementi dello stesso array?

    Sì, nel senso che con for( i=0; i<Q_ELEMENTI-1; ++i ) faccio una sottrazione inutile tra costanti ad ogni passaggio. E' ben vero che si potrebbe mettere Q_ELEMENTI-1 in una variabile e usare quella, come limite...
Devi accedere o registrarti per scrivere nel forum
22 risposte