Losowanie bez powtórzeń, pojawiają się powtórzenia
Ostatnio zmodyfikowano 2015-03-28 12:07
Mlorism Temat założony przez niniejszego użytkownika |
Losowanie bez powtórzeń, pojawiają się powtórzenia » 2015-03-28 10:47:51 Środowisko C::B. Powinno losować 5 liczb bez powtórzeń, jednak losuje z w powtórzeniami. Nie rozumiem, w którym miejscu jest błąd. Byłbym wdzięczny za wskazanie go. #include <iostream> #include <time.h> #include <cstdlib>
using namespace std;
int posrednia; int liczba[ 5 ]; int wylosowano = 0; bool losowanie;
int main() { srand( time( 0 ) ); for( int j = 0; j < 5; j++ ) { do { losowanie = true; posrednia = rand() % 10; for( int i = 1; i <= wylosowano; i++ ) { if( posrednia == liczba[ i ] ) losowanie = false; } if( losowanie == true ) { wylosowano++; liczba[ j ] = posrednia; } } while( losowanie = false ); } for( int j = 0; j < 5; j++ ) { cout << liczba[ j ] << " "; } return 0; }
|
|
pekfos |
» 2015-03-28 11:24:00 while( losowanie = false );
|
Zły warunek. |
|
Mlorism Temat założony przez niniejszego użytkownika |
» 2015-03-28 11:28:32 Spróbowałem, ale nie. Jeśli warunek będzie zmieniony z false na true, to program się nie wykona. Zawiesza się. Ja chcę by pętla powtarzała się tak długo, jak losowanie jest określone jako false (bo liczba się powtórzyła, z którąś z już wylosowanych). |
|
pekfos |
» 2015-03-28 11:30:38 Operator. |
|
Mlorism Temat założony przez niniejszego użytkownika |
» 2015-03-28 11:45:17 Faktycznie tutaj brakowało i był błąd, jednak mimo poprawienia, losuje z powtórzeniami. :/ |
|
pekfos |
» 2015-03-28 12:07:59 for( int i = 1; i <= wylosowano; i++ )
|
Tablice indeksuje się od zera. I zastanów się, czy użycie dwóch pętli wokół losowania ma sens. |
|
« 1 » |