Generowanie liczb pseudolosowych z wzynaczonego zakresu.
Ostatnio zmodyfikowano 2017-12-10 20:57
dartpizza88 Temat założony przez niniejszego użytkownika |
Generowanie liczb pseudolosowych z wzynaczonego zakresu. » 2017-12-10 13:52:00 Cześć, mam napisać program z funkcją, która będzie umożliwiała generowanie (bez powtórzeń) i zapisywanie do tablicy dynamicznej liczb pseudolosowych. Udało mi się coś stworzyć ale nie do końca działa to tak jakbym chciał, czasami program wychodzi poza przedział i po wypisaniu liczb pojawia się tam zbyt dużo ich, a konkretnie te co miał wypisać + ta cyfra ile ich miało być. Oto kod programu #include <iostream> #include <cstdlib> #include <ctime>
using namespace std;
int losowanie( int p, int k, int z );
int main() { int p; int k; int z; cout << "podaj poczatek" << endl; cin >> p; cout << "podaj koniec" << endl; cin >> k; cout << "podaj ilosc elementow w tablicy" << endl; cin >> z; cout << "Wylosowane liczby to:"; cout << losowanie( p, k, z ); return 0; }
losowanie( int p, int k, int z ) { srand( time( 0 ) ); int * tab = new int[ z ]; for( int i = 0; i < z; i++ ) { tab[ i ] =( rand() % k ) + p; for( int j = 0; j < z; j++ ) { if( tab[ i ] == tab[ j ] ) { tab[ i ] =( rand() % k ) + p; } } cout << tab[ i ] << " "; } }
|
|
Luq |
» 2017-12-10 15:21:43 Funkcja losowanie deklaruje, że zwraca wartość int, ale w kodzie tego nie robi (brak return). Jeśli ma nic nie zwracać, to powinna być void. tab[ i ] =( rand() % k ) + p; |
To wyrażenie nie losuje liczby z przedziału [p, k]. Twój algorytm sprawdzania czy wylosowana liczba się powtarza też jest błędny. |
|
dartpizza88 Temat założony przez niniejszego użytkownika |
» 2017-12-10 17:46:37 Jeśli chodzi o przedział to zamieniłem na coś takiego tab[ i ] =( rand() %( k - p + 1 ) ); ale nadal nie wiem jak ograniczyć ten przedział od dołu. Co do zwracania teraz ilość cyfr zwracanych się zgadza, zmieniłem typ na void. Przeglądałem różne sposoby jeśli chodzi o brak powtórzeń ale nadal nie do końca wiem jak to zrobić. |
|
mateczek |
» 2017-12-10 20:57:59 #include <iostream> #include <cstdlib> #include <ctime>
using namespace std;
int * losowanie( int p, int k, int z );
int main() { int p; int k; int z; cout << "podaj poczatek" << endl; cin >> p; cout << "podaj koniec" << endl; cin >> k; cout << "podaj ilosc elementow w tablicy" << endl; cin >> z; cout << "Wylosowane liczby to:"; int * tab = losowanie( p, k, z ); for( int i = 0; i < z; i++ ) { cout << tab[ i ] << " "; } delete[] tab; return 0; }
int * losowanie( int p, int k, int z ) { srand( time( 0 ) ); int * tab = new int[ z ]; for( int i = 0; i < z; ) { tab[ i ] =( rand() %( k - p + 1 ) ) + p; bool byla = false; for( int j = 0; j < i; j++ ) { if( tab[ i ] == tab[ j ] ) { byla = true; break; } } if( byla == false ) { i++; } } return tab; } |
|
« 1 » |