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

problem z zadaniem z losowanie bez powtórzeń

Ostatnio zmodyfikowano 2014-09-21 14:54
Autor Wiadomość
leo1377
Temat założony przez niniejszego użytkownika
problem z zadaniem z losowanie bez powtórzeń
» 2014-09-17 19:35:34
Witam, nie mogę doszukac się błędu w moim kodzie , ale czego bym nie wpisał to jako wylosowane liczby wypiuje mi 0 albo 1.
Poniżej załączam kod programu, może ktoś się czegoś dopatrzy.
 
C/C++
#include<iostream>
#include<ctime>
#include<cstdlib>
using namespace std;

void wczytywanie_liczb( int tablica[], int ile )
{
    cout << "podaj " <<( ile + 1 ) << " liczbe : ";
    bool b;
    do
    {
        cin >> tablica[ ile ];
        b =( cin.good() & !cin.fail() );
        if( b == 0 )
             cout << "porazka, sprobuj jeszcze raz" << endl;
       
        cin.clear();
        cin.sync();
    } while( !b );
   
    return;
}

void wypisywani_liczb( int tablica[], int ile )
{
    int a = 0;
    do
    {
        cout <<( a + 1 ) << " liczba to " << tablica[ a ] << endl;
        a++;
    } while( a != ile );
   
    return;
}

bool czy_byla( int tablica[], int ile, int wylosowana )
{
    if( ile == 0 )
         return false;
   
    int a = 0;
    do
    {
        if( tablica[ a ] == wylosowana )
             return true;
        else
             a++;
       
    } while( a != ile );
   
    return false;
}

int main()
{
    cout << "podaj 3 liczby a ja wylosuje 2 z nich" << endl;
    int tablica[ 3 ];
    int ile = 0;
    do
    {
        wczytywanie_liczb( tablica, ile );
        ile++;
    } while( ile != 2 );
   
    srand( time( NULL ) );
    int wylosowane_liczby[ 2 ];
    ile = 0;
    int a;
    do
    {
        a =( rand() % 3 );
        if( !( czy_byla( wylosowane_liczby, ile, a ) ) );
       
        {
            wylosowane_liczby[ ile ] = a;
            ile++;
        }
    } while( ile != 2 );
   
    wypisywani_liczb( wylosowane_liczby, ile );
   
   
    return 0;
}

Pozdrawiam i z góry dzięki za pomoc
P-117119
Jacob99
» 2014-09-17 19:40:32
b =( cin.good() & !cin.fail() );
pojedyńczy ampersand & to operator iloczynu bitowego. Powinno być &&.
P-117120
michal11
» 2014-09-17 19:40:54
Wstaw kod w znaczniki. Dlaczego używasz while zamiast for ?
P-117121
leo1377
Temat założony przez niniejszego użytkownika
» 2014-09-20 11:59:28
jeszcze nie znam tej funkcji
P-117208
damon150196
» 2014-09-21 14:29:20
moim zdaniem można użyć tego, przepraszam za pisownie i jakieś błędy nie kompilowałem tego

C/C++
struct LICZBY // stworzenie struktury
{
    int lic;
    bool czy_uzyta;
}
// stworzenie tablicy struktur
LICZBY liczba[ 10 ] =
{
    { 1, false },
    { 2, false },
    { 3, false },
    { 4, false },
    { 5, false },
    { 6, false },
    { 7, false },
    { 8, false },
    { 9, false },
    { 10, false },
}

...
srand( static_cast < unsigned int >( time( NULL ) ) );

int los;
int wylosowane[ 5 ];

for( int i = 0; i < 5; i++ ) // losowanie 5 liczb
{
    los = rand() % 10 + 1;
   
    while( liczba[ los ].czy_uzyta == true ) // losuj ponownie jesli uzyta
    {
        los = rand() % 10 + 1;
    }
   
    liczba[ los ].czy_uzyta = true; // przypisanie uzycia liczby
   
    wylosowane[ i ] = liczba[ los ].lic; // przypisanie liczby jako wylosowanej
}
P-117281
pekfos
» 2014-09-21 14:54:36
C/C++
b =( cin.good() & !cin.fail() );
pojedyńczy ampersand & to operator iloczynu bitowego. Powinno być &&.
Użyty operator nie robi tu różnicy. Te połączenie w obu przypadkach działa tak samo i tak samo nie ma sensu.

moim zdaniem można użyć tego
To nie ma większego sensu, a kod jest błędny. I nie można użyć - piszesz nie na temat..

ale czego bym nie wpisał to jako wylosowane liczby wypiuje mi 0 albo 1.
Bo wypisujesz wylosowane indeksy, a nie elementy spod tych indeksów.
P-117282
« 1 »
  Strona 1 z 1