» »

[C] Random funkcija

[C] Random funkcija

speed machine ::

Učim se še programskega jezika C in že večkrat sem hotu, da bi program ko sem ga zagnal, določu neko random število, in bi potem glede na to število, se rečmo izvršil if stavek. Bi mi lahko dal kdo primer enga čist simpel programčka kot je npr. uporabnik zažene program, in če je takrat random število 1, potem izpiše Random število je 1!, če je pa random število 2, pa izpiše Random število je 2! Sam tolk da vidim kakšna je sintaksa random funkcije, in kok se jo uporabi. Program naj bo pisan za C.
  • spremenilo: snow ()

Vesoljc ::

/* RAND.C: This program seeds the random-number generator
 * with the time, then displays 10 random integers.
 */

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

void main( void )
{
   int i;

   /* Seed the random-number generator with current time so that
    * the numbers will be different every time we run.
    */
   srand( (unsigned)time( NULL ) );

   /* Display 10 numbers. */
   for( i = 0;   i < 10;i++ )
      printf( "  %6d\n", rand() );

   // added by vsc
   // tkole
   int rand_num = rand();
   if(rand_num == 1) 
      printf("rand_num = 1");
   else
       printf("rand_num neznan");
}


rand() funkcija vrne integer, da vrača kolikor tolikor "random" cifre ga je potrebno "seed-at" (inicializirat?) z neko vrednostjo, ponavadi kar z trenutno uro.
Abnormal behavior of abnormal brain makes me normal...

OwcA ::

Nekaj v tem smislu (upam, da je C99, nisem pa 100%):

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

int main()
{
  int r = 0;
  srand((unsigned int)time(NULL));
  r = rand();
  printf("Glede na konstalacije in agitacije sem izbral %d :)", r);
  return 0;
}
Otroška radovednost - gonilo napredka.

Zgodovina sprememb…

  • spremenilo: OwcA ()

Fury ::

Ok, so me prehitel :P

Zgodovina sprememb…

  • spremenilo: Fury ()

speed machine ::

Vesoljc in OwcA hvala za programa. Se mi je že posvetil kak deluje.
OwcA: program deluje v C-ju, edin prvo knjižnico je blo treba popravit, da je zagnal program.

OwcA ::

Ne skrbi me toliko, da se ne bi prevedel, kot da bi bil eno skrupucalo (glede na standarde).
Otroška radovednost - gonilo napredka.

trs ::

Samo se par nasvetov v zvezi z random:

Ne pozabit dat v srand() cim bolj nakljucna stevila. time() je ze OK, vendar ce bos pognal programcek v isti sekundi, bos dobil ven iste random stevilke. Na Unixu je naprimer ze malo boljse ce naredis nekaj takega:

struct timeval tv;

gettimeofday(&tv, NULL);

srand(getpid() + tv.tv_sec + tv.tv_usec);

Se ena varianta je da si shranjujes seed med enim izvajanjem programa in drugim. (zadnjo random cifro, ki ti jo vrne rand(), uporabis kot parameter za srand() v naslednjem poganjaju programa).

Sicer pa ce hoces malo boljsi random, lahko uporabljas srandom() in random() z isto sintakso kot srand() in rand().

Zgodovina sprememb…

  • spremenilo: trs ()

primozsu ::

Kako pa bi moral narediti če bi hotel da mi daje ven "naklučne" številke npr. med 10 in 50 ?

fiction ::

rand() vrne neko stevilo na intervalu med 0 in RAND_MAX. Ce hoces interval [a, b] moras najprej
narediti da bo rezultat med 0 in b - a (to naredis z ostankom pri deljenju z b - a + 1 ostanki
so namrec vedno od 0 do b - a). Potem pa samo se pristejes a (in vse skupaj premaknes v desno).

Torej nekaj v stilu: ((int) rand()) % 41 + 10

Aja drugace je pa to kar je trs rekel zelo vazno!
Ce recimo uporabis samo trenutne sekunde za seed psevdorandom algoritma, lahko nekdo ponovi isto nakljucno sekvenco
za tabo, samo da ve kdaj se je pognal program (oz. lahko tudi proba par sekund okrog tistega casa).
Fora je da lahko tako dobi tocno isto "nakljucno" stevilko kot si jo dobil ti in ker je bila ta potem uporabljena za
generiranje kljuca bo lahko napadalec enostavno zgeneriral enak kljuc.
Ce ne drugega je veliko lazje bruteforcati mozne sekunde kot mozne kljuce.
Pri kriptografski uporabi je treba zelo paziti!

Zgodovina sprememb…

  • spremenil: fiction ()

primozsu ::

Tako sem naredil.

srand((unsigned int)time((time_t *)NULL));
a=(rand()%40)+10;


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Vprašanje v zvezi z rand() funkcijo

Oddelek: Programiranje
494922 (4112) fireice
»

[C++] Generiranje naključnih števil tipa double

Oddelek: Programiranje
81751 (1660) mn
»

Pomoč pri nalogi v C++

Oddelek: Programiranje
51296 (1296) bozjak
»

[C] random do poljubne številke

Oddelek: Programiranje
172087 (1754) napsy
»

srand in program v Cju???

Oddelek: Programiranje
131522 (1392) nuclear

Več podobnih tem