Losowanie liczb rosnąco.

0

Witam. Napisałem program który losuje liczby z przedziału od -100 do 100. Mój problem polega na tym, że chciałbym napisać program który losuje liczby rosnąco (np: losuje 2 zapisuje jako pierwszy element tablicy losuje -2 pomija losuje 4 zapisuje jako drugi element..... itd). Chciałem to zrobić pętlą do {} while ale nie wiem do czego porównać pierwszy element. Wiem, że mogę użyć sortowań ale chciałbym tego uniknąć o ile się da.

Fragment programu odpowiedzialny za losowanie:

srand(int(time(NULL)));
int tablica[N];

for(int i=0 ; i<N ; i++)
	{
		tablica[i]=(rand()%200)-100;
		cout<<tablica[i]<<"  ";
	}
0

Czemu chciałbyś uniknąć sortowań?
Miałbyś o wiele mniej do roboty, np.wylosuj liczby do tablicy ew.sprawdzając czy się nie powtarzają i użyj sortowania bąbelkowego.

0

pierwszy element wylosuj normalnie, a kolejne jako suma poprzedniego elementu i losowej liczby

0

Albo wylosuj element 0 przed pętlą for, a w niej zrób sprawdzanie, albo w sprawdzaniu niech sprawdzi czy i==0 i wtedy pominie sprawdzanie, ale to wiązałoby się z każdorazowym sprawdzaniem co wykonanie pętli, więc lepiej to uniknąć jak się da.

A co w przypadku, gdy wylosuje na początku 100? Skoro chcesz bez sortowania to musialbys przypilnowac zeby element o indeksie 0 nie byl zbyt wysoki, albo zeby kolejne elementy byly niemalejące, czyli równe lub większe od poprzedniego, co w skrajnymn przypadku da same stówki.

Albo mozna po prostu posortować :)

Wybieraj :)

0

No i moze zamiast rzutowac time starą metodą, zrób to static_cast'em, bo domyslam sie, ze piszesz w C++.

static_cast<int>(time(NULL))

krwq napisał(a):

pierwszy element wylosuj normalnie, a kolejne jako suma poprzedniego elementu i losowej liczby

Wylosuje pierwszy element jako 2, drugi jako 2+(-98), co daje -96. Coś nienajlepsza ta metoda :)

0

Nie sądzę aby się dało zrobić takie losowanie aby zachować rozkład liniowy wylosowanych liczb.

0
kabooom napisał(a):

Albo wylosuj element 0 przed pętlą for, a w niej zrób sprawdzanie, albo w sprawdzaniu niech sprawdzi czy i==0 i wtedy pominie sprawdzanie, ale to wiązałoby się z każdorazowym sprawdzaniem co wykonanie pętli, więc lepiej to uniknąć jak się da.

A co w przypadku, gdy wylosuje na początku 100? Skoro chcesz bez sortowania to musialbys przypilnowac zeby element o indeksie 0 nie byl zbyt wysoki, albo zeby kolejne elementy byly niemalejące, czyli równe lub większe od poprzedniego, co w skrajnymn przypadku da same stówki.

Albo mozna po prostu posortować :)

Wybieraj :)
Nie pomyślałem o tym, że faktycznie może zostać wylosowane od razu 100. Dzięki za odpowiedzi użyje jednak sortowania.

0

To że może zostać od razu wylosowano 100 nie jest problemem.
wszak jeżeli losujemy 10 licz z zakresu 1..100 to
pierwszą liczbę losujemy z zakresu 1..100-10+1, drugą z zakresu pierwsza..100-9+1 itd.
problemem jest to że losowanie jednej liczby musiało by być lognormalne aby cały wylosowany ciąg miał oznaki liniowości.
Upraszczając do bezsensu, jeżeli wylosujesz 10 liczb z zakresu 1..100 a potem je posortujesz to otrzymasz coś w rodzaju:
5, 15, 25, 35, 45, 55, 65, 75, 85, 95
jeżeli będziesz losować po kolei (a nie zadbasz o rozkład lognormalny) to otrzymasz coś w rodzaju:
50, 75, 87, 94, 96, 97, 98, 99, 100

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