Jak zrobić sortowanie w generatorze liczb losowych? Jak powiększyć tablicę do stu elementów?

0

Hej, chciałbym powitać całą społeczność tego forum. Mam problem a mianowicie mam taki oto program (generator liczb losowych), jednak mam problem z sortowaniem tych liczb a mianowicie, chodzi o to aby po wylosowaniu liczby było od najmniejszej do największej. Dodatkowo jak robię tablicę stu elementową to program przestaje działać. Mógłbym liczyć na kogoś pomoc albo rady? Szczególnie chodzi mi o sortowanie. Z góry dziękuje za jakąkolwiek pomoc i pozdrawiam. Program robię w c++, codeblocks.

Kod:

#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

int main()
{
srand( time( NULL ) );
int tablica[ 6 ];
int x;
cout << "Generator liczb losowych" << endl << endl;
for( int i = 0; i < 6; i++ )
{
do
{
x =( rand() % 49 ) + 1;
}
while(( tablica[ 0 ] == x ) ||( tablica[ 1 ] == x ) ||( tablica[ 2 ] == x ) ||( tablica[ 3 ] == x ) ||( tablica[ 4 ] == x ) ||( tablica[ 5 ] == x ) );

    tablica[ i ] = x;

    cout << tablica[ i ] << " ";
}
cin.get();
return 0;
}
0
Bastekhard napisał(a):

Dodatkowo jak robię tablicę stu elementową to program przestaje działać.

Nie przestaje działać, a się zapętla. To jest różnica.

Z tego co widzę po analizie to chcesz aby tablica tablica zawierała unikatowe wartości tak? Tak przynajmniej sugeruje kod. Jednakże po
x = (rand() % 49 ) + 1;
pod zmienną x masz wartości od 1 do 49. Zatem twoja tablica tablica może zawierać tylko 49 unikatowych wartości. Od 50 iteracji w Twojej pętli do while w tablicy tablica są już wszystkie możliwe wartości i program się zapętla. Co by nie było pod x jest to już w tablicy tablica a więc warunek pętli jest true i program się zapętla.

0

A jeśli chcesz przepis jak uzyskać liczby pseudo-losowe (z mocnym akcentem na pseudo) mniejsze niż jakaś zadana liczba n i w dodatku unikatowe i wypełniające cały przedział całkowity [0, n-1] (dla przedziału [1, n] wystarczy dodać jedynkę), to wystarczy skorzystać z prostego algorytmu:
Przypadek dla tablicy 100 elementowej:

  1. Ustaw const int invers = 63; Czyli znajdź jakikolwiek element odwracalny w pierścieniu Z_100. (ogólnie Z_n). Dla Z_100 jest to właśnie liczba 63 ale nie tylko ona)
  2. Ustaw int buffer = invers;
  3. Ustaw i=0;
  4. Zapisz tablica[i] = buffer;
  5. Daj buffer = (buffer + invers) % 100 (ogólnie buffer = (buffer + invers) % n;)
  6. Daj i = i + 1;
  7. Jeśli i < 100 (ogólnie i < n), to przejdź do kroku 4.

Dzięki temu zachowujesz złożoność liniową, nie ma "dziur" w przedziale [0, n-1] i każda "wylosowana" następna liczba nie powtarza się z tymi uzyskanymi w poprzednich krokach.

0

@Bastekhard:
Stwórz sobie 49-elementową tablicę (std::array)
Wypełnij ją liczbami od 1 do 49 (std::iota albo zwykły for)
Przemieszaj liczby (std::shuffle)
Wypisz pierwszych sześć liczb z tablicy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1