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

21. Losowanie bez powtórzeń

Ostatnio zmodyfikowano 2013-10-01 23:22
Autor Wiadomość
Lanc
Temat założony przez niniejszego użytkownika
21. Losowanie bez powtórzeń
» 2013-10-01 22:45:39
Po przeczytaniu tego rozdziału,miałem pewne wątpliwości co do moich umiejętności na tym etapie,więc pomyślałem,że napisze ten program od zera,niestety wywala czasami zły wynik,a nie widze błędu.Polecenie brzmi "Program ma nam wylosować 5 liczb bez powtórzeń. Liczby wylosowane mają być z przedziału od 1 do 10. " Z góry dziękuję. : 3
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

bool dobrz( int ilosc, int wylosowane[], int a )
{
    int i = 0;
    do
    {
        if( wylosowane[ i ] == a )
       
             return false;
       
        i++;
    } while( i < ilosc );
   
    return true;
}

int losuj()
{
    return( rand() ) % 10 + 1;
}
int main()
{
    srand( time( NULL ) );
   
    int wylosowane[ 5 ];
    int ile = 0;
   
    for( int i = 0; i < 5; i++ )
    {
        int b = losuj();
        cout << "losuje " << i << " " << b << endl;
        if( dobrz( ile, wylosowane, b ) )
             wylosowane[ i ] = b;
       
        ile++;
    }
    int g = 0;
    do
    {
        cout << wylosowane[ g ] << endl;
        g++;
    } while( g < 5 );
   
   
}

[ \c pp ]
P-93009
killjoy
» 2013-10-01 23:16:50
Gdy ci się powtórzy wylosowana liczba, omijasz przypisywanie jakiejkolwiek wartości do tablicy, a że tablica nie jest wyzerowana to otrzymujesz cuda. Musisz dodać warunek do tego if'a (tzn. odpowiednie else)
C/C++
if( dobrz( ile, wylosowane, b ) )
     wylosowane[ i ] = b;


Żeby w razie powtórzenia losował jeszcze raz, a nie przechodził do kolejnej liczby w pętli.
P-93011
Lanc
Temat założony przez niniejszego użytkownika
» 2013-10-01 23:22:45
Dziękuję za szybką odpowiedź. : 3
P-93012
« 1 »
  Strona 1 z 1