Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [C++] do while

  1. #1

    [C++] do while

    il seguente programma è una semplice estrazione casuale di numeri che tramite un controllo evita le ripetizioni.. qui di seguito ho riportato la parte principale del codice.. il problema è che eseguendo il programma, esso si blocca.. rimane la schermata nera, e non capisco dove sia il problema..
    Altra cosa.. mettendo not alla condizione del while il programma esegue tranquillamente ma ripete i numeri, ma togliendo il not, esegue ma non da segno di vita..

    Illuminatemi

    codice:
    int a[6];
    int t;     
    srand(time(0));     
    for (int i=0;i<6;i++)     
    {     
            do{
                 a[i]=t=rand() % 90+1;           
                }while(test(a,t));    
    }
    
    
    bool test(int a[6],int t)
    {
         for (int i=0;i<6;i++)
         {
             if(a[i]==t)
                        return true;
         }
         return false;
    }

  2. #2
    Utente di HTML.it L'avatar di KrOW
    Registrato dal
    Feb 2009
    Messaggi
    281
    Ciao . . . Il problema è semplice. Siccome ad ogni ciclo del do-while inserisci nel vettore un numero è normale che quel numero sarà presente nel vettore e quindi test equivarrà sempre a true . . . È un pò come dire:
    codice:
    int i = 5;
    if( i == 5 )
    . . .
    Per risolvere devi assegnare ad a[i] solo dopo che il test tra a e t risulti false:
    codice:
    . . . 
    do
    {
    t = rand() % 90 + 1;
    } while( test(a,t) );
    a[i] = t;
    . . .
    C++ 4ever
    496e2062696e6172696f206e6f6e2063692061767265737469 206e656d6d656e6f2020726f7661746f203a29

  3. #3
    grazie a te ho capito l'errore.. cmq volevo dirti che il do while è proprio ciò che mi serve, il problema stava nella funziona test che percorrendo tutto l'array era ovvio che trovava il numero.. risolvero cambiando la funzione test, mettendoci un contatore che segnalerà quante volte è ripetuto il numero

    tipo così:
    codice:
    int cont=0;
    for (int i=0;i<6;i++)
         {
             if(a[i]==t)
                   cont++;
         }
    if (cont>1)
          return true;
    else
          return false;
    grazie mille

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 © 2026 vBulletin Solutions, Inc. All rights reserved.