Jump to content
Sign in to follow this  
lüxor - High all the time.

[C/C++] Standard#10 ~ Random.

Recommended Posts

Medota de a afisa un numar random in C intre MIN si MAX inclusiv:

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

#define MIN 5
#define MAX 10
  
int main()
{
	srand(time(NULL));
	int i = 0;
	while(i++ < 10) {
		int r = (rand() % (MAX + 1 - MIN)) + MIN;
		printf("%d\n",r);
	}
	return 0;
}

Medota de a afisa un numar random in C++ intre MIN si MAX inclusiv:

#include <iostream>
#include <cstdlib>
#include <ctime>

#define MIN 5
#define MAX 10
  
int main()
{
	srand(time(NULL));
	int i = 0;
	while(i++ < 10) {
		std::cout << (rand() % (MAX + 1 - MIN)) + MIN << '\n';
	}
	return 0;
}

Cum functioneaza :

rand() - Genereaza un numar pseudo-random, adica calculatorul nu e in stare sa creeze un numar random insa pe baza unor calcule matematice va reusi sa dea mereu alt rezultat.

time(NULL) - functia time returneaza timpul actual inapoi. (okay, practic procedeul este mai complicat... iar explicatia nu are rost in momentul actual). NULL poate fi interpretat ca si 0, el este pointerul ce pointeaza la adresa 0 : (void*)0 - vom vorbi despre astea mai tarziu, momentan sa ramanem la ideea ca time(NULL) - returneaza timpul actual.

srand(seed) - Primeste un numar dupa care calculeaza valorile random. prin rand(), seed fiind strict pozitiv.

 

Practic noi facem in felul urmator : setam ca seed timpul actual (mereu va fi un altul, timpul nu sta in loc) iar apoi doar folosim rand() rand() rand() pana nu mai vrem.

Insa rand() ne ofera numere imense, iar noi va trebui sa le controlam... cum facem asta ? ei bine avem o metoda matematica interesanta :

(rand() % (MAX + 1 - MIN)) + MIN // stabilim ca MIN sa fie 5 si MAX 10, ca de exemplu

orice numar primim (sa zicem 9999) daca efecuam operatia acesta se va afla in intervalul nostru, haida sa vedem

(9999 % (10+1-5))+5 =

(9999 % 6) + 5 =

3 + 5 = 8 // care se afla in interval

 

daca rand() dadea alte valori sa vedem ce iesea :

9998 -> 7

10000 -> 9

10001 -> 10

10002 -> 5 (10002 % 6 este 0, iar 0+5 este 5)

 

 

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...