rand, ncurses i jeszcze raz czas...

0

Mam kilka pytan (tak tak uzywalem juz wyszukiwarki i google):

  1. czemu na moim Mandrake'u 9.2 po kompilacji takiego czegos: 8*rand()/RAND_MAX +1 (co ma losowac liczby z prz. <1;9>)
    losuje same 1 (czyli zera i dodaje 1), a w windzie oraz na platormie Sun'a dziala ?
  2. Jak zdobyc opis funkcji z curses.h ?? w man'ie sa tylko wypisane.
  3. Jak opoznic cos w linuksie, cos jak delay dla dos'a na milisekundach (funkcja sleep() pracuje na sekundach, a Sleep() jest z winapi), czemu :

void opozn(float czas)
{
clock_t start,teraz;
start=clock();
teraz=clock();
while((teraz-start)/CLOCKS_PER_SEC<czas)teraz=clock();
}

nie dziala prawidlowo ?

0

Ad.1. 8 * rand() / RAND_MAX nie moze dzialac, bo RAND_MAX jest zwykle ustawione na najwieksza mozliwa liczbe calkowita typu long int czyli 2 mld z hakiem. Jakakolwiek liczbe przez to podzielisz, to dostaniesz 0. 8 * rand() bedzie zawse <= RAND_MAX bo sie przekreci. Zeby losowac liczby z zakresu 0-7:

rand() / (RAND_MAX / 8)

albo

rand() % 8

Ad. 3.
Uzyj funkcji nanosleep() lub usleep().
Czekanie w petli zzera niepotrzebnie CPU. Tak samo nie uzywaj do tego clock(), bo to nie zwraca czasu rzeczywistego, a czas procesora jaki dostala Twoja aplikacja. Ten czas biegnie inaczej niz "normalny czas" tj. wolniej.

0

Ten Anonim wyzej to ja. Cookiesy mi zjadlo...
Zeby nie bylo, ze zamieszczam anonimowe posty i nie biore odpowiedzialnosci.

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