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

Losowanie bez powtórzeń - problem z funkcjami

Ostatnio zmodyfikowano 2012-11-07 19:54
Autor Wiadomość
SimpleJan
Temat założony przez niniejszego użytkownika
Losowanie bez powtórzeń - problem z funkcjami
» 2012-11-07 17:27:04
Witam!

Mam problem z 'zadaniem domowym' z lekcji o losowaniu bez powtórzeń. Poniższy kod (nie dokończony) nie działa tak jak chciałbym żeby działał.
C/C++
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

int losowanie()
{
    return(( rand() % 10 ) + 1 );
}
bool sprawdzanie( int losowa2, int liczby2[] )
{
    int a = 0;
    int ile = 5;
    do
    {
        if( losowa2 == liczby2[ a ] );
       
        return true;
        a++;
    } while( a < ile );
   
    return false;
}
int main()
{
    srand( time( NULL ) );
    int wylosowanych = 0;
    int liczby[ 5 ];
   
    do
    {
        int losowa = losowanie();
        if( sprawdzanie( losowa, liczby ) == true )
             cout << "a";
       
        if( sprawdzanie( losowa, liczby ) == false )
        {
            liczby[ wylosowanych ] = losowa;
            wylosowanych++;
        }
    } while( wylosowanych < 5 );
   
}
Funkcja bool sprawdzanie(int losowa2, int liczby2[]) zawsze zwraca true. Wie ktoś czemu i w czym tkwi problem?
P-68723
jsc
» 2012-11-07 17:31:49
Skąd wiesz, że true? "a" jest wyświetlane niezależnie od okoliczności.
P-68725
SimpleJan
Temat założony przez niniejszego użytkownika
» 2012-11-07 17:36:37
Zły kod dałem w pierwszej wiadomości, zmieniłem już na poprawny.
P-68728
DejaVu
» 2012-11-07 17:49:47
Frazy, które należy wpisać w wyszukiwarkę google:
Jeżeli możesz... to weź sprawdź rozwiązania innych. Tłumaczenie n-tysięczny raz tego samego jest naprawdę męczące.
P-68732
SimpleJan
Temat założony przez niniejszego użytkownika
» 2012-11-07 18:39:46
Nigdzie na forum nie znalazłem odpowiedzi, ale napisawszy kod jeszcze raz, zadziałał. Tak więc przepraszam za zbędny temat.
P-68738
SimpleJan
Temat założony przez niniejszego użytkownika
» 2012-11-07 19:54:32
(jako że nie chce spamować tematami napiszę tutaj)
Eh, mam kolejny dylemat.
Dotyczy on tego kodu
C/C++
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

int losuj()
{
    return(( rand() % 3 ) + 0 );
}

bool JuzJest( int aWylosowanych, int aKoncowe[], int aLosowa )
{
    if( aWylosowanych <= 0 )
         return false;
   
    int t = 0;
    do
    {
        if( aLosowa == aKoncowe[ t ] )
             return true;
       
        t++;
    } while( t < aWylosowanych );
   
}
int main()
{
    srand( time( NULL ) );
    int wylosowanych = 0;
    int wpisane[ 3 ];
    int koncowe[ 2 ];
    int losowa;
   
    cout << "Pierwsza: ";
    cin >> wpisane[ 0 ];
   
    cout << "Druga: ";
    cin >> wpisane[ 1 ];
   
    cout << "Trzecia: ";
    cin >> wpisane[ 2 ];
   
    do
    {
        losowa = losuj();
        if( JuzJest( wylosowanych, koncowe, losowa ) == false )
        {
            cout << losowa << endl;
            koncowe[ wylosowanych ] = wpisane[ losowa ];
            wylosowanych++;
        }
    } while( wylosowanych < 2 );
   
    int w = 0;
    do
    {
        cout << koncowe[ w ] << endl;
        w++;
    } while( w < wylosowanych );
   
   
}

A w szczególności tego fragmentu:
C/C++
do
{
    losowa = losuj();
    if( JuzJest( wylosowanych, koncowe, losowa ) == false )
    {
        cout << losowa << endl;
        koncowe[ wylosowanych ] = wpisane[ losowa ];
        wylosowanych++;
    }
} while( wylosowanych < 2 );


Otóż kiedy wpiszę koncowe[wylosowanych] = wpisane[losowa] "losowa" powtarza się, jednak kiedy zamiast tego wpisałem koncowe[wylosowanych] = losowa "losowa" się nie powtarza.

Jak to możliwe?
P-68746
« 1 »
  Strona 1 z 1