Losowanie bez powtórzeń problem ze zrozumieniem
Ostatnio zmodyfikowano 2015-07-21 22:52
kapelusznik Temat założony przez niniejszego użytkownika |
Losowanie bez powtórzeń problem ze zrozumieniem » 2015-07-19 22:08:28 Witam nie mogę zrozumieć dlaczego w tym kodzie: #include <iostream> #include <cstdlib> #include <ctime>
using namespace std;
int wylosuj() { return( rand() % 10 ) + 1; }
bool czyByla( int liczba, int wylosowane, int losowe[] ) { if( wylosowane <= 0 ) return false; int i = 0; do { if( losowe[ i ] == liczba ) return true; i++; } while( i < wylosowane ); return false; }
int wypisz( int losowe[], int wylosowane ) { do { cout << losowe[ wylosowane ] << endl; wylosowane++; } while( wylosowane < 5 ); }
int main() { int losowe[ 10 ]; int wylosowane = 0; int liczba; srand( time( NULL ) ); do { liczba = wylosuj(); if( czyByla( liczba, wylosowane, losowe ) == false ) { losowe[ wylosowane ] = liczba; wylosowane++; } } while( wylosowane < 5 ); wylosowane = 0; wypisz( losowe, wylosowane ); return 0; }
Jest to: do { if( losowe[ i ] == liczba ) return true; i++; } while( i < wylosowane );
return false;
Nie mogę poprostu zapisać tego w taki sposób: if( losowe[ i ] == liczba ) return true; else return false;
Po co mi tu pętla? |
|
JMII89 |
» 2015-07-19 23:41:41 A w jaki sposób chcesz się przejść po tablicy jak nie pętlą ? Twój przykład jest zły bo przecież będziesz sprawdzał tylko jeden indeks czyli tab[0]. W tej funkcji chodzi o to aby sprawdzić czy w danej tablicy istnieje już liczba wylosowana. |
|
carlosmay |
» 2015-07-20 00:12:17 do { if( losowe[ i ] == liczba ) return true; i++; } while( i < wylosowane );
return false;
bo w tej funkcji musisz porównać wszystkie istniejące elementy tablicy z liczbą wylosowaną i jak natrafisz na taką to wraca do miejsca wywołania i wymusza losowanie nowej liczby. Natomiast daje znać, że liczba wylosowana nigdzie nie powtarza się więc należy ją dodać, ale dopiero po przejściu po całej tablicy. Jak zrobisz na skróty po swojemu to w pierwszym przebiegu wrócisz z funkcji nie sprawdzając całej tablicy, bo niezależnie od wartości w warunku zadziała jeden z return'ów. |
|
kapelusznik Temat założony przez niniejszego użytkownika |
» 2015-07-21 22:52:38 Dzięki wszystkim za pomoc już zrozumiałem! |
|
« 1 » |