Eliminazione di duplicati

di il
7 risposte

Eliminazione di duplicati

Titolo dell'esercizio:

(Eliminazione di duplicati) Usate un array unidimensionale per risolvere il seguente proble-
ma. Memorizzate 20 numeri, ognuno dei quali compreso tra 10 e 100, estremi inclusi. Quan-
do un numero viene letto, stampatelo solo se non è un duplicato di un numero già letto.
Tenete conto del “caso peggiore”, in cui tutti i 20 numeri sono differenti. Usate l’array più
piccolo possibile per risolvere questo problema.


#include <stdio.h>
#include <stdbool.h>
#define MAX 20

int main() {

    unsigned int a[MAX] = {0}; //array per input dell'utente
    unsigned int k = 0; //numero di valori immessi correttamente

    printf("Enter 20 integers between 10 and 100:\n");

    //ricevi 20 interi dall'utente
    for(unsigned int i = 0; i<=MAX-1; ++i){
        bool duplicate = false;
        unsigned int value; //valore corrente
        scanf("%u",&value);

        //verifica se l'intero è un duplicato
        for(unsigned int j = 0; j<k; j++){
            //se è un duplicato, imposta il flag è interrompi il ciclo
            if(value == a[j]){
                duplicate = true;
                break;
            }
        }

        //se il numero non è un duplicato, inseriscilo nell'array
        if(!duplicate){
            a[k++]=value;
        }
    }
    puts("\nThe nonduplicate values are:");

    //stampa l'array di non duplicati
    for(unsigned int i = 0; a[i] != 0; ++i){
        printf("%u", a[i]);
    }
    puts("");
}


Il primo ciclo for ha al suo interno un altro ciclo for ed ha anche un if(!duplicate)

Nel primo ciclo for si ha scanf() ed è concesso inserire i 20 numeri.

Adesso mi chiedo..., quando nel terminale vengono inseriti i 20 numeri, ovviamente si ha la possibilità di inserirne 20 e quando si arriva al ventesimo, automaticamente, viene fuori l'output!

Ma è il primo ciclo for che conta quante volte inseriamo i numeri nel terminale, giusto?
Cioè, è questo il ciclo for che conta le volte che inseriamo i numeri?
for(unsigned int i = 0; i<=MAX-1; ++i){
        bool duplicate = false;
        unsigned int value; //valore corrente
        scanf("%u",&value);

7 Risposte

  • Re: Eliminazione di duplicati

    Dalla domanda che poni, deduco che la soluzione non è opera tua e stai cercando di capirla, giusto?
  • Re: Eliminazione di duplicati

    Sì, quindi?
  • Re: Eliminazione di duplicati

    Confermo che la risposta non è mia, ed in effetti cerco di capirla!
  • Re: Eliminazione di duplicati

    oregon ha scritto:


    Sì, quindi?
    Ok, visto che ho compreso che è il primo ciclo for a fare la conta ...
    Allora sempre nello stesso ciclo, mentre fa la conta, con la seguente
    bool duplicate = false;

    verifica se è falso, giusto?
  • Re: Eliminazione di duplicati

    MT09_full ha scritto:


    Confermo che la risposta non è mia, ed in effetti cerco di capirla!
    Premesso che quella soluzione presenta margini di miglioramento, non pensi che sia arrivato il momento di cimentarti tu stesso nella soluzione degli esercizi? Saresti in grado di farlo?
    Se sì, ti consiglio vivamente di cominciare a farlo, in quanto sarebbe un approccio di studio molto più proficuo, in caso contrario domandati qual è il problema.
  • Re: Eliminazione di duplicati

    MT09_full ha scritto:


    bool duplicate = false;

    verifica se è falso, giusto?
    No. La verifica la fa la if. Quella linea assegna il valore false alla variabile.

    Questi concetti (assegnazione, test con la if, ciclo con la for) dovresti averli chiarissimi. E dovresti scriverla tu la soluzione dell'esercizio o almeno provarci. All'esame ti chiederanno di scriverlo da zero il codice, non di commentarlo.
  • Re: Eliminazione di duplicati

    oregon ha scritto:




    No. La verifica la fa la if. Quella linea assegna il valore false alla variabile.



    Ok oregon, ti ringrazio, stavo facendo confusione, per il resto ti ringrazio per i consigli, sono cose che già sto facendo!
Devi accedere o registrarti per scrivere nel forum
7 risposte