Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2016
    Messaggi
    7

    [C++] Inserimento dati in un ciclo con controllo

    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

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    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.
    codice:
    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.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2016
    Messaggi
    7
    Non capisco a cosa serva quel "type tmp", potresti spiegarmi?

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Ah, mi sono dimenticato l'inserimento lol
    codice:
    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]
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.