Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
rat in a cage Forumaš(ica)


Pridružen/a: 25. 11. 2004. (21:45:48) Postovi: (22C)16
Lokacija: Zg
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16
Spol: 
Lokacija: /sbin/init
|
|
[Vrh] |
|
rat in a cage Forumaš(ica)


Pridružen/a: 25. 11. 2004. (21:45:48) Postovi: (22C)16
Lokacija: Zg
|
|
[Vrh] |
|
DarkOne™24/7® Forumaš(ica)


Pridružen/a: 22. 11. 2004. (05:46:52) Postovi: (A7)16
Lokacija: zg
|
|
[Vrh] |
|
Grga Forumaš(ica)


Pridružen/a: 23. 12. 2004. (23:05:23) Postovi: (280)16
Spol: 
|
Postano: 21:22 sub, 25. 6. 2005 Naslov: |
|
|
AKo znas pascal, to ti je kao randomize timer. Uglavnom, random brojevi se odreduju na neki ne potpuno random nacin, tj postoji kljuc po kojem se generiraju (mislim da je nesto u stilo koliko je, u trenutku kad je upaljen kompjuter, proslo tisucinki od ponoci. Ako nije to onda je nesto u tom stilu :P). Problem je u tome sto bi tada, svaki put kad bi se program pokrenuo, "slucajni brojevi" ispali potpuno isti. Ova naredba jednostavno promijeni kljuc, pa slucajni brojevi ne ispadaju svaki put isti.
rand() ti vraca neki random broj, ali kako tebi trebaju brojevi od 0 do n - 1, onda sa %n uzmes ostatak pri dijeljenju tog broja sa n.
AKo znas pascal, to ti je kao randomize timer. Uglavnom, random brojevi se odreduju na neki ne potpuno random nacin, tj postoji kljuc po kojem se generiraju (mislim da je nesto u stilo koliko je, u trenutku kad je upaljen kompjuter, proslo tisucinki od ponoci. Ako nije to onda je nesto u tom stilu ). Problem je u tome sto bi tada, svaki put kad bi se program pokrenuo, "slucajni brojevi" ispali potpuno isti. Ova naredba jednostavno promijeni kljuc, pa slucajni brojevi ne ispadaju svaki put isti.
rand() ti vraca neki random broj, ali kako tebi trebaju brojevi od 0 do n - 1, onda sa %n uzmes ostatak pri dijeljenju tog broja sa n.
_________________ Bri
|
|
[Vrh] |
|
DarkOne™24/7® Forumaš(ica)


Pridružen/a: 22. 11. 2004. (05:46:52) Postovi: (A7)16
Lokacija: zg
|
Postano: 21:27 sub, 25. 6. 2005 Naslov: |
|
|
ok nisam mozda bio dovoljno jasan, znam da ta naradba daje neke slucajne brojeve...
ali ne razumijem njene dijelove. osim ako uvijek isto ne izgleda i ne da se modificirati, sto sumnjam.
a dalje svaki put kad pokrenes program ona baca drugi broj ali ne i ako
kao gore navedeno je u istoj petlji s randomom onda su svi brojevi isti ali razliciti za svako pojedinacno pokretanje programa...
ko da je za svaki poziv
srand ((unsigned) time (NULL));
u istom programu prvi random broj isti,, ali zasto????
mislim hvala na odgovoru ali zapravo nisi mi nista odgovorio....... :))
da i neznam za tu naredbu u pascalu
ok nisam mozda bio dovoljno jasan, znam da ta naradba daje neke slucajne brojeve...
ali ne razumijem njene dijelove. osim ako uvijek isto ne izgleda i ne da se modificirati, sto sumnjam.
a dalje svaki put kad pokrenes program ona baca drugi broj ali ne i ako
kao gore navedeno je u istoj petlji s randomom onda su svi brojevi isti ali razliciti za svako pojedinacno pokretanje programa...
ko da je za svaki poziv
srand ((unsigned) time (NULL));
u istom programu prvi random broj isti,, ali zasto????
mislim hvala na odgovoru ali zapravo nisi mi nista odgovorio....... :))
da i neznam za tu naredbu u pascalu
_________________ Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.
|
|
[Vrh] |
|
Grga Forumaš(ica)


Pridružen/a: 23. 12. 2004. (23:05:23) Postovi: (280)16
Spol: 
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16
Spol: 
Lokacija: /sbin/init
|
|
[Vrh] |
|
DarkOne™24/7® Forumaš(ica)


Pridružen/a: 22. 11. 2004. (05:46:52) Postovi: (A7)16
Lokacija: zg
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16
Spol: 
Lokacija: /sbin/init
|
Postano: 22:58 sub, 25. 6. 2005 Naslov: |
|
|
"Sjeme" se cuva negdje u memoriji; AFAIK nema varijable pomocu koje to mozes procitati... :?
Vidi ovo:
[code:1][vsego@petko tmp]$ cat > rand.c
main() {
printf("%d\n", rand());
}
[vsego@petko tmp]$ gcc rand.c && ./a.out
1804289383
[vsego@petko tmp]$ gcc rand.c && ./a.out
1804289383
[vsego@petko tmp]$[/code:1]
Dakle, program ispisuje slucajni broj, ali bez postavljanja [i]seeda[/i], pa zato uvijek krene od iste vrijednosti. :-s Dapace, to ti se desi i sa vise brojeva:
[code:1][vsego@petko tmp]$ cat > rand.c
main() {
int i;
for (i = 0; i < 10; i++) printf("%d ", rand());
printf("\n");
}
[vsego@petko tmp]$ gcc rand.c && ./a.out
1804289383 846930886 1681692777 1714636915 1957747793 424238335 719885386 1649760492 596516649 1189641421
[vsego@petko tmp]$ gcc rand.c && ./a.out
1804289383 846930886 1681692777 1714636915 1957747793 424238335 719885386 1649760492 596516649 1189641421
[vsego@petko tmp]$[/code:1]
Dakle, stalno dobijas [b]iste nizove[/b] "slucajnih" brojeva. :shock: Eto, [b]zato[/b] ti treba [i]seed[/i]. 8)
Jasnije? :D
(ovo gore se moze tocno ovako izvoditi na UNIXu/Linuxu, bez editora 8))
"Sjeme" se cuva negdje u memoriji; AFAIK nema varijable pomocu koje to mozes procitati...
Vidi ovo:
Kod: | [vsego@petko tmp]$ cat > rand.c
main() {
printf("%d\n", rand());
}
[vsego@petko tmp]$ gcc rand.c && ./a.out
1804289383
[vsego@petko tmp]$ gcc rand.c && ./a.out
1804289383
[vsego@petko tmp]$ |
Dakle, program ispisuje slucajni broj, ali bez postavljanja seeda, pa zato uvijek krene od iste vrijednosti. Dapace, to ti se desi i sa vise brojeva:
Kod: | [vsego@petko tmp]$ cat > rand.c
main() {
int i;
for (i = 0; i < 10; i++) printf("%d ", rand());
printf("\n");
}
[vsego@petko tmp]$ gcc rand.c && ./a.out
1804289383 846930886 1681692777 1714636915 1957747793 424238335 719885386 1649760492 596516649 1189641421
[vsego@petko tmp]$ gcc rand.c && ./a.out
1804289383 846930886 1681692777 1714636915 1957747793 424238335 719885386 1649760492 596516649 1189641421
[vsego@petko tmp]$ |
Dakle, stalno dobijas iste nizove "slucajnih" brojeva. Eto, zato ti treba seed.
Jasnije?
(ovo gore se moze tocno ovako izvoditi na UNIXu/Linuxu, bez editora )
_________________ U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju. 
|
|
[Vrh] |
|
venovako Forumaš(ica)

Pridružen/a: 07. 11. 2002. (22:46:38) Postovi: (2F9)16
|
Postano: 23:21 sub, 25. 6. 2005 Naslov: |
|
|
[quote="DarkOne™24/7®"][code:1]srand ((int) time (NULL));
i=rand()%n;
[/code:1]
ok srand() radi sto?? daje neki seed ok di to stoji
sto ce koristiti rand ako toga nema????
((int) time(NULL)) ok znaci integer vrijednost od time(NULL) a to je neko vrijeme u redu.
a sad sto radi rand() ?? to je funkcija???
dakle ne bi li trebalo biti rand(i);??[/quote]
Pozdrav!
Malo RTFManja nikad nije stetilo, evo sto kaze [tt]man srand[/tt] na studentu:
[code:1]srand() can be called at any time to reset the random-number generator to a random starting point. The generator is initially seeded with a value of 1.[/code:1]
Dakle, ako ne pozoves srand(), smarat ce se da je seed 1. Ipak, isti seed ne znaci istu seriju pseudorandom brojeva na [b]razlicitim[/b] strojevima!
Evo sto veli GNU libc manual:
[code:1]The random number generator works by remembering a seed value which it uses to compute the next random number and also to compute a new seed.
The sequence of numbers is exactly the same from one run to the next. This is because the initial seed is always the same. If you want a different pseudo-random series each time your program runs, you must specify a different seed each time. For ordinary purposes, basing the seed on the current time works well.
You can obtain repeatable sequences of numbers on a particular machine type by specifying the same initial seed value for the random number generator. There is no standard meaning for a particular seed value; the same seed, used in different C libraries or on different CPU types, will give you different random numbers.[/code:1]
Dakle, zelis li doznati sto se zbilja zbiva, morat ces prouciti dokumentaciju ili source svog C librarya, ako ti je dostupan.
Sorry na copy-pasteanju, mogao sam metnuti linkove, ali nadam se da ti je ovako zgodnije.
DarkOne™24/7® (napisa): | Kod: | srand ((int) time (NULL));
i=rand()%n;
|
ok srand() radi sto?? daje neki seed ok di to stoji
sto ce koristiti rand ako toga nema????
((int) time(NULL)) ok znaci integer vrijednost od time(NULL) a to je neko vrijeme u redu.
a sad sto radi rand() ?? to je funkcija???
dakle ne bi li trebalo biti rand(i);?? |
Pozdrav!
Malo RTFManja nikad nije stetilo, evo sto kaze man srand na studentu:
Kod: | srand() can be called at any time to reset the random-number generator to a random starting point. The generator is initially seeded with a value of 1. |
Dakle, ako ne pozoves srand(), smarat ce se da je seed 1. Ipak, isti seed ne znaci istu seriju pseudorandom brojeva na razlicitim strojevima!
Evo sto veli GNU libc manual:
Kod: | The random number generator works by remembering a seed value which it uses to compute the next random number and also to compute a new seed.
The sequence of numbers is exactly the same from one run to the next. This is because the initial seed is always the same. If you want a different pseudo-random series each time your program runs, you must specify a different seed each time. For ordinary purposes, basing the seed on the current time works well.
You can obtain repeatable sequences of numbers on a particular machine type by specifying the same initial seed value for the random number generator. There is no standard meaning for a particular seed value; the same seed, used in different C libraries or on different CPU types, will give you different random numbers. |
Dakle, zelis li doznati sto se zbilja zbiva, morat ces prouciti dokumentaciju ili source svog C librarya, ako ti je dostupan.
Sorry na copy-pasteanju, mogao sam metnuti linkove, ali nadam se da ti je ovako zgodnije.
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16
Spol: 
Lokacija: /sbin/init
|
Postano: 23:24 sub, 25. 6. 2005 Naslov: |
|
|
[quote="venovako"]Ipak, isti seed ne znaci istu seriju pseudorandom brojeva na [b]razlicitim[/b] strojevima![/quote]
Dapace, ni na istom stroju... :-s Koliko se sjecam svojih davnih eksperimentiranja s tim, dovoljan je reboot masine. :shock: Naravno, ipak je malo prakticnije samo pozvati [tt]srand()[/tt]. ;)
venovako (napisa): | Ipak, isti seed ne znaci istu seriju pseudorandom brojeva na razlicitim strojevima! |
Dapace, ni na istom stroju... Koliko se sjecam svojih davnih eksperimentiranja s tim, dovoljan je reboot masine. Naravno, ipak je malo prakticnije samo pozvati srand().
_________________ U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju. 
|
|
[Vrh] |
|
DarkOne™24/7® Forumaš(ica)


Pridružen/a: 22. 11. 2004. (05:46:52) Postovi: (A7)16
Lokacija: zg
|
Postano: 23:27 sub, 25. 6. 2005 Naslov: |
|
|
poprilicno ali daj probaj ovo
[code:1]#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int random()
{
srand ((unsigned) time (NULL));
return rand()%100+1;
}
int i,j,n;
float k;
int main()
{
printf("ucitaj koliko slucajnih brojeva zelis:");
scanf("%d", &n);
printf("ucitali ste broj %d \n",n);
for(j=1;j<=n;j++){
srand ((int) time (NULL));
i=rand()%100+1;
printf("%d |",i);
}
return 0;
}
[/code:1]
a ova funkcija je ovdje cisto toliko da je recimo upotrijebis u for petlji jer sam i to probo reko mozda je nekakva takva glupost ali svejedno
vraca iste brojeve u programu, cini se da on svaki put da isti seed prema ovome sto si rekao..... tj jako rijetko ga mijenja, u usporedbi s tim koliko se program brzo izvrsava.....
dakle seed treba napraviti jednom i ne vise cini se....
a koliko se pascala sjecam randomize je uvijek bacao drugi broj, mislim potrefi se isti ali rijetko, sad kako je tamo rijeseno nije ni bitno, opcenito za ovo skroz nebitno... ali eto kad se netko referirao na pascal, dakle koliko se sjecam randomize je bio sasvim dovoljna stvar za random brojeve....
poprilicno ali daj probaj ovo
Kod: | #include<stdio.h>
#include<stdlib.h>
#include<time.h>
int random()
{
srand ((unsigned) time (NULL));
return rand()%100+1;
}
int i,j,n;
float k;
int main()
{
printf("ucitaj koliko slucajnih brojeva zelis:");
scanf("%d", &n);
printf("ucitali ste broj %d \n",n);
for(j=1;j<=n;j++){
srand ((int) time (NULL));
i=rand()%100+1;
printf("%d |",i);
}
return 0;
}
|
a ova funkcija je ovdje cisto toliko da je recimo upotrijebis u for petlji jer sam i to probo reko mozda je nekakva takva glupost ali svejedno
vraca iste brojeve u programu, cini se da on svaki put da isti seed prema ovome sto si rekao..... tj jako rijetko ga mijenja, u usporedbi s tim koliko se program brzo izvrsava.....
dakle seed treba napraviti jednom i ne vise cini se....
a koliko se pascala sjecam randomize je uvijek bacao drugi broj, mislim potrefi se isti ali rijetko, sad kako je tamo rijeseno nije ni bitno, opcenito za ovo skroz nebitno... ali eto kad se netko referirao na pascal, dakle koliko se sjecam randomize je bio sasvim dovoljna stvar za random brojeve....
_________________ Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16
Spol: 
Lokacija: /sbin/init
|
Postano: 23:37 sub, 25. 6. 2005 Naslov: |
|
|
Svaki put kad pozoves [tt]srand()[/tt] on resetira niz "slucajnih" brojeva, pa [tt]rand()[/tt] krene iz pocetka. :-s Dakle, ako [tt]srand()[/tt] pozivas vise puta [b]u istoj sekundi[/b] (u tvom programu vrlo vjerojatno, s obzirom na brzinu danasnjih racunala), "slucajni" brojevi ce uvijek biti "prvi u tom istom nizu", dakle - isti. 8)
Svaki put kad pozoves srand() on resetira niz "slucajnih" brojeva, pa rand() krene iz pocetka. Dakle, ako srand() pozivas vise puta u istoj sekundi (u tvom programu vrlo vjerojatno, s obzirom na brzinu danasnjih racunala), "slucajni" brojevi ce uvijek biti "prvi u tom istom nizu", dakle - isti.
_________________ U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju. 
|
|
[Vrh] |
|
DarkOne™24/7® Forumaš(ica)


Pridružen/a: 22. 11. 2004. (05:46:52) Postovi: (A7)16
Lokacija: zg
|
|
[Vrh] |
|
ahri Forumaš(ica)


Pridružen/a: 19. 11. 2003. (23:16:07) Postovi: (193)16
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16
Spol: 
Lokacija: /sbin/init
|
Postano: 3:05 ned, 26. 6. 2005 Naslov: |
|
|
Not sure... :-s Cini se da Pascal ne radi bas sa sekundama. :shock:
[code:1]uses
Crt, Dos;
var
i, cnt, last, curr, h, m, s, hund: Word;
Begin
gettime(h, m, s, hund);
writeln('Time: ', h, ':', m, ':', s,'.', hund);
last := 0;
for i := 1 to 100 do begin
randomize;
curr := random(100) + 1;
if curr <> last then begin
if last > 0 then
writeln(last:4, cnt:4);
last := curr;
cnt := 1;
end else
inc(cnt);
delay(10);
end;
writeln(last:4, cnt:4);
gettime(h, m, s, hund);
writeln('Time: ', h, ':', m, ':', s,'.', hund);
ReadLn;
End.[/code:1]
Ovo ce dati da se svaki broj pojavljuje 5-6 puta za redom, sto "vuce" na to da: [tt]randomize()[/tt] uzima dvadesetinku sekunde ili tako nesto, sto mi zvuci cudno... :?
Inace, vrijeme izvrsavanja koje mi je program vratio je 99 stotinki, dakle nije mi emulacija DOSa spora ili tako nesto. 8)
Koliko se sjecam, Pascal je bio neprecizan i zapravo je znao raditi s osamnaestinkama sekunde ili tako nesto, zbog ogranicenja samog DOSa. :shock: Zaboravih detalje, no to je dovoljno objasnjenje: vjerojatno [tt]randomize()[/tt] uzima stotinke, ali ne moze ocitati dovoljno precizno, nego svakih 1/18 sekundi. 8)
U svakom slucaju, bez [tt]delay(10);[/tt] se ponasa isto kao i gornji primjeri u C-u... :)
Not sure... Cini se da Pascal ne radi bas sa sekundama.
Kod: | uses
Crt, Dos;
var
i, cnt, last, curr, h, m, s, hund: Word;
Begin
gettime(h, m, s, hund);
writeln('Time: ', h, ':', m, ':', s,'.', hund);
last := 0;
for i := 1 to 100 do begin
randomize;
curr := random(100) + 1;
if curr <> last then begin
if last > 0 then
writeln(last:4, cnt:4);
last := curr;
cnt := 1;
end else
inc(cnt);
delay(10);
end;
writeln(last:4, cnt:4);
gettime(h, m, s, hund);
writeln('Time: ', h, ':', m, ':', s,'.', hund);
ReadLn;
End. |
Ovo ce dati da se svaki broj pojavljuje 5-6 puta za redom, sto "vuce" na to da: randomize() uzima dvadesetinku sekunde ili tako nesto, sto mi zvuci cudno...
Inace, vrijeme izvrsavanja koje mi je program vratio je 99 stotinki, dakle nije mi emulacija DOSa spora ili tako nesto.
Koliko se sjecam, Pascal je bio neprecizan i zapravo je znao raditi s osamnaestinkama sekunde ili tako nesto, zbog ogranicenja samog DOSa. Zaboravih detalje, no to je dovoljno objasnjenje: vjerojatno randomize() uzima stotinke, ali ne moze ocitati dovoljno precizno, nego svakih 1/18 sekundi.
U svakom slucaju, bez delay(10); se ponasa isto kao i gornji primjeri u C-u...
_________________ U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju. 
|
|
[Vrh] |
|
ahri Forumaš(ica)


Pridružen/a: 19. 11. 2003. (23:16:07) Postovi: (193)16
|
|
[Vrh] |
|
venovako Forumaš(ica)

Pridružen/a: 07. 11. 2002. (22:46:38) Postovi: (2F9)16
|
Postano: 14:26 ned, 26. 6. 2005 Naslov: |
|
|
[quote="vsego"]Koliko se sjecam svojih davnih eksperimentiranja s tim, dovoljan je reboot masine. :shock:[/quote]
:grebgreb: Znaci, koristi se uptime ili nesto slicno... Vidis, zanimljivo, mislio sam da je dovoljno zapamtit seed da bih generirao niz nanovo.
Moze se znati na cijem je to C libraryu bilo, ako se jos sjecas?
vsego (napisa): | Koliko se sjecam svojih davnih eksperimentiranja s tim, dovoljan je reboot masine.  |
Znaci, koristi se uptime ili nesto slicno... Vidis, zanimljivo, mislio sam da je dovoljno zapamtit seed da bih generirao niz nanovo.
Moze se znati na cijem je to C libraryu bilo, ako se jos sjecas?
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16
Spol: 
Lokacija: /sbin/init
|
|
[Vrh] |
|
|