Puchacz1 Opublikowano 5 Kwietnia 2011 Zgłoś Opublikowano 5 Kwietnia 2011 (edytowane) 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 5 Kwietnia 2011 przez Puchacz1 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
ULLISSES Opublikowano 5 Kwietnia 2011 Zgłoś Opublikowano 5 Kwietnia 2011 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];? Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Puchacz1 Opublikowano 5 Kwietnia 2011 Zgłoś Opublikowano 5 Kwietnia 2011 dobra, a jak z tego wyświetlić liczby losowe rzeczywiste. Niby google wie, ale jak to wklepuje to wypluwa tylko kilka liczb rzeczywistych, reszta to 0... Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Thomas Opublikowano 5 Kwietnia 2011 Zgłoś Opublikowano 5 Kwietnia 2011 (edytowane) 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 5 Kwietnia 2011 przez Thomas Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
ULLISSES Opublikowano 5 Kwietnia 2011 Zgłoś Opublikowano 5 Kwietnia 2011 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. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Thomas Opublikowano 5 Kwietnia 2011 Zgłoś Opublikowano 5 Kwietnia 2011 (edytowane) 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 5 Kwietnia 2011 przez Thomas Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Puchacz1 Opublikowano 5 Kwietnia 2011 Zgłoś Opublikowano 5 Kwietnia 2011 dobra, już wiem co było źle. Jednak nadal pozostają problemem te liczby rzeczywiste z przedziału które nie wiem jak uzyskać. mam coś takiego: tablica = rand() * 100.00000 / RAND_MAX; Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Thomas Opublikowano 5 Kwietnia 2011 Zgłoś Opublikowano 5 Kwietnia 2011 (edytowane) 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 5 Kwietnia 2011 przez Thomas Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...