Avatar billede code_freak Nybegynder
27. september 2003 - 18:16 Der er 13 kommentarer og
2 løsninger

random tal mellem 1 til 10

Hvordan laver man et random tal mellem 1 - 10 eller måske mere?
Avatar billede arne_v Ekspert
27. september 2003 - 18:19 #1
standard C/C++;

srand(time(NULL);
int rn = rand() % 10 + 1;
Avatar billede arne_v Ekspert
27. september 2003 - 18:20 #2
srand initierer random generatoren.

rand returnerer et tilfældigt tal 0..RAND_MAX.

%10 + 1 transformerer til 1..10.
Avatar billede arne_v Ekspert
27. september 2003 - 18:21 #3
Der findes meget bedre end standard C/C++ random generator, hvis du
er interesseret.
Avatar billede zyxtem Nybegynder
27. september 2003 - 18:21 #4
#include <ctime>
#include <algorithm>


srand(time(NULL));

int tal=rand()%10;
int tal2=rand()%10;
osv....
Avatar billede zyxtem Nybegynder
27. september 2003 - 18:21 #5
ok arne du er en tand for hurtig :D
Avatar billede code_freak Nybegynder
27. september 2003 - 18:39 #6
hvad er de andre måde, som du nævner arne_v
Avatar billede arne_v Ekspert
27. september 2003 - 18:44 #7
Der er laves masser af pseudo random number generators.

Man kan selv kode en af de anerkendte algoritmer. Jeg har en vis
svaghed for L'Ecuyers algoritmer.

Mange compilere/platforme leverer også bedre end srand/rand.

Check f.eks. om du har rand48/srand48.
Avatar billede code_freak Nybegynder
27. september 2003 - 18:50 #8
jeg compilere på Microsoft VC++ 6.0 og min BSD g++ gpp
Avatar billede arne_v Ekspert
27. september 2003 - 18:56 #9
VC++ har ikke rand48/srand48 men BSD g++ har formentlig.
Avatar billede code_freak Nybegynder
27. september 2003 - 18:58 #10
okay.. hvordan virker den?
Avatar billede arne_v Ekspert
27. september 2003 - 18:59 #11
Samme argumenter som rand/srand.
Avatar billede arne_v Ekspert
27. september 2003 - 19:00 #12
Et eksempel på implementation af en kendt algoritme:

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

static unsigned long int seed[5];

void mysrand(unsigned long int ss[])
{
  seed[0]=ss[0];
  seed[1]=ss[1];
  seed[2]=ss[2];
  seed[3]=ss[3];
  seed[4]=ss[4];
  return;
}

unsigned long int myrand()
{
  unsigned long int res;
  int i;
  res=(107374182*seed[0]+104480*seed[4])%2147483647;
  seed[4]=seed[3];
  seed[3]=seed[2];
  seed[2]=seed[1];
  seed[1]=seed[0];
  seed[0]=res;
  return res;
}

int main(int argc,char *argv[])
{
  unsigned long int ss[5];
  int i;
  ss[0]=1234567;
  ss[1]=123;
  ss[2]=4444;
  ss[3]=987;
  ss[4]=12321;
  mysrand(ss);
  for(i=0;i<10;i++) {
      printf("%ld\n",myrand());
  }
  exit(0);
}
Avatar billede code_freak Nybegynder
27. september 2003 - 19:02 #13
Code_Freak sidder bare og måber, og ikke fatter en brik af texten
Avatar billede arne_v Ekspert
27. september 2003 - 19:06 #14
rand/srand  -  rand48/srand48  -  myrand/mysrand

samme funktionalitet

standard C/C++  -  gængs Unix  -  min implementation af en algoritme af L'Ecuyer
Avatar billede code_freak Nybegynder
27. september 2003 - 19:12 #15
nåååå nu forstår jeg... tror bare jeg bruger de færdiglavede :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester