algoritmus pre nahodnu generaciu cisel ->

Programovacie jazyky, rady, poradňa...
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

algoritmus pre nahodnu generaciu cisel ->

Príspevok od používateľa BX »

Zdravim, zo zaujimavosti by som rad vedel, ako vyzera algoritmus pre nahodnu generaciu cisel.
Algoritmus, teda nie pomocou prikazu pre nahodnu generaciu!
Da sa to vobec napisat pomocou obycajnych prikazov? - teda myslim ze by sa malo dat :oops: Ak viete, prosim napiste to, moze byt v pascale, alebo v C :)
Dakujem...
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

nejde tam ani tak o príkazy ake použiješ (a teda to ani nezáleží od jazyka) ako o funkciu. Využívajú nederministické mat. funkcie, ktorých výstupné hodnoty sú značne rozdielne pre vstupy s malými rozdielmi. Ako vstup sa väčšinou používa systémový čas (aby neboli dva rôzne vstupy rovnaké). Viac sa o tom dočítaš napr. tu: http://fyztyd.fjfi.cvut.cz/2001/web/sbornik/pdf/nah.pdf
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Príspevok od používateľa BX »

No tak tomu clanku som velmi neporozumel ak mam pravdu povedat :oops:
Ale kedze sa k tomu pouziva systemovy cas, dalo by sa za taky "pseudoprogram na generaciu nahodneho cisla od nula do 99" povazovat aj takyto jednoduchy program nie? :)

Kód: Vybrať všetko

uses dos,crt;
var hod,min,sek,s100:word; { TIME }
    a:integer;


begin
     clrscr;

     gettime(hod,min,sek,s100);

     writeln(s100);

     readkey;

end.
-> Este si zopar krat to pdf-ko precitam a mozno ho pochopim uplne :-D
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

ani nie, lebo tým získaš postupnosť čísel. Ak tvoju funkciu zavolám 100 krát hneď za sebou tak získam postupnosť 1..100 a to teda náhodné nie je :) Preto ten čas potrebuješ prehnať nejakou funkciou, čo ti napr. pre 1 vráti 10, pre 2 vráti 8, pre 3 vráti 45... A to ti práve zabezpeční nejaká nederministická matematická funkcia. Myslím že v tom pdf sú aj nejaké napísané
sundevil
VIP
VIP
Používateľov profilový obrázok
Príspevky: 4169
Registrovaný: 18 mar 2005, 12:03
Bydlisko: BA

Príspevok od používateľa sundevil »

ak to chces pouzit cisto v pascale, tak mas tam funkciu random. kedze je volana s tym istym parametrom dostanes vzdy rovnake vysledky. pre lepsi pocit preto musis pouzit randomize.
avsak, takyto generator musi splnat niekolko podmienok, aby sa dal povazovat za dobry (zial ten pascalovsky sa da za dobry povazovat len s privretiom oboch oci)
aby bol generator dobry musi splnat asi 5 podmienok, zial skola bola uz davno a na nete sa mi nechce hladat
ak potrebujes len vygenerovat nejake cisla (a pascal si si zobral ako jazyk v ktorom vies programovat) tak skor odporucam pozriet sa po fyzikalnom generatore, jeden taky najdes na http://random.org/
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Príspevok od používateľa BX »

No ale treba mysliet na to ze taky druhak na strednej este nikdy nepocul slovo "nederministická" :lol:
Ja som myslel, ze to bude trochu inak. Tak ja na to raz pridem :) Aj tak vdaka... ja si to nastudujem, lebo to chcem silno vediet...
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Jednoduché funkcie na generovanie náhodného čísla, vyzerajú nejako takto:

Kód: Vybrať všetko

function random()
{
  seed = seed * A + B;
  return seed % 65536;
}
(používa sa to hlavne preto, lebo to je rýchle).
Samozrejme je dôležité zvoliť vhodné konštanty A a B (nechce sa mi hľadať, aké sa používajú napr. v Pascale).

Ako písal audiotrack, používajú sa rôzne algoritmy, ktoré sa vyberajú podľa toho, ako kvalitné tie náhodné čísla majú byť (zvyčajne platí, čím kvalitnejší generátor, tým je pomalší).
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Príspevok od používateľa BX »

chrono, ale A a B su konstanty a teda "nahodne" cislo sa meni az s konstantami nie? Ja som chcel aby sa vygenerovalo nahodne cislo pri kazdom spusteni programu, bez zasahu do zdrojaku :)
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

BX napísal:chrono, ale A a B su konstanty a teda "nahodne" cislo sa meni az s konstantami nie? Ja som chcel aby sa vygenerovalo nahodne cislo pri kazdom spusteni programu, bez zasahu do zdrojaku :)
chronova premenná seed a môj "čas ako vstup do funkcie" je prakticky to isté
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Tak ako píše audiotrack, musíš tú premennú seed naplniť nejakou pseudonáhodnou hodnotou (zvykne sa používať čas).
Silent
Star
Star
Príspevky: 555
Registrovaný: 28 apr 2008, 14:03

Príspevok od používateľa Silent »

tady mas mali priklad v C++

Kód: Vybrať všetko

#include <iostream>
 #include <stdio.h>
#include <stdlib.h>
#include <time.h>
using namespace std;

int main()
{

char a;

  int losovani, hrac_jedna,hrac_dva;


  srand ( time(NULL) );



  do{

      losovani = rand() % 51;
    cout<<"Vyberte si cislo od 1 do 50: "<<endl;
    cout<<"Hrac jedna zadejte cislo:";
    cin>>hrac_jedna;
    cout<<"Hrac dva zadejte cislo:";
    cin>>hrac_dva;


    cout<<"cislo bylo:"<<losovani<<endl;
    cout<<"Zvovu? a/n :";
    cin>>a;
  }     while(a=='a');



  return 0;
}
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Príspevok od používateľa BX »

Silen tak ten tvoj prispevok som nepochopil :?
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

BX napísal:Silen tak ten tvoj prispevok som nepochopil :?
tým sa netráp, on zas nepochopil tému :)
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Príspevok od používateľa BX »

Ved vsimam :lol:
Silent
Star
Star
Príspevky: 555
Registrovaný: 28 apr 2008, 14:03

Príspevok od používateľa Silent »

Cetl jsem v rychlosti ze chce neco na nahodnou generaci cisel.
Napísať odpoveď