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

[C++]Losowanie bez powtórzeń

Ostatnio zmodyfikowano 2015-02-08 19:45
Autor Wiadomość
Gravity
Temat założony przez niniejszego użytkownika
[C++]Losowanie bez powtórzeń
» 2015-02-08 18:02:46
Witam,
dlaczego ten kod nie działa ? Pojawia się tylko konsolka i nic więcej ..

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

using namespace std;

bool sprawdz( int tablica[], int ilosc )
{
    for( int i = 0; i < ilosc; i++ )
    {
        for( int j = 0; j < i; j++ )
        {
            if( tablica[ j ] == tablica[ i ] )
            {
                return true;
            }
           
        }
       
    }
    return false;
}

void wylosowane( int tablica[], int ilosc )
{
    for( int i = 0; i < ilosc; i++ )
    {
        cout << "Wylosowana liczba to : " << tablica[ i ] << endl;
    }
}

int main()
{
    srand( time( NULL ) );
    int tablica[ 10 ];
    bool powtorka;
    for( int i = 0; i < 10; )
    {
        tablica[ i ] =(( rand() % 6 ) + 10 );
        powtorka = sprawdz( tablica, 10 );
        if( powtorka == false )
        {
            ++i;
        }
    }
    wylosowane( tablica, 10 );
   
    return 0;
   
}
P-126199
NopeDotAvi
» 2015-02-08 18:29:30
nie powinieneś wkładać nowo wylosowanej do tablicy, a potem sprawdzać, bo to nie ma sensu. najpierw wylosuj, potem sprawdź, a na końcu ewentualnie dodaj.

Poza tym nie powinieneś mieć 2 pętel w funkcji sprawzdającej, tylko 1 i w dodatku przekazać przez parametr liczbę wylosowaną (do tego potrzebujesz kolejnej zmiennej!) i sprawdzać czy któraś z tablicy równa się wylosowanej
P-126201
_CL_
» 2015-02-08 19:45:31
Wydaje mi się, że jeżeli chcesz rozwiązać problem losowania bez powtórzeń ( albo inaczej problem wyciągania karty z talii ) to można się pokusić o użycie listy. Wtedy po prostu gdy wylosujesz, usuwasz węzeł (node).
P-126208
« 1 »
  Strona 1 z 1