abc Programski jezik C
Generisanje slučajanog broja /RANDOM/ - funkcija random

Sučajan broj koji se generiše u programskom jeziku C je integer u opsegu od 0 do RAND_MAX to je skupa vrijednosti opsega [0, RAND_MAX] odnosno 0 <= n <= RAND_MAX. Naredba za generisanje slučajnog broja se nalazi u biblioteci stdlib.h i mora pozvati naredbom #include <stdlib.h> .
R.br.
Opis
Listing programa
Ispis na ekranu
1.


Bbiblioteka za slučajan broj u C-u je:
#include <stdlib.h>
Funkcijom rand() se izvodi generisanje slučajnog broja.

/* Poziv biblioteke */
#include <stdlib.h>
      
 
2.

Generisati maksimalan broj za dati računar:.
RAND_MAX

#include <stdio.h>
#include <stdlib.h>
int main () {
   /* Maksimalan slucajan broj */
   printf("Maksimalni RND= %d\n", RAND_MAX);
   return(0);
}
  
Maksimalni RND= 2147483647
3.

Generisati slučajan broj. Ako se ništa ne navodi to je broj [0, RAND_MAX]:

rand()
      
#include <stdio.h>
#include <stdlib.h>
int main () {
   /* Ispis random broja od 0 do RAND_MAX */
   printf("%d", rand() );
   return(0);
}
1804289383
4.

Generisati cijeli broj u opsegu [0, 9]:

rand() % 10

N a p o m e n a: Prilikom svako izvođenja naredbe je isti rezultat.

#include <stdio.h>
#include <stdlib.h>
int main () {
   /* Ispis random broja od 0 do 9 */
   printf("%d", rand() % 10);
   return(0);
}
7
5.

Za generisanje novog broja (skupa vrijednosti) pri novom izvođenju programa traba navesti:

time_t t;
srand((unsigned) time(&t)); 
#include <stdio.h>
#include <stdlib.h>
int main () {
   int i;
   time_t t;
   /* Inicijalizacija generatora slucajnog broja */
   srand((unsigned) time(&t));

   /* Ispis random broja od 0 do 9 */
   printf("%d", rand() % 10);
   return(0);
}
5
6.

Generisati 5 sllučajnih cijelih brojeva u intervalu [0, 74]:


time_t t;
srand((unsigned) time(&t)); 

rand() % 75
#include <stdio.h>
#include <stdlib.h>
int main () {
   int i, n;
   time_t t;
   n = 5;
   /* Inicijalizacija generatora slucajnog broja RND */
   srand((unsigned) time(&t));

   /* Ispis 5 random brojeva od 0 do 74 */
   for( i = 0 ; i < n ; i++ ) {
      printf("%d\n", rand() % 75);
   }
   return(0);
}
50
6
38
64
27
7.

Generisati slučajan cijeli broj u zadanom intervalu
minimum_broj <= n <= max_broj:

minimum_broj - najmanja vrijednost intervala;
max_broj - najvaća vrijednost intervala;
broj n se generiše u navedenom intervalu naredbom:
n = rand() % (max_broj + 1 - minimum_broj) + minimum_broj
Generisati 5 cijelih brojeva u intervalu [100, 999]:
za interval 100 <= n <= 999 (trocifren broj) 
n = rand() % (max_broj + 1 - minimum_broj) + minimum_broj;
n = rand() % (999 + 1 - 100) + 100;
n = rand() % 900 + 100
#include <stdio.h>
#include <stdlib.h>
int main () {
   int i, n;
   time_t t;
   n = 5;
   /* Inicijalizacija generatora slucajnog broja RND */
   srand((unsigned) time(&t));

   /* Ispis 5 random trocifrenih brojeva (100<= n <= 999) */
   for( i = 0 ; i < n ; i++ ) {
      printf("%d\n", rand() % 900 + 100);
   }
   return(0);
}
    
525
348
243
916
818
8.

Realan broj od 0 do 1 se generiše sa:

float x=(float)rand()/(float)RAND_MAX
#include <stdio.h>
#include <stdlib.h>
int main () {
   int i, n;
   time_t t;
   n = 5;
   /* Inicijalizacija generatora slucajnog broja RND */
   srand((unsigned) time(&t));
 
   /* Ispis 5 random brojeva (0<= n <= 1) */
   for( i = 0 ; i < n ; i++ ) {
      printf("%lf\n", (float)rand()/(float)RAND_MAX);
   }
   return(0);
}
0.125850
0.659142
0.939049
0.041624
0.758365
9.

Realan broj od 0 do a (0 <= x <= a) se generiše sa:

float x=(float)rand()/((float)RAND_MAX/a)	
ili 
float x = ((float)rand()/(float)(RAND_MAX)) * a;
N a p o m e n a: a mora biti deklarisano kao float
#include <stdio.h>
#include <stdlib.h>
int main () {
   int i, n;
   time_t t;
   n = 5;
   float a = 8;
   
   /* Inicijalizacija generatora slucajnog broja RND */
   srand((unsigned) time(&t));
   printf("Od 0 do %.1f\n", a);
   
   /* Ispis 5 random brojeva (0<= n <= 1) */
   for( i = 0 ; i < n ; i++ ) {
      printf("%lf\n", (a * (float)rand()/(float)RAND_MAX));
   }
   return(0);
}
Od 0 do 8.0
4.041116
7.533490
7.668555
4.883740
4.005080
10.

Realan broj od min_broj do max_broj se generiše sa:

max2 = (max_broj - min_broj)
sl_broj = max2 * ((float)rand()/(float)RAND_MAX) + min_broj
N a p o m e n a:
max2 mora biti deklarisano kao float
max2 - opseg vrijednosti generisanih brojava 
sl_broj - slučajan broj
    
#include <stdio.h>
#include <stdlib.h>
int main () {
   int i, n;
   time_t t;
   n = 5;
   float min_broj = 8;   // minimalna vrijednost RND
   float max_broj = 25;  // maksimalna vrijednost RND
   float max2;           // opseg vrijednosti generisanih brojava
   float sl_broj;        // slucajan broj
   /* Inicijalizacija generatora slucajnog broja RND */
   srand((unsigned) time(&t));
   
   printf("RND od %.1f do %.1f\n", min_broj, max_broj);
    
   /* Ispis 5 random brojeva (0<= n <= 1) */
   for( i = 0 ; i < n ; i++ ) {
      max2 = (max_broj - min_broj);  // opseg vrijednosti generisanih brojava 
      sl_broj = max2 * ((float)rand()/(float)RAND_MAX) + min_broj;  	  
      printf("i = %d  Generisana vrijednost %lf\n",i, sl_broj);
   }
   return(0);
}
RND od 8.0 do 25.0
i = 0  Generisana vrijednost 19.747446
i = 1  Generisana vrijednost 17.117662
i = 2  Generisana vrijednost 23.744804
i = 3  Generisana vrijednost 24.867792
i = 4  Generisana vrijednost 13.087321

Primjer: 1. Generisati dvocifren broj i ispisati na ekran

Opis rješenja:

n = rand() % (max_broj + 1 - minimum_broj) + minimum_broj
// minimum_broj - najmanja vrijednost,
// max_broj - najvaća vrijednost)
// generiše n u intervalu minimum_broj <= n <= max_broj

za interval 10 <= n <= 99 (dvocifren broj) 
(max_broj + 1 - minimum_broj) + minimum_broj
(99 + 1 - 10) + 10
n = rand() % 90 + 10

Listing programa:

// 06421112
#include <stdio.h>
#include <stdlib.h>
int main () {
   int i;
   time_t t;
   /* Inicijalizacija generatora slucajnog broja RND */
   srand((unsigned) time(&t));
 
   /* Ispis random dvocifren broj (10<= n <= 99) */
   printf("Slučajan dvocifren broj = %d\n", rand() % 90 + 10);
   return(0);
}
Ispis na ekranu:
Slučajan dvocifren broj = 76
Daljnji rad: Generisati trocifren slučajan broj.

 

Primjer: 2. Generisati cjelobrojne brojeve od 1 do 9. Ispisati koliko puta se pojavljuje vrijednost maksimalnog broja 9 za 100 generisanih brojeva.

Opis rješenja: Minimum_broj - najmanja vrijednost intervala = 1, a max_broj - najvaća vrijednost = 9. Formula za slučaja broj n u intervalu 1 <= n <= 9:

n = rand() % (max_broj + 1 - minimum_broj) + minimum_broj
n = rand() % (9 + 1 - 1) + 1
n = rand() % 9 + 1

Listing programa:

#include <stdio.h>
#include <stdlib.h>
int main () {
   int i, max_broj, n;
   time_t t;
   /* Inicijalizacija generatora slucajnog broja RND */
   srand((unsigned) time(&t));
 
   max_broj = 9;                      // gornja granica
   for ( i = 1; i <= 100; i++) {      // ponavljanje za i=1 do i=5 - pocetak petlje
        n = rand() % 9 + 1;           // od 1 do 9
         if (n == max_broj)           // našao max_broj vrijednost?
            printf("i = %d  Generisana max broj   %d\n", i, n);   // ispis vrijednosti i  \n ima za posljedicu prelazak u novi red
   }
   return(0);
}

Ispis na ekranu:
i = 3  Generisana max broj   9
i = 6  Generisana max broj   9
i = 24  Generisana max broj   9
i = 68  Generisana max broj   9
i = 70  Generisana max broj   9
i = 87  Generisana max broj   9
i = 92  Generisana max broj   9
i = 99  Generisana max broj   9
i = 100  Generisana max broj   9

 

Primjer: 3. Generisati realne brojeve od 8 do 25 pet puta.

Opis rješenja: Minimum_broj - najmanja vrijednost intervala = 8, a max_broj - najvaća vrijednost = 25. Formula za slučaja broj n u intervalu 8 <= n <= 25:

max2 = (max_broj - min_broj); // opseg vrijednosti generisanih brojava  
sl_broj = max2 * ((float)rand()/(float)RAND_MAX) + min_broj;

Listing programa:

#include <stdio.h>
#include <stdlib.h>
int main () {
 
   int i, n;
   time_t t;
   n = 5;
   float min_broj = 8;    // minimalna vrijednost RND
   float max_broj = 25;   // maksimalna vrijednost RND
   float max2;           // opseg vrijednosti generisanih brojava
   float sl_broj;        // slucajan broj
   /* Inicijalizacija generatora slucajnog broja RND */
   srand((unsigned) time(&t));
   
   printf("RND od %.1f do %.1f\n", min_broj, max_broj);
    
   /* Ispis 5 random brojeva (0<= n <= 1) */
   for( i = 0 ; i < n ; i++ ) {
      max2 = (max_broj - min_broj); // opseg vrijednosti generisanih brojava  
      sl_broj = max2 * ((float)rand()/(float)RAND_MAX) + min_broj;
      printf("i = %d   Slucajan broj = %lf\n", i, sl_broj);
   }
   return(0);
}

Ispis na ekranu:
RND od 8.0 do 25.0
i = 0   Slucajan broj = 19.919920
i = 1   Slucajan broj = 15.155198
i = 2   Slucajan broj = 8.012959
i = 3   Slucajan broj = 14.605600
i = 4   Slucajan broj = 12.912069

 

Primjer: 4. Generisati realne brojeve od 10 do 100 pet puta.

max2 = (max_broj - min_broj); // opseg vrijednosti generisanih brojava  
sl_broj = max2 * ((float)rand()/(float)RAND_MAX) + min_broj;
#include <stdio.h>
#include <stdlib.h>
int main () {
   int i, n;
   time_t t;
   n = 5;
   float min_broj = 10;   // minimalna vrijednost RND
   float max_broj = 100;  // maksimalna vrijednost RND
   float max2;            // opseg vrijednosti generisanih brojava
   float sl_broj;         // slucajan broj
   /* Inicijalizacija generatora slucajnog broja RND */
   srand((unsigned) time(&t));
   
   printf("RND od %.1f do %.1f\n", min_broj, max_broj);
    
   /* Ispis 5 random brojeva (0<= n <= 1) */
   for( i = 0 ; i < n ; i++ ) {
      max2 = (max_broj - min_broj);  // opseg vrijednosti generisanih brojava 
      sl_broj = max2 * ((float)rand()/(float)RAND_MAX) + min_broj;
      printf("i = %d  Generisana vrijednost %lf\n",i, sl_broj);
   }
   return(0);
}

Ispis na ekranu:
RND od 10.0 do 100.0
i = 0  Generisana vrijednost 98.704796
i = 1  Generisana vrijednost 51.379852
i = 2  Generisana vrijednost 20.929836
i = 3  Generisana vrijednost 30.610159
i = 4  Generisana vrijednost 81.214699

 

Primjer: 5. Generisati realne slučajne brojeve od 8 do 25 i naći najpribližniju vrijednost navedenom max tj. 25 u 555555 pokušaja.

max2 = (max_broj - min_broj); // opseg vrijednosti generisanih brojava  
sl_broj = max2 * ((float)rand()/(float)RAND_MAX) + min_broj;
#include <stdio.h>
#include <stdlib.h>
int main () {
   int i, n;
   time_t t;
   n = 555555;
   float min_broj = 8;         // minimalna vrijednost RND
   float max_broj = 25;        // maksimalna vrijednost RND
   float max2, sl_broj, tmax;  // uvacanje RND, slucajan broj 
   /* Inicijalizacija generatora slucajnog broja RND */
   srand((unsigned) time(&t));
    
   printf("RND od %.1f do %.1f\n", min_broj, max_broj);
     
   /* Ispis 5 random brojeva (0<= n <= 1) */
   tmax = 0.0;
   for( i = 0 ; i < n ; i++ ) {
      max2 = (max_broj - min_broj);  // opseg vrijednosti generisanih brojava 
      sl_broj = max2 * ((float)rand()/(float)RAND_MAX) + min_broj;
      if (tmax < sl_broj) {
          tmax = sl_broj;
          printf("i = %d Slucajan broj = %lf\n", i, sl_broj);
     }
   }    
   return(0);
}

Ispis na ekranu:
RND od 8.0 do 25.0
i = 0 Slucajan broj = 24.295332
i = 4 Slucajan broj = 24.336065
i = 15 Slucajan broj = 24.860085
i = 355 Slucajan broj = 24.911072
i = 714 Slucajan broj = 24.943844
i = 1073 Slucajan broj = 24.992603
i = 3195 Slucajan broj = 24.992624
i = 5026 Slucajan broj = 24.998327
i = 15232 Slucajan broj = 24.999699
i = 29753 Slucajan broj = 24.999931
i = 252044 Slucajan broj = 24.999979

 

Primjer: 6. Generisati realne brojeve od 10 do 100. Ispisati broj koji je najbliži vrijednosti 100.

max2 = (max_broj - min_broj); // opseg vrijednosti generisanih brojava  
sl_broj = max2 * ((float)rand()/(float)RAND_MAX) + min_broj;
#include <stdio.h>
#include <stdlib.h>
int main () {
   int i, n;
   time_t t;
   n = 555555;
   float min_broj = 10;        // minimalna vrijednost RND
   float max_broj = 100;       // maksimalna vrijednost RND
   float max2, sl_broj, tmax;  // uvacanje RND, slucajan broj 
   /* Inicijalizacija generatora slucajnog broja RND */
   srand((unsigned) time(&t));
     
   printf("RND od %.1f do %.1f\n", min_broj, max_broj);
      
   /* Ispis 5 random brojeva (0<= n <= 1) */
   tmax = 0.0;
   for( i = 0 ; i < n ; i++ ) {
      max2 = (max_broj - min_broj);  // opseg vrijednosti generisanih brojava 
      sl_broj = max2 * ((float)rand()/(float)RAND_MAX) + min_broj;
      if (tmax < sl_broj) {
          tmax = sl_broj;
          printf("i = %d Slucajan broj = %lf\n", i, sl_broj);
     }
   }    
   return(0);
}

Ispis na ekranu:
RND od 10.0 do 100.0
i = 0 Slucajan broj = 67.790833
i = 2 Slucajan broj = 94.106117
i = 20 Slucajan broj = 97.253372
i = 22 Slucajan broj = 99.591690
i = 321 Slucajan broj = 99.941551
i = 471 Slucajan broj = 99.974579
i = 3171 Slucajan broj = 99.991508
i = 66264 Slucajan broj = 99.996140
i = 69015 Slucajan broj = 99.999359
i = 218578 Slucajan broj = 99.999840
i = 403301 Slucajan broj = 99.999847

Index