Eliminare Valori Ripetuti Array Dinamico

di il
6 risposte

Eliminare Valori Ripetuti Array Dinamico

Salve ragazzi, mi sto preparando l'esame di fondamenti di informatica e sto impazzendo su un esercizio che proprio non riesco a capire come vada svolto.

Testo: Scrivere una funzione che, dato un vettore (array dinamico) contenente valori interi anche ripetuti, costruisca un vettore senza valori ripetuti. Inoltre i valori del nuovo vettore devono rimanere nello stesso ordine in cui vendono incontrati per la prima volta nel vettore dato.


Il problema lo trovo a livello concettuale per lo più, ho provato a riflettere su una funzione ricorsiva, sullo scorrimento dell'array con doppio ciclo for...nessuna delle mie idee si è rivelata efficace però...qualcuno saprebbe gentilmente darmi una mano?

Grazie Mille!

6 Risposte

  • Re: Eliminare Valori Ripetuti Array Dinamico

    Direi di procedere in questo modo.
    Nel secondo vettore inserisci solo gli elementi non appartenenti a questo vettore e cioè
    1. Scorri il primo vettore
    2. Per ogni elemento controlli se esiste nel secondo vettore
    2a. Se esiste prossegui
    2b. Se non esiste inseriscilo nel secondo vettore
    3. Fine del programma
  • Re: Eliminare Valori Ripetuti Array Dinamico

    Ti ringrazio per la risposta ma c'è un punto che non mi è chiaro: il secondo vettore che dici nel punto 2. come va inizializzato? Cosa c'è dentro?

    Grazie ancora
  • Re: Eliminare Valori Ripetuti Array Dinamico

    Hai due scelte ...

    1) esegui una realloc ogni volta che devi aggiungere un nuovo elemento del secondo vettore

    2) allochi lo stesso numero di elementi del primo vettore per il secondo e, alla fine del programma, esegui una sola realloc per dimensionare correttamente il secondo vettore (che potrebbe essere più piccolo del primo)

    Ovviamente la scelta consigliata è la 2)
  • Re: Eliminare Valori Ripetuti Array Dinamico

    Oregon, il sistema che dici tu è quello che userei in condizioni normali...questo corso però (non chiedere perché) non prevede l'utilizzo delle librerie standard (ad eccezione di iostream) perciò non posso usare una realloc...pensa che mi fa dichiarare gli array come
    int* vettore=new int[n]
    con n la lunghezza del vettore...è una cosa assolutamente priva di senso secondo me ma è così ed è da questo vettore che devo eliminare i doppioni
  • Re: Eliminare Valori Ripetuti Array Dinamico

    Non vedo nulla di strano nel fatto che ti fanno usare la new dato che vogliono il codice C++ e non C.

    In ogni caso, anche con la new il discorso cambia poco. Allochi un secondo vettore uguale al primo e poi ne allochi un terzo dell'esatta dimensione eliminando il secondo.

    Oppure, se puoi, usi uno std::vector
  • Re: Eliminare Valori Ripetuti Array Dinamico

    Vada per la soluzione a tre vettori, è l'unica che potrei utilizzare senza realloc ed altre funzioni all'infuori del new

    Grazie mille!
Devi accedere o registrarti per scrivere nel forum
6 risposte