Skocz do zawartości
Puchacz1

[c++] liczby losowe

Rekomendowane odpowiedzi

chciałem otrzymać liczby losowe... zawarłem więc #include <ctime> i #include <cstdlib>

 

float *wypelnij(float *tablica, unsigned int rozmiar, int gora, int dol){    srand(time(NULL));    for(unsigned int i=0; i<rozmiar; ++i )    {        tablica[i] = rand()%(gora-dol)+dol;    }    return tablica;}

jednak to nie działa... otrzymuje same 1.

 

pyt. 2

 

jak w argumentach funkcji main przekazać rozmiar tabeli "rozmiar"?. Przecie *argv[] jest tablicą charów

int main (int argc, char *argv[]){   int rozmiar = ?}
Edytowane przez Puchacz1

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dawno nie siedziałem w C++ i nie wiem, jakie podałeś parametry, ale kod jest co najmniej dziwaczny. Ja napisałbym go tak:

for(int i=0; i<rozmiar; i++ ) //niepotrzebne użycie unsigned, zwiększanie 'i' przed wykonaniem pętli, czyli pomijanie indeksu 0{ do  {  tmp = rand();  }   while ((tmp>gora)||(tmp<dol)); tablica[i] = tmp;}return tablica;

Edit:

int rozmiar = argv[0];
?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Coś musiałeś pogrzebać bo u mnie twój program działa i losuje liczby z zakresu <dół;góra), żeby dostać <dół,góra> musiałbyś dać %(gora-dol+1), ale użyłem w Visual Studio include <time.h>; Przez to że używasz % wynik masz liczby tylko całkowitoliczbowe.

 

#include<iostream>#include <time.h>using namespace std;float *wypelnij(float *tablica, unsigned int rozmiar, int gora, int dol){    srand(time(NULL));    for(unsigned int i=0; i<rozmiar; i++ )    {        tablica[i] = rand()%(gora-dol)+dol;    }    return tablica;}int main(){	float* tab= new float[30];	int rozm;	tab= wypelnij(tab,30,111,13);	for(int i=0;i<30;i++)	{		cout << tab[i] << "\n";	}	cin.ignore();return 0;}

ULISSES - i będziesz 7 milionów razy losował randomem liczbę aż trafisz w liczby zakresu <13;14> :P

Edytowane przez Thomas

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Thomas:

W tysiącu prób powinien się wyrobić ;]

Dawno nie używałem C++ i klepnąłem tak z pamięci. Chociaż wydaje mi się, że była "wbudowana" funkcja random, w której można było podawać zakres (przynajmniej górny). Np random(100) wybierało "losowo" liczbę całkowitą z przedziału 0-100.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ja wiem że rand(100) nigdy mi nie działało i musiałem % się bawić - aby wylosować float musisz zastąpić zawartość fora tym

 

float liczba=RAND_MAX;        tablica[i] = (rand()/liczba)*(gora-dol)+dol;

ale nie jestem pewien czy to jest (dol;gora) czy <dol;gora>

Edytowane przez Thomas

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

podałem Ci kod - musisz przypisać RANDOM_MAX do zmiennej zmiennoprzecinkowej (float lub double) bo inaczej jest ona traktowana jak small_int (32 tysiące ileś); i wszelkie dzielenia 100.0 / RAND_MAX to część całościowa z dzielenia 100/ 32456 czyli 0. Od biedy możesz rzutować RANDOM_MAX na float - (float)RANDOM_MAX, ale nie chce mi się tego sprawdzać.

Edytowane przez Thomas

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...