Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wytłumaczenie przykładu z losowaniem bez powtórzen

Ostatnio zmodyfikowano 2014-10-18 21:59
Autor Wiadomość
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:
C/C++
#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; //raz jest false raz jest true o co chodzi?
}

int wylosuj()
{
    return( rand() % 10 ) + 1; //wiem
}

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++;
        } //if
    } while( wylosowanych < 5 );
   
    wylosowanych = 0;
    do
    {
        std::cout << wylosowane[ wylosowanych ] << std::endl;
        wylosowanych++;
    } while( wylosowanych < 5 );
   
    return 0;
}
P-118053
pekfos
» 2014-10-07 16:27:04
C/C++
return false; //raz jest false raz jest true o co chodzi?
czyBylaWylosowana. To jakby po polsku.. "Czy była wylosowana?": "tak"(true), "nie"(false).
P-118056
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ł.
P-118094
Rashmistrz
» 2014-10-18 21:59:46
Autor tematu widział wiadomośćAutor tematu widział wiadomość
i najwyraźniej się przestraszył, bo nie napisałem wersji TL;DR...
P-118820
« 1 »
  Strona 1 z 1