C++ Rastgele Sayı oluşturma?

Bu konuyu okuyanlar

Kadima

Müdavim
Katılım
17 Mart 2011
Mesajlar
11,959
Reaksiyon puanı
841
Puanları
113
random komutu ile rastgele sayılar oluşturmak istiyorum. bu sayılar ya 0 yada 1 olacak :)
bir türlü beceremedim :/ ya hepsini 0 oluşturuyor, ya hepsini 1 yada 1-10 arası :)

yardımcı olabilecek? :)
 

algea

Doçent
Katılım
15 Temmuz 2011
Mesajlar
505
Reaksiyon puanı
22
Puanları
18
Aşağıdaki kodu deneyebilirsin.
Kod:
#include <stdio.h>    
#include <stdlib.h>   
#include <time.h>    
#include <conio.h>
int main ()
{
  int r1, r2;
  srand (time(NULL));
  for (int i=0;i<100;i++){
    r1 = rand() % 10 + 1;     //1-10 arası sayı üret
    r2= rand() % 2;            //0-1 arası sayı üret
  printf("%d\t%d\t",r1,r2);
  }
  getch();
  return 0;
}
 

ZeyZey__

Öğrenci
Katılım
26 Kasım 2016
Mesajlar
16
Reaksiyon puanı
1
Puanları
3
Yaş
27
Bu yazdığınız C değil mi ?
İki dilde de ortak mı kullanılıyor ?
 

errno

Doçent
Katılım
17 Temmuz 2016
Mesajlar
694
Reaksiyon puanı
567
Puanları
93
ZeyZey__ :

Evet bu old C-Style. Hem C hemde C++ 'da kullanabilirsin.


Kadima :

C++ 11 içerisinde de rand ve srand kullanabilirsin. Ancak/Eğer eğitim (kendini geliştirme) amaçlı yazdığınbir programsa kullanabilirsin. Ancak iş amaçlı veya herhangi bir işyeri için yazıyorsan tavsiye etmem. Bunun nedeni rand ve srand yerine C++ 11 içerisinde daha güçlü bir kütüphane (library) eklemiş olmasıdır. Bu kütüphane <random> başlık dosyası içerisinde tanımlanmıştır.

Tanımlanmış olan kütüphandeki ilgili komponentleri : engines, engine adapters, distributions

Tanımlanmış random number engine templates :
- random_device
- linear_congruential_engine
- mersenne_twister_engine
- subtract_with_carry_engine

Çoğu güncel kitaplarda artık rand ve srand kullanılmamasını tavsiye etmektedirler. Ve arka planda kullanılan tekniklerin/motoların (engines) değiştğini de belirtmektedirler. Bu yüzden bende bunu aktarma gereği duydum.

(Win32 Console Application, Visual Studio 2013 Pro, Windows 10) Örnek bu sistemde denenmiştir.

Örnek :

#include "stdafx.h"
#include <iostream>
#include <random>
#include <algorithm>
#include <functional>
#include <vector>


using namespace std;

template<typename T>
void fillVector(vector<int>& vec, T rndGen)
{
generate(begin(vec), end(vec), rndGen);
}

int _tmain(int argc, _TCHAR* argv[])
{
random_device randomDevice;
mt19937 engine(randomDevice());
uniform_int_distribution<int> distributor(0, 1); //burada bir aralik verebilirsin. Senin örneğin için 0,1 yaptım.

auto generator = std::bind(distributor, engine);

vector<int> vector(10);
fillVector(vector, generator);

for (auto i : vector) {
cout << i << " ";
}
cout << endl;

int st = 0;
cin >> st;

return 0;
}

Saygılarımla.
 

XX_torba_xx

Öğrenci
Katılım
7 Haziran 2018
Mesajlar
94
Reaksiyon puanı
15
Puanları
8
Yaş
34
Peki 1 ile 11 arasında bir sayı oluşturmak istiyorsak nasıl bir komut kullanacaz?
 

Ben Kenobi

Müdavim
Katılım
6 Kasım 2011
Mesajlar
7,336
Reaksiyon puanı
3,155
Puanları
113
Rastgele sayı oluşturmak ile ilgili kütüphaneler var, amacın misal oyunlar vs için yüksek performanslı sayılar oluşturmaksa farklı, bankalar vs için hiçbir sekilde tahmin edilemeyecek güvenli sayılar oluşturmaksa farklı algoritmalar var
 
Son düzenleme:

algea

Doçent
Katılım
15 Temmuz 2011
Mesajlar
505
Reaksiyon puanı
22
Puanları
18
Eski library’leri bir araştırmak lazım ama hangi derleyicide çalışıyorsunuz açıkça merak ettim. Biraz daha bilgi lütfen. C++ derdi hiç bitmez… Ben C+’yi bitirdim… Artık hiç tat vermiyor…”
 
Üst