#include <iostream>
#include <cstdlib> // rand fonsiyonu kütüphanesi için
#include <ctime> // time fonksiyonu kütüphanesi için
using namespace std;
// Örnek 4 Mülakat sorusu :
//Bir fonskiyon içinde min ve max dahil rastgele tam sayı üretsin
//Fonskiyonumuz :
int mulakat_Sayi(int max, int min)
{
int mulakat = min + (rand() % (max - min +1));
return mulakat;
//Not : Detaylı anlatım alttadır.
}
int main()
{
// rand() //Tek başına kullanıldığında rastgele ürettiği sayıyı değitirmez ilk ürettiği sayıyı üretmeye devam eder.
// srand() //başlangıç noktasını belirler
// time(0) : saniye cinsinden rastgele sayı üretir
// donanım için test verisi üretme ve dosyaya yadırma amaçlı ve oyun geliştirmede kullanılabilir
srand(time(0)); // Rastgele sayısını time ile üretiyoruz her çalıştığında farklı sayı üretir
cout << "***** rastgele *****" << endl;
int rastgele_Sayi = rand(); //Tekbaşına herzaman aynı sayı Çıktı: 41 herzaman aynı olur değiştiremez.
cout << "Rastgele uretilen sayi : " << rastgele_Sayi << endl;
// 1 ile 10 arasında ratgele sayı üretme ör:
cout << "*****1 ile 10 arasinda rastgele*****" << endl<<endl;
int rastgele_Sayi2 = (rand() % 10) + 1; // üretilen sayının 10'a bölümünden kalan sayı +1 arttır
cout << "1 ile 10 arasinda rastgele sayi : " <<rastgele_Sayi2<< endl;
//1 ile 100 arasında rastgele sayı üretme ör:
cout << "*****1 ile 100 arasinda rastgele*****" << endl<<endl;
int rastgele_Sayi3 = (rand() % 100) + 1;
cout << "1 ile 100 arasinda uretilen rastgele sayi : " << rastgele_Sayi3 << endl;
// Örnek 4 Mulakat sorusu:
cout << "*****Ornek 4 Mulakat sorusu*****" << endl<<endl;
int min, max;
cout << "Minimum degeri giriniz : ";
cin >> min;
cout<<"Maximum degerini giriniz : ";
cin >> max;
int sayi = mulakat_Sayi(min, max);
cout << min << " ile " << max << " arasindaki rastgele sayi " << sayi << endl;
cout << " " << endl;
// Örnek 5 for döngüsü ile rand()
cout << "*****Ornek 5 for dongusu ile rand()*****" << endl<<endl;
for (int i = 0; i < 5; i++)
{
cout <<"For ile rastgele sayi : " << rand() << " " << endl;
//cout << rand() << " ";
}
return 0;
}
//Örneklerin çıktıları
/*
* ***** rastgele *****
Rastgele uretilen sayi : 5317
*****1 ile 10 arasinda rastgele*****
1 ile 10 arasinda rastgele sayi : 10
*****1 ile 100 arasinda rastgele*****
1 ile 100 arasinda uretilen rastgele sayi : 75
*****Ornek 4 Mulakat sorusu*****
Minimum degeri giriniz : 5
Maximum degerini giriniz : 9
5 ile 9 arasindaki rastgele sayi 9
*****Ornek 5 for dongusu ile rand()*****
For ile rastgele sayi : 29848
For ile rastgele sayi : 30460
For ile rastgele sayi : 21290
For ile rastgele sayi : 8509
For ile rastgele sayi : 10523
*/
/*
int mulakat_Sayi(int max, int min)
{
int mulakat = min + (rand() % (max - min +1));
return mulakat;
}
Konu anlatımı :
Parça: rand() % (max - min + 1)
rand() fonksiyonu 0 ile 32.767 arasında herhangi bir sayı üretir. Diyelim ki biz 10 ile 15 arasında bir sayı istiyoruz.
• Neden max - min + 1 yapıyoruz? Bu bize kaç tane seçeneğimiz olduğunu söyler. 15'ten 10'u çıkarırsan 5 kalır ama 10, 11, 12, 13, 14, 15 toplamda 6 tanedir. İşte o +1 bu yüzden var.
o Hesap: $15 - 10 + 1 = 6$ seçenek.
• Neden Modulo (%) alıyoruz? rand() % 6 işlemi, üretilen sayı ne kadar büyük olursa olsun, sonucu mutlaka 0 ile 5 arasında bir değere sabitler. (Çünkü bir sayının 6'ya bölümünden kalan en fazla 5 olabilir).
Parça: min + ...
Şu an elimizde 0, 1, 2, 3, 4, 5 seçeneklerinden biri var. Ama biz 10 ile 15 arası istiyorduk.
• Eğer üretilen sayı 0 ise: $10 + 0 = \mathbf{10}$ (Min değer)
• Eğer üretilen sayı 5 ise: $10 + 5 = \mathbf{15}$ (Max değer)
Yani en başa eklediğin min, o sıfırdan başlayan sayı dizisini senin istediğin başlangıç noktasına "öteler".
Bir Örnekle Canlandıralım
Senaryo: 20 ile 30 arası bir sayı üretmek istiyoruz. (min=20, max=30)
1. Aralık hesabı: $30 - 20 + 1 = \mathbf{11}$ (Seçenek sayısı)
2. Rand işlemi: Diyelim ki rand() o an bize piyangodan 105 sayısını verdi.
3. Sıkıştırma: $105 \% 11 = \mathbf{6}$ (Çünkü $11 \times 9 = 99$ eder, geriye kalan $6$'dır).
4. Öteleme: $20 + 6 = \mathbf{26}$
Sonuç: 26 (Gerçekten de 20 ile 30 arasında!)
Neden Bu Formülü Kullanıyoruz?
Eğer sadece rand() % 30 yazsaydın, bilgisayar sana 0 ile 29 arası bir sayı verirdi. Ama sen 0'dan değil 20'den başlasın istiyorsun. İşte bu formül, o başlangıç noktasını sağlama almak için tek standart yoldur.
Şimdi bir test yapalım: Eğer 50 ile 60 arası bir sayı üretmek isteseydin, parantez içindeki (max - min + 1) işleminin sonucu kaç çıkardı? (Cevap 11 ise mantığı çözdün demektir!)
*/
Matematikte sayıların sıfır ille bölümünden kalan yine sıfırdır. Sayılar sıfır ile çarpma yada bölme işleminde sonucu sıfır döner
Yazılım kurallarında ise ilk 0 ve 1 döner
Sıfır ile işlemin sonucunu dönemeyeceğimiz için +1 vererek makine dilinin 0 değerine aslında 1 eklemiş oluyoruz yani aslında +1 sayesinde sonuç dönebiliyoruz.