Wytłumaczenie przykładu z losowaniem bez powtórzen
Ostatnio zmodyfikowano 2014-10-18 21:59
ziken47 Temat założony przez niniejszego użytkownika |
Wytłumaczenie przykładu z losowaniem bez powtórzen » 2014-10-07 15:43:40 No nie wiem jak to sie dzieje! Prosze o wytłumaczenie przykładu: #include <iostream> #include <cstdlib> #include <ctime>
bool czyBylaWylosowana( int iLiczba, int tab[], int ile ) { if( ile <= 0 ) return false; int i = 0; do { if( tab[ i ] == iLiczba ) return true; i++; } while( i < ile ); return false; }
int wylosuj() { return( rand() % 10 ) + 1; }
int main() { srand( time( 0 ) ); int wylosowane[ 5 ]; int wylosowanych = 0; do { int liczba = wylosuj(); if( czyBylaWylosowana( liczba, wylosowane, wylosowanych ) == false ) { wylosowane[ wylosowanych ] = liczba; wylosowanych++; } } while( wylosowanych < 5 ); wylosowanych = 0; do { std::cout << wylosowane[ wylosowanych ] << std::endl; wylosowanych++; } while( wylosowanych < 5 ); return 0; }
|
|
pekfos |
» 2014-10-07 16:27:04 czyBylaWylosowana. To jakby po polsku.. "Czy była wylosowana?": "tak"( true), "nie"( false). |
|
Rashmistrz |
» 2014-10-07 19:41:38 Najłatwiejszym sposobem na poznanie działania (także przy poszukiwaniu błędów) jest jego przeczytanie i w myślach jego wykonanie...
(przy wielu zmiennych warto uzbroić się w kartkę jak i ołówek lub długopis... bądź zwykły windowsowy notatnik ^_^ )
//a teraz zaznaj moją dobroć ___________________________________________
1.Funkcja czyBylaWylosowana: ==W argumentach dostaje: -wylosowaną liczbę -tablicę z już wylosowanymi liczbami -ilość jużwylosowanych liczb (żeby wiedzieć do którego elementu tablicy sprawdzać) ==Instrukcje: 1.A sprawdza czy w ogóle coś było wylosowane (jeśli nie to zwraca "false" i wraca do funkcji main) 1.B pętla w której kolejno są porównywane elementy tablicy (jeśli któryś będzie równy wylosowanej to zwraca "false" i wraca do funkcji main) (pętla kończy się gdy tymczasowa zmienna będzie równa ilości elementów do sprawdzenia) 1.C zwraca "true" i wraca do funkcji main ____________________________________________
2.Funkcja wylosuj ==W argumentach dostaje: -nie przyjmuje nic ==Instrukcje: //w skrócie... zawsze zwraca liczbę od 1 do 10 włącznie. ____________________________________________
3.Funkcja main ==W argumentach dostaje: -nie przyjmuje nic ==Instrukcje: 3.A ustawia punkt startowy generatora pseudolosowego 3.B deklaruje tablicę wylosowane 3.C deklaruje zmienną wylosowanych z wartością "0" 3.D pętla, która wykonuje się aż do wypełnienia tablicy różnymi liczbami 3.D1 deklaruje zmienną liczba 3.D2 wywołuje funkcję wylosuj i przypisuje zwróconą wartość zmiennej liczba 3.D3 jeśli (wywoływana jest funkcja czyBylaWylosowana z argumentami: zmienną liczba, tablicę wylosowane, zmienną wylosowanych) zwrócona wartość funkcji czyBylaWylosowana jest równa "false" to: 3.D3A przypisuje liczba elementowi tablicy wylosowane o indeksie wylosowanych 3.D3B inkrementuje zmienną wylosowanych 3.D3"C" sprawdza warunek pętli i kończy ją gdy jest fałszywy 3.E zeruje zmienną wylosowanych (na potrzebę następnej pętli): 3.F pętla która wypisuję kolejno wartości liczb z tablicy wylosowane 3.G kończy działanie programu zwracając wartość "0" informującą, że program poprawnie wykonał zaprogramowane instrukcje.
//Warto zauważyć że gdyby trzeba by było wylosować więcej liczb niż jest //możliwych do wylosowania to program się zapętlił i nigdy nie zakończył.
|
|
Rashmistrz |
» 2014-10-18 21:59:46 Autor tematu widział wiadomość |
i najwyraźniej się przestraszył, bo nie napisałem wersji TL;DR... |
|
« 1 » |