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

Losowanie bez powtórzeń

Ostatnio zmodyfikowano 2017-01-16 22:27
Autor Wiadomość
vhair
Temat założony przez niniejszego użytkownika
Losowanie bez powtórzeń
» 2017-01-16 19:47:57
C/C++
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

void losowanie( int a )
{
    srand( time( NULL ) );
    a =( rand() % 10 ) + 1;
}

void selekcja( int a[], int nr )
{
    int n = 1;
    do { if( nr > 0 && a[ nr ] == a[ nr - n ] )
        {
            losowanie( a[ nr ] );
           
        }
        else
             n++;
       
    } while( nr >= n );
   
}

int main()
{
    int a[ 10 ], n = 0;
   
    do { losowanie( a[ n ] );
        selekcja( a, n );
        cout << "\n Liczba nr " << n + 1 << " to " << a[ n ];
        n++;
       
    } while( n != 9 );
   
    n = 0;
    do {
       
        n++;
    } while( n != 9 );
   
    return 0;
}

Zgodnie z rozdziałem 21 próbuję napisać kod na losowanie liczb bez powtórzeń po swojemu. Próbowałem i trochę się zgrzałem. Ostatecznie doszedłem jednak do takiej postaci i stwierdziłem, że jest najlepsza z dotychczasowych prób, przy czym nie działa tak, jak myślałem, że będzie działało. Pomóżcie znaleźć błąd/błędy w kodzie i w myśleniu. Poszukam na własną rękę, ale pomoc się przyda. Jak na razie program zwraca mi tylko liczbę nr. 1 - 0 (0, którego w ogóle tam nie powinno być).
P-156503
karambaHZP
» 2017-01-16 21:32:09
C/C++
void losowanie( int a )
{
    srand( time( NULL ) ); // to przenieś na początek programu do main
    a =( rand() % 10 ) + 1;
}
Ta funkcja nie modyfikuje liczby, którą przekazujesz w argumencie.
Albo przekaż liczbę przez referencję
int & a
 lub nic nie przekazuj,
ale zwróć wylosowaną wartość.
C/C++
int losuj()
{
    return rand() % 10 + 1;
}
P-156508
vhair
Temat założony przez niniejszego użytkownika
» 2017-01-16 22:27:15
Dzięki bardzo.
P-156522
« 1 »
  Strona 1 z 1