Contoh Praktis
Dadu, pengacakan, dan pengambilan sampel
Contoh Praktis adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C++ Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C++ Academy mencakup 4 pelajaran total.
Melempar Dadu
Dadu bersisi enam adalah uniform_int_distribution(1, 6) yang diberi masukan dari mesin yang telah diberi seed.
#include <iostream>
#include <random>
int main() {
std::mt19937 gen(2026);
std::uniform_int_distribution<int> die(1, 6);
for (int i = 0; i < 5; ++i) std::cout << die(gen) << ' ';
std::cout << '\n';
return 0;
}Menjumlahkan Dua Dadu
Melempar dua dadu lalu menjumlahkannya menghasilkan rentang umum 2 hingga 12, dengan puncak pada angka 7.
#include <iostream>
#include <random>
int main() {
std::mt19937 gen(1);
std::uniform_int_distribution<int> die(1, 6);
int total = die(gen) + die(gen);
std::cout << "two dice sum: " << total << '\n';
return 0;
}Melempar Koin
Koin yang adil adalah bernoulli_distribution(0.5). Hitung sisi kepala dalam banyak pelemparan.
#include <iostream>
#include <random>
int main() {
std::mt19937 gen(7);
std::bernoulli_distribution coin(0.5);
int heads = 0;
for (int i = 0; i < 100; ++i) if (coin(gen)) ++heads;
std::cout << heads << " heads out of 100\n";
return 0;
}Mengacak Set Kartu
std::shuffle mengurutkan ulang suatu rentang secara acak menggunakan mesin Anda, sebagai pengganti modern untuk random_shuffle yang telah dihapus.
#include <iostream>
#include <random>
#include <algorithm>
#include <vector>
int main() {
std::vector<int> cards{1, 2, 3, 4, 5};
std::mt19937 gen(3);
std::shuffle(cards.begin(), cards.end(), gen);
for (int c : cards) std::cout << c << ' ';
std::cout << '\n';
return 0;
}Memilih Pemenang Acak
Pilih satu elemen dengan menghasilkan indeks acak dalam suatu rentang.
#include <iostream>
#include <random>
#include <vector>
#include <string>
int main() {
std::vector<std::string> names{"Ann", "Ben", "Cara", "Dan"};
std::mt19937 gen(9);
std::uniform_int_distribution<int> pick(0, names.size() - 1);
std::cout << "winner: " << names[pick(gen)] << '\n';
return 0;
}Mengambil Sampel Tanpa Pengembalian
std::sample mengambil k elemen berbeda dari suatu rentang, cocok untuk undian atau pemilihan soal kuis.
#include <iostream>
#include <random>
#include <algorithm>
#include <vector>
int main() {
std::vector<int> pool{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
std::vector<int> picked;
std::mt19937 gen(4);
std::sample(pool.begin(), pool.end(), std::back_inserter(picked), 3, gen);
for (int x : picked) std::cout << x << ' ';
std::cout << '\n';
return 0;
}Karakter Kata Sandi Acak
Gunakan indeks ke dalam himpunan karakter dengan distribusi seragam untuk membuat string acak.
#include <iostream>
#include <random>
#include <string>
int main() {
const std::string chars = "abcdefghijklmnopqrstuvwxyz";
std::mt19937 gen(13);
std::uniform_int_distribution<int> pick(0, chars.size() - 1);
std::string pw;
for (int i = 0; i < 8; ++i) pw += chars[pick(gen)];
std::cout << pw << '\n';
return 0;
}Pilihan Berbobot
std::discrete_distribution memilih indeks berdasarkan bobot yang diberikan, sehingga hasil yang umum muncul lebih sering.
#include <iostream>
#include <random>
int main() {
std::mt19937 gen(6);
std::discrete_distribution<int> d{10, 1, 1}; // index 0 is heaviest
int counts[3] = {0};
for (int i = 0; i < 120; ++i) counts[d(gen)]++;
std::cout << counts[0] << ' ' << counts[1] << ' ' << counts[2] << '\n';
return 0;
}Mensimulasikan Jalan Acak
Melangkah ke kiri atau kanan secara acak dan lacak position terakhirnya, sebuah simulasi stokastik sederhana.
#include <iostream>
#include <random>
int main() {
std::mt19937 gen(2);
std::bernoulli_distribution step(0.5);
int pos = 0;
for (int i = 0; i < 1000; ++i) pos += step(gen) ? 1 : -1;
std::cout << "final position: " << pos << '\n';
return 0;
}Melempar hingga Mendapatkan Enam
Lakukan perulangan hingga suatu peristiwa terjadi untuk memodelkan percobaan, dalam hal ini menghitung jumlah lemparan yang diperlukan untuk mendapatkan angka enam.
#include <iostream>
#include <random>
int main() {
std::mt19937 gen(15);
std::uniform_int_distribution<int> die(1, 6);
int rolls = 0;
while (die(gen) != 6) ++rolls;
std::cout << "extra rolls before a six: " << rolls << '\n';
return 0;
}Menghasilkan Data Pengujian
Distribusi dapat dengan cepat mengisi sebuah vektor dengan nilai acak untuk menguji algoritme.
#include <iostream>
#include <random>
#include <vector>
int main() {
std::mt19937 gen(21);
std::uniform_int_distribution<int> d(1, 50);
std::vector<int> data(5);
for (int& v : data) v = d(gen);
for (int v : data) std::cout << v << ' ';
std::cout << '\n';
return 0;
}Pemeriksaan Singkat
Uji pemahaman Anda tentang keacakan praktis.
Ringkasan
Anda telah menerapkan <random> dalam praktik:
- dadu, koin, dan pemenang melalui distribusi seragam dan Bernoulli
std::shuffleuntuk mengurutkan ulang danstd::sampleuntuk mengambil sampel tanpa pengembaliandiscrete_distributionuntuk pilihan berbobot, serta simulasi seperti jalan acak
Sekarang Anda memiliki seperangkat alat lengkap untuk kontainer asosiatif, pencincangan, input/output berkas, dan keacakan dalam C++.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Contoh Praktis” gratis?
Ya — teks lengkap “Contoh Praktis” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C++ Academy, upgrade ke CoddyKit PRO. Kursus C++ Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Contoh Praktis”?
Dadu, pengacakan, dan pengambilan sampel Kamu berlatih C++ Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C++ Academy?
Tidak diperlukan pengalaman sebelumnya. C++ Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Contoh Praktis” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C++ Academy ini?
Ya. Setiap pelajaran C++ Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Mesin Acak
- Distribusi
- Penyemaian yang Tepat
- Contoh Praktis