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

Losowanie bez powtórzeń - Program rozwiązujący zadanie

Ostatnio zmodyfikowano 2015-10-29 19:25
Autor Wiadomość
Lich555
Temat założony przez niniejszego użytkownika
Losowanie bez powtórzeń - Program rozwiązujący zadanie
» 2015-10-27 22:57:06
Witam.
Mam pytanie odnośnie programu rozwiązującego zadanie w temacie "Losowanie bez powtórzeń".
Otóż nie rozumiem działania jednej rzeczy, która wg mnie jest zbędna. Mianowicie:
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

bool czyBylaWylosowana( int iLiczba, int tab[], int ile )
{
    //odtąd
    if( ile <= 0 )
         return false; //dotąd. Po co to?
   
    int i = 0;
    do
    {
        if( iLiczba == tab[ i ] )
             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
    {
        cout << wylosowane[ wylosowanych ] << endl;
        wylosowanych++;
    } while( wylosowanych < 5 );
   
    return 0;
}
P-139278
carlosmay
» 2015-10-27 23:13:37
C/C++
//odtąd
if( ile <= 0 )
     return false; //dotąd. Po co to?

 
 Dalsza część funkcji ma się nie wykonywać, bo dane są błędne (rozmiar aktualny wypełnianej tablicy jest ujemny).
Nic więcej. Kod jest prosty i nie wykracza poza aktualny zakres wiedzy.
P-139279
Lich555
Temat założony przez niniejszego użytkownika
» 2015-10-28 16:24:05
"ile" na początku ma wartość 0, a określone jest to przez zmienną "wylosowanych" w main, tak?
Czyli, jeśli dobrze zrozumiałem, to po pierwszym losowaniu "ile" jest równy 0, więc nie sprawdza, czy dana liczba została wylosowana, tak?
P-139287
carlosmay
» 2015-10-28 17:59:53
Tak.
P-139296
Lich555
Temat założony przez niniejszego użytkownika
» 2015-10-28 18:19:00
Jeszcze jedno pytanie mam. Czemu w main w if dajemy na końcu false?
P-139298
carlosmay
» 2015-10-28 18:38:00
Żeby było czytelnie. Jeśli wróci false wykonaj instrukcję.
Gdybyś tego nie dał warunek byłby fałszem, a tak jest prawdziwy.

Jeśli dobrze ogarniasz ten temat możesz zapisać to tak:
C/C++
if( !czyBylaWylosowana( liczba, wylosowane, wylosowanych ) )
P-139302
Lich555
Temat założony przez niniejszego użytkownika
» 2015-10-28 19:35:08
A return true jest konieczne?
P-139307
carlosmay
» 2015-10-28 20:26:57
Od True lub false zależy czy instrukcja się wykona.
Na to pytanie sam możesz znaleźć odpowiedź.
Przeanalizuj funkcje. Co po kolei jest wykonywane.
P-139308
« 1 » 2
  Strona 1 z 2 Następna strona