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

Lekcja 21 - losowanie bez powtórzeń

Ostatnio zmodyfikowano 2021-01-01 15:26
Autor Wiadomość
Temat założony przez niniejszego użytkownika
Lekcja 21 - losowanie bez powtórzeń
» 2020-12-31 09:56:13
Witam,

Od paru dni mam jakieś zaćmienie i próbuję zrozumieć działanie funkcji:

C/C++
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;
}

Czy może mi ktoś to wytłumaczyć tak łopatologicznie, krok po kroku.

Z góry dziękuję.

Pozdrawiam

P-177910
» 2020-12-31 20:25:31
podmień sobie w programie, uruchom i wgryźć się
objaśnienia w komentarzach

C/C++
bool czyBylaWylosowana( int iLiczba, int tab[ ], int ile )
{
   
cout << "______________________________________________________________" << endl;
   
/* wyswietlam sobie elementy ktore znajduja sie aktualnie w tablicy
    przy pierwszym wywolaniu funkcji wiadomo, ze tablica jest pusta */
   
cout << "W tablicy znajduja sie nastepujace liczby: ";
   
for( int i = 0; i < ile; ++i )
   
{
       
cout << tab[ i ] << ", ";
   
}
   
cout << endl;
   
   
/* tutaj wyswietlam argumenty przesylane przez funkcje "bool czyBylaWylosowana()"
    za kazdym razem gdy zostanie wywolana */
   
cout << "ile:= " << ile << " <- ilosc elementow w tablicy" << endl;
   
cout << "iLiczba:= " << iLiczba << " <- aktualna liczba do sprawdzenia" << endl;
   
   
cout << "______________________________________________________________" << endl;
   
   
/* ponizszy warunek zostanie spelniony tylko przy
    pierwszym wywolaniu funkcji "bool czyBylaWylosowana()"
    ponieważ tablica nie posiada zadnych elementow, wiec nie ma co sprawdzac
    "iLiczba" bedzie mozna dopisac do tablicy*/
   
if( ile <= 0 )
       
 return false;
   
   
cout << endl;
   
   
/* ponizej petla do..while bedzie uruchomiona przy kazdym kolejnym
    wywolaniu funkcji bool czyBylaWylosowana(), tzn. kiedy zmienna "ile"
    bedzie miala wartosc wieksza od 0 */
   
   
int i = 0; //zmienna "i" to jest po prostu licznik
   
do
   
{
       
/* cout'em wyswietlam kolejne liczby, ktore znajduja sie w tablicy
        i "iLiczba" <- aktualna liczba do sprawdzenia.
        Wiadomo, ze tablice w C/C++ zawsze indeksujemy od 0,
        */
       
cout << "tab[" << i << "]:= " << tab[ i ] << " == iLiczba:= " << iLiczba << endl;
       
       
if( tab[ i ] == iLiczba ) //jezeli liczba znajduje sie juz w tablicy
       
{
           
cout << "znalzlem ja w tablicy jest pod indeksem tab[" << i << "] wiec jej nie dopisujemy" << endl;
           
return true; //znalazlem ja w tablicy, zwracam prawde i wychodze z petli, koncze dzialanie funkcji
       
} else {
           
cout << "nie, to nie ta liczba" << endl;
           
/*jezeli liczby nie znalazlem to wyswietlam powyzszy komunikat
            i zwiekszam licznik, nastepuje */
           
i++; //inkrementacja - zwiekszam licznik dopoki
       
}
    }
while( i < ile ); /* "i' czyli licznik jest mniejszy od ile
    przypominam "ile" - to ilosc elementow w tablicy */
   
    /* jezeli w tablicy nie znalazlem aktualnej "iLiczba" zwracam false
    tzn, ze liczbe bedzie mozna dopisac do tablicy*/
   
return false;
}
P-177912
Temat założony przez niniejszego użytkownika
» 2021-01-01 15:26:52
Rozumiem działanie całego programu tylko nie mogłem zrozumieć na jakiej zasadzie funkcja sprawdza czy liczba była wylosowana czy nie.
Konkretnie chodziło mi o

if( ile <= 0 ) return false;
 

czy pętlę:

C/C++
int i = 0;
do
{
   
if( tab[ i ] == iLiczba )
       
 return true;
   
   
i++;
} while( i < ile );


Dzięki Twojemu szczegółowemu objaśnieniu, coś się w mojej głowie odetkało :) i zrozumiałem cały mechanizm działania tej funckji.
(Trochę wstyd, bo to było bardzo proste. Ale chyba wyszło u mnie zmęczenie materiału i trochę stresu przed końcem roku ;) )

Pozdrawiam i bardzo dziękuję za pomoc!

Wszystkiego Dobrego w Nowym 2021 Roku !!!!






P-177914
« 1 »
  Strona 1 z 1