arszonto Temat założony przez niniejszego użytkownika |
[Roz.2][Lekcja 21] Problem z warunkiem. » 2013-06-09 19:08:06 Witam, otóż moim zadaniem jest napisanie programu który wylosuje 10 liczb z przedziału 1-10 bez powtórzeń. Napisałem owy programik, i wszystko według mnie się zgadza. Jednak podczas testu liczby się powtarzają. Nie mam pojęcia co jest źle z moim warunkiem. Proszę o pomoc, oto kod: #include <iostream> #include <cstdlib> #include <ctime> using namespace std; int losowanie( int tabela[], int licznik ) { srand( time( NULL ) ); do { tabela[ licznik ] =( rand() % 10 ) + 1; if( tabela[ licznik ] != tabela[ licznik + 1 ] ) { licznik--; } } while( licznik > 0 ); } int main() { int tabela[ 11 ]; int licznik = 10; losowanie( tabela, 10 ); do { cout << tabela[ licznik ] << " "; licznik--; } while( licznik > 0 ); }
Próbowałem też dodać: else { licznik = licznik; }
Ale nadal nie działa (chociaż w sumie... ten zapis nic nie zmienia). |
|
pekfos |
» 2013-06-09 19:49:43 Powtarzają się, bo sprawdzasz tylko ostatnio wylosowaną liczbę, a nie wszystkie. |
|
arszonto Temat założony przez niniejszego użytkownika |
» 2013-06-09 19:58:13 Tak, tuż przed twoją wiadomością to zauważyłem :). Zastanawiam się teraz, co zrobić aby sprawdzało wszystkie. Czy w C++ jest jakaś komenda "przedział", bądź coś podobnego? |
|
pekfos |
» 2013-06-09 20:03:04 Czy w C++ jest jakaś komenda "przedział", bądź coś podobnego? |
Nie wymyślaj. I tak w zadaniu możesz użyć tylko tego, co już poznałeś w kursie. |
|
arszonto Temat założony przez niniejszego użytkownika |
» 2013-06-09 20:08:12 Hmmm... Racja troszkę się zapędziłem. Zamiast się uczyć, chciałem tylko rozwiązać zadanie... Cóż... Mógłbyś mi chociaż powiedzieć, czy w mniej więcej taki sposób jak to robię da się wykonać zadanie, czy jest to ślepa uliczka i powinienem poszukać innego rozwiązania? |
|
pekfos |
» 2013-06-09 20:12:26 Da się. |
|
arszonto Temat założony przez niniejszego użytkownika |
» 2013-06-09 21:24:28 Udało mi się napisać taki kod. W teorii powinno wszystko działać, ale przy testach losowane są kosmiczne liczby wychodzące poza zakres. O co może chodzić? Zamieszczam kod: #include <iostream> #include <cstdlib> #include <ctime> using namespace std; bool sprawdzanie( int tabela[], int licznik, int aktualna ) { int numer = 0; if( licznik == 0 ) return( true ); do { if( tabela[ numer ] == aktualna ) return( false ); numer++; } while( numer < licznik ); return( true ); } int main() { int tabelaliczb[ 10 ]; int licznik = 0; int aktualna; do { aktualna =( rand() % 10 ) + 1; if( sprawdzanie( tabelaliczb, licznik, aktualna ) == true ); { tabelaliczb[ licznik ] = aktualna; licznik++; cout << tabelaliczb[ licznik ] << " "; } } while( licznik < 10 ); }
|
|
pekfos |
» 2013-06-09 21:26:05 Wyświetlasz liczby, które nie zostały jeszcze wylosowane, bo za wcześnie zwiększasz licznik. |
|
« 1 » 2 |