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

Lekcja 21 Losowanie bez powtórzeń

Ostatnio zmodyfikowano 2017-09-04 16:44
Autor Wiadomość
Jarek50000
Temat założony przez niniejszego użytkownika
Lekcja 21 Losowanie bez powtórzeń
» 2017-09-04 10:59:29
WITAJCIE!!

Mam mały problem ze zrozumieniem programu przedstawionego w kursie .
Nie rozumiem celu warunku if (ile<=0) w funkcji czyBylaWylosowana().Proszę o kilka słów komentatrza dlaczego właśnie tak to zostało napisane.

C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>

bool czyBylaWylosowana( int iLiczba, int tab[], int ile )
{
    if( ile <= 0 ) // ?? Co dokładnie robi ten warunek ?? Po co jest to potrzebne: 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++;
        } //if
    } while( wylosowanych < 5 );
   
    wylosowanych = 0;
    do
    {
        std::cout << wylosowane[ wylosowanych ] << std::endl;
        wylosowanych++;
    } while( wylosowanych < 5 );
   
    return 0;
}
P-164570
maly7
» 2017-09-04 15:53:54
Warunek jest tam po to, że jeśli nie została jeszcze wylosowana żadna liczba (ile == 0) to od razu zwróci false.
Jeśli zastosowałbyś pętlę while albo for gdzie na początku sprawdzany jest warunek ( i < ile ) nie musiałbyś wstawiać tamtego warunka bo pętla by się nie wykonała. Natomiast pętla do...while wykonuje się zawsze przynajmniej raz, więc nie można porównać tab[0] bo nic tam jeszcze nie wstawiono.
P-164582
Jarek50000
Temat założony przez niniejszego użytkownika
» 2017-09-04 16:41:33
Dzięki za jasne wytlumaczenie. Właśnie ttego mi zabrakło.Pzdr
P-164584
matix04
» 2017-09-04 16:44:41
P-164585
« 1 »
  Strona 1 z 1