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);