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

Losowanie bez powtórzeń

Ostatnio zmodyfikowano 2014-08-28 10:59
Autor Wiadomość
mlOOdy
Temat założony przez niniejszego użytkownika
Losowanie bez powtórzeń
» 2014-08-27 21:36:14
Cześć, mam pytanie dotyczące rozdziału Losowanie bez powtórzeń z kursu, dlaczego w funkcji czyBylaWzlosowana jest podany warunek if( ile <= 0 ) chodzi mi o to że dlaczego nie ma tam tylko znaku równości przecież chyba zmienna ile nie przyjmuje nigdy wartości mniejszej niż zero tylko startuje od wartości zero.

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;
}

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-116300
Jacob99
» 2014-08-27 21:46:53
ile jest argumentem przekazanym do funkcji, więc może mieć wartość mniejszą niż 0; Nie można więc zastosować zapisu ile == 0;
EDIT:/ Tzn. można, ale resultat może być opłakany :)
P-116301
mlOOdy
Temat założony przez niniejszego użytkownika
» 2014-08-28 09:36:22
Dzięki za odpowiedź ale dalej tego nie rozumiem "ile jest argumentem przekazanym do funkcji, więc może mieć wartość mniejszą niż 0" nie wydaje mi się żeby było coś takiego w poprzednich rozdziałach wiem że tak powinno być ale przecież jak w funkcji main ile = 0 to w funkcji CzyBylaWylosowana po przekazaniu zmiennej ile jako argument też powinno chyba przecież równać się 0.
P-116316
Jacob99
» 2014-08-28 09:54:08
Tak, bo przekazujesz tu do funkcji dokładną kopię jakiejś zmiennej i jeśli w funkcji main() utworzysz zmienną ile o wartości 0, to w tej funkcji ta zmienna także ma wartość 0.
Ale chodziło mi o to, że można jako argument podać zmienną, która ma wartość np. -5 i jest mniejsza od 0.
Ten warunek w funkcji pozwala zabezpieczyć się przed złymi danymi.
P-116317
Mateus.
» 2014-08-28 09:56:26
Ale w tym programie raczej nie ma takiej możliwości. Musiałby zrobić to celowo lub przez przypadek.
P-116318
mlOOdy
Temat założony przez niniejszego użytkownika
» 2014-08-28 10:09:21
dobra, pomyliłem się i dałem samo = zamiast == i teraz wychodzi dobrze. Jak ile ma wartość 0 to chyba tak też może być zamiast <= prawda ? 
P-116321
alixir
» 2014-08-28 10:59:11
Funkcje powinny być zabezpieczone przed różnymi ewentualnościami, stąd taki warunek. Jeśli go zmienisz to w pewnych przypadkach (innych niż twój program) funkcja będzie zwracała nieprawidłowe wartości.
P-116329
« 1 »
  Strona 1 z 1