Hirdetés
- Mobil flották
- Okosóra és okoskiegészítő topik
- Milyen okostelefont vegyek?
- Samsung Galaxy S21 Ultra - vákuumcsomagolás
- Azonnali mobilos kérdések órája
- Samsung Galaxy A56 - megbízható középszerűség
- Samsung Galaxy S21 FE 5G - utóirat
- Motorola Edge 70 - többért kevesebbet
- Örömhír: nem spórol Európán a OnePlus
- Samsung Galaxy S25 Ultra - titán keret, acélos teljesítmény
Új hozzászólás Aktív témák
-
válasz
Dave-11
#1830
üzenetére
Az srand() inicializalja a randomgeneratort, ezt csak egyszer kell megcsinalni, praktikusan a program elejen. Ez altalaban nem tul bonyolult kod es elmondhato rola, hogy ha ugyanazzal a szammal inicializalod, akkor utana pontosan ugyanazokat a "veletlen" szamokat fogod kapni, ezert nepszeru megoldas, hogy a jelenlegi idovel inicializaljak, valahogy igy: srand( time() );
A rand() meg ezek utan egyszeruen visszaad egy veletlenszamot (ami a 0 - RAND_MAX intervallumba esik).
Ha intervallumot akarsz (mondjuk X es X+Y koze), akkor az egyszeru, ertheto es naiv megoldas az, hogy a rand altal visszaadott szamnak az Y-nal valo osztasanak a maradekat veszed es hozzaadod X-et. Konkretan a te peldadban (1-50, ahol X = 1 es Y = 49):
int random_number = rand() % 49 + 1;Es akkor most egy kicsit kenytelen vagyok arrol szolni, hogy valojaban miert istentelen nagy szivas ez az egesz veletlenszam-temakor: a fenti peldaban, ha Y nem ketto valamelyik egesz szamu hatvanya (1, 2, 4, 8, 16 stb), akkor a veletlen szamaid eloszlasat megnezve fel fog tunni, hogy nem azonos esellyel kapod a szamokat, hanem lesz egy hatar es az alattiak valamivel nagyobb valoszinuseggel fordulnak elo. A miert megmagyarazasat az olvasora bizom

A masik problema meg a kiszamithatosag: a Firefoxban (illetve akkor meg Mozillanak hivtak) volt egy olyan biztonsagi hiba, hogy a fenti modon inicializalta a randomgeneratort amikor titkositashoz generalt veletlenszamokat. Csakhogy - a fentiek miatt - a tamadonak eleg volt azt kitalalnia, hogy milyen idot mutatott a gep oraja, amikor legeneralta a titkositashoz szukseges szamokat, marpedig ha egy titkositott kapcsolatot 12:54-kor kezd a bongeszo, akkor jo esellyel a gep oraja is 12:54-et fog mutatni, vagy akornyeken valamit - es mivel a time() felbontasa csak masodperces, ezert nem is kellett olyan tul sok szamot vegigprobalni ahhoz, hogy fel lehessen torni a titkositast.
Szoval a veletlenszamgeneralas nehez problema, ahol komolyan erre van szukseg, ott valami plusz hardverrel generaljak, ami valami kellokeppen veletlenszeru fizikai folyamaton alapszik.
szerk: Latom, en irtam a legtobb ideig, de legalabb latszatja is van

-
kispx
addikt
válasz
Dave-11
#1830
üzenetére
srand(); inicializálja a randomszámgenerátort. Mindig a legelső szám generálása előtt kell ezt megtenni.
"srand(12);" Konstanssal nem illik inicializálni, mert minden egyes futás során ugyanazokat a számokat fogja előállítani. Helyette olyan módszert kell választani, ami futásról futásra változik, pl idő:
srand ( time(NULL) );rand(), egy véletlen számot fog visszaadni 0 és RAND_MAX között.
Ha kisebb értéktartományon szeretnénk véletlen számot generálni akkor, akkor egy X számmal kell a maradékát képezni, pl
rand() % X ez [0; X-1] tartományban képez egy véletlen számot
Szerk.: látom túl sokáig írtam a hszt

-
Karma
félisten
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Xiaomi Redmi 14C 128GB, Kártyafüggetlen, 1 Év Garanciával
- ÁRGARANCIA! Épített KomPhone Ultra 9 285K 32/64GB RAM RX 9070 XT 16GB GAMER PC termékbeszámítással
- Telefon felvásárlás!! Apple Watch SE/Apple Watch SE 2 (2022)
- SzoftverPremium.hu
- 3DKRAFT.HU - 3D NYOMTATÁS - AZONNALI ÁRAJÁNLAT - GYORS KIVITELEZÉS - 500+ POZITÍV ÉRTÉKELÉS
Állásajánlatok
Cég: BroadBit Hungary Kft.
Város: Budakeszi
Cég: ATW Internet Kft.
Város: Budapest




