PDA

Visualizza la versione completa : [C++] Inserimento dati in un ciclo con controllo


MrNycky
04-12-2016, 18:00
Ciao, tramite un ciclo for devo far sì che se inserisco 1, 2, 3 e poi di nuovo 1 mi dice errore e mi fa reinserire il 4 dato senza iniziare tutto da capo. Questo è il ciclo e da un po' di errori. Come posso sistemarlo?

http://pastebin.com/UrSCSpAD

Scara95
04-12-2016, 19:09
Attento, devi scorrere solo gli elementi che hai già inserito e ti interessa solo il caso trovato/non trovato.
Concettualmente puoi fare una cosa del genere.


type dati[N];
for(int i = 0; i < N; ++i) {
type tmp;
//leggi in tmp
boolean found = false;
//scorro gli elementi precedenti per vedere se ce n'è uno uguale
//se c'è interrompo il ciclo
for(int j = 0; j < i && !found; j++) {
found = dati[j] == tmp;
}
if(found) {
cout << messaggio_errore;
//torno allìiterazione precedente
--i;
}
}

Sarebbe più efficiente tenere una lista ordinata e tentare di fare un inserimento ordinato su questa lista, tuttavia se si tratta di pochi elementi il gioco non vale la candela, complichi il codice per nulla e il caso pessimo è lo stesso.
Se non hai capito quest'ultima frase ignorala pure che non è una cosa essenziale, era solo per fare un'annotazione.

MrNycky
05-12-2016, 16:50
Non capisco a cosa serva quel "type tmp", potresti spiegarmi?

Scara95
06-12-2016, 11:17
Ah, mi sono dimenticato l'inserimento lol

type dati[N];
for(int i = 0; i < N; ++i) {
type tmp;
//leggi in tmp
boolean found = false;
//scorro gli elementi precedenti per vedere se ce n'è uno uguale
//se c'è interrompo il ciclo
for(int j = 0; j < i && !found; j++) {
found = dati[j] == tmp;
}
if(found) {
cout << messaggio_errore;
//torno allìiterazione precedente
--i;
}
else {
dati[i] = tmp;
}
}

Volendo puoi anche non usarla e leggere direttamente in dati[i]

Loading