0Pricing
C++ Academy · Ders

Rastgele Üreteçler

Rastgele bitler üretin

Rastgele Üreteçler, CoddyKit'te ücretsiz bir C++ Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C++ Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C++ Academy kursu toplamda 4 dersten oluşur.

Neden <random>

Eski rand() düşük niteliklidir ve denetlenmesi zordur. <random> kitaplığı rastgeleliği üreteçlere (rastgele bit kaynakları) ve dağılımlara (çıktı biçimleri) ayırır.

#include <iostream>
#include <random>

int main() {
    std::mt19937 engine(42);
    std::cout << "engine produced a value\n";
    unsigned int v = engine();
    std::cout << (v != 0 ? "non-zero" : "zero") << '\n';
    return 0;
}

Mersenne Twister

std::mt19937 en yaygın üreteçtir: hızlıdır, niteliği yüksektir ve periyodu uzundur. Sayı, bit cinsinden durum boyutunu belirtir.

#include <iostream>
#include <random>

int main() {
    std::mt19937 gen(1);
    unsigned int a = gen();
    unsigned int b = gen();
    std::cout << (a != b ? "two different values" : "same") << '\n';
    return 0;
}

Üreteçler belirlenimcidir

Aynı tohum verildiğinde bir üreteç her zaman aynı diziyi üretir. Sonuçların yeniden üretilebilir olmasını sağlayan şey budur.

#include <iostream>
#include <random>

int main() {
    std::mt19937 a(123), b(123);
    std::cout << std::boolalpha << (a() == b()) << '\n';
    std::cout << (a() == b()) << '\n';
    return 0;
}

Üreteci çağırma

Bir üreteç çağrılabilir bir nesnedir. Her engine() çağrısı, kendi aralığındaki bir sonraki ham rastgele tamsayıyı döndürür.

#include <iostream>
#include <random>

int main() {
    std::mt19937 gen(7);
    for (int i = 0; i < 3; ++i) {
        unsigned int v = gen();
        std::cout << (v % 100) << ' ';
    }
    std::cout << '\n';
    return 0;
}

Üreteç aralığı

min() ve max(), bir üretecin üretebileceği ham değerlerin aralığını bildirir.

#include <iostream>
#include <random>

int main() {
    std::mt19937 gen;
    std::cout << "min: " << gen.min() << '\n';
    std::cout << "max: " << gen.max() << '\n';
    return 0;
}

Diğer üreteçler

Kitaplık çeşitli üreteçler sunar:

  • minstd_rand: küçük bir doğrusal eşlenik üreteci.
  • mt19937: genel amaçlı varsayılan üreteç.
  • ranlux48: daha yüksek nitelikli, ancak daha yavaş.
#include <iostream>
#include <random>

int main() {
    std::minstd_rand lcg(5);
    std::mt19937 mt(5);
    std::cout << (lcg() % 10) << ' ' << (mt() % 10) << '\n';
    return 0;
}

64 bitlik üreteç

Büyük karma değerleri veya çok geniş aralıkları gibi 64 bitlik rastgele değerlere ihtiyaç duyduğunuzda std::mt19937_64 kullanın.

#include <iostream>
#include <random>

int main() {
    std::mt19937_64 gen(99);
    unsigned long long v = gen();
    std::cout << "got a 64-bit value: " << (v != 0 ? "yes" : "no") << '\n';
    return 0;
}

Üreteç ve dağılım karşılaştırması

Ham üreteç çıktısı, çok geniş bir aralıkta uniformdur. Zar atışı gibi kullanışlı değerler elde etmek için üreteci bir dağılıma aktarın.

#include <iostream>
#include <random>

int main() {
    std::mt19937 gen(2024);
    std::uniform_int_distribution<int> die(1, 6);
    std::cout << "rolled " << die(gen) << '\n';
    return 0;
}

Değerleri atlama

discard(n), çıktı üretmeden üreteci n adım ilerletir; bu, bir dizide ilerideki değerlere atlamak için kullanışlıdır.

#include <iostream>
#include <random>

int main() {
    std::mt19937 a(10), b(10);
    b.discard(2);
    a(); a();
    std::cout << std::boolalpha << (a() == b()) << '\n';
    return 0;
}

Tek bir üreteci yeniden kullanma

Programınızdaki tüm rastgelelik işlemleri için tek bir üreteç oluşturup yeniden kullanın. Her seferinde yeni bir üreteç oluşturmak kaynak israfıdır ve niteliği düşürebilir.

#include <iostream>
#include <random>

int main() {
    std::mt19937 gen(2026);
    std::uniform_int_distribution<int> d10(1, 10);
    int total = 0;
    for (int i = 0; i < 5; ++i) total += d10(gen);
    std::cout << "sum of 5 rolls: " << total << '\n';
    return 0;
}

Varsayılan tohumun sakıncası

Varsayılan olarak oluşturulan bir üreteç sabit bir varsayılan tohum kullanır; bu nedenle her çalıştırmada aynı diziyi üretir. Gerçek çeşitlilik için üretece tohum vermelisiniz (bu konu bir sonraki derste ele alınacaktır).

#include <iostream>
#include <random>

int main() {
    std::mt19937 gen; // default seed: same every run
    std::cout << "first value mod 1000: " << (gen() % 1000) << '\n';
    return 0;
}

Hızlı Kontrol

Rastgele üreteçler konusundaki anlayışınızı sınayın.

Özet

Rastgele üreteçleri öğrendiniz:

  • <random>, üreteçleri (bitler) dağılımlardan (biçim) ayırır
  • std::mt19937 başvurulacak üreteçtir; belirli bir tohum için belirlenimcidir
  • tek bir üreteci yeniden kullanın ve gerçek çeşitlilik için ona doğru şekilde tohum verin

Sırada üreteç çıktısını dağılımları kullanarak biçimlendireceksiniz.

Sıkça Sorulan Sorular

“Rastgele Üreteçler” dersi ücretsiz mi?

Evet — “Rastgele Üreteçler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C++ Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C++ Academy kursu toplamda 4 dersten oluşur.

“Rastgele Üreteçler” dersinde ne öğreneceğim?

Rastgele bitler üretin C++ Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C++ Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C++ Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“Rastgele Üreteçler” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C++ Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C++ Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Rastgele Üreteçler
  2. Dağılımlar
  3. Doğru Tohumlama
  4. Uygulamalı Örnekler
← C++ Academy Sayfasına Dön