bojo240 Temat założony przez niniejszego użytkownika |
Losowanie bez powtorzen. » 2015-11-11 23:58:18 Witam. Jako, że jestem trochę na bakier z funkcjami oraz przekazywaniem tablic do funkcji mam zwyczaj robienia najpierw zadania bez funkcji, a nastepnie 'pakowania go w funkcje', stad prosze o wyrozumiałość. Otóż natchnęło mnie na zrobienie zadania z rozdziału 21, tj losowanie bez powtórzeń. Zadanie polega na napisaniu programu który losuje 5 liczb z przedziału od 1-10 bez powtórzeń. Obecnie udało mi się co nieco stworzyć, ale brakuje mi zapewne jednej poprawki aby program faktycznie działał, ponieważ obecnie i owszem wyswietla 5 liczb z przedzialu 1-10, jednakże nie bardzo idzie mu sprawdzanie czy wczesniej byla wylosowana..;s. Mój obecny kod: #include <iostream> #include <cstdlib> #include <ctime> using namespace std; int main() { srand( time( 0 ) ); int i = 5; int a[ i ]; int x = 0; i = 0; while( i < 5 ) { a[ i ] =( rand() % 10 ) + 1; while( x == i ) { if( a[ i ] == a[ i - x ] ) { a[ i ] =( rand() % 10 ) + 1; } x++; } x = 0; cout << a[ i ] << endl; i++; } return 0; }
Prosiłbym o nakierowanie na problem. |
|
michal11 |
» 2015-11-12 00:34:59 W twoim programie po sprawdzeniu powiedzmy pierwszych 2 liczb, gdy okaże się, że 3 liczba w tablicy jest równa wylosowanej losujesz na nowo ale nie sprawdzasz czy ta nowa wylosowana liczba nie występuje wcześniej (na pozycji 0, 1) w tablicy. Myślę, że jak zmienisz pętle z while na for to trochę to uprości zrozumienie ci problemu i napisanie poprawnego algorytmu. |
|
bojo240 Temat założony przez niniejszego użytkownika |
» 2015-11-15 19:01:03 Szczerze powiedziawszy próbowałem wszystkimi petlami i na wszystkie sposoby i dalej nie idzie ;X |
|
bojo240 Temat założony przez niniejszego użytkownika |
» 2015-11-15 19:15:33 Ahh, wybacz, dopiero po paru dniach zajarzyłem ocb, otóż zabrakło mi ponownego wyzerowania mojej 'roznicy'. W razie czego mój nowy kod: #include <iostream> #include <cstdlib> #include <ctime> using namespace std; int main() { srand( time( 0 ) ); int i = 5; int a[ i ]; int x = 0; i = 0; while( i < 5 ) { a[ i ] =( rand() % 10 ) + 1; while( x <= i ) { if( a[ i ] == a[ i - x ] ) { a[ i ] =( rand() % 10 ) + 1; x = 0; } x++; } cout << a[ i ] << endl; i++; x = 0; } return 0; }
Dziękuję ci bardzo za pomoc, michal11 ^^ |
|
j23 |
» 2015-11-16 09:51:06 Tu wersja STL: std::array < int, 10 > tab = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
std::random_shuffle( tab.begin(), tab.end() );
for( int i = 0; i < 5; ++i ) std::cout << tab[ i ] << '\n'; Jeśli C++, to tak: const int i = 5; int a[ i ]; |
|
Monika90 |
» 2015-11-16 12:51:29 std::random_shuffle jest deprecated i będzie usunięte z C++17 (jest zamiennik czyli std::shuffle). Na dodatek, (random_)shuffle robi więcej niż potrzeba by wylosować 5 liczb z 10. |
|
« 1 » |