Representasi visual lampu lalu lintas
Pemrograman sistem kontrol, seperti lampu lalu lintas, adalah salah satu contoh klasik dalam dunia ilmu komputer dan rekayasa perangkat lunak. Menggunakan bahasa pemrograman C++ memungkinkan kita untuk membuat simulasi atau bahkan mengontrol perangkat keras nyata dengan efisiensi tinggi. Program lampu lalu lintas sederhana ini akan mensimulasikan urutan standar: Merah, Hijau, Kuning, kemudian kembali ke Merah.
Dalam konteks C++, kita dapat memanfaatkan konsep seperti enum untuk mendefinisikan status (warna) lampu dan sleep function (biasanya dari library atau di C++ modern) untuk memberikan jeda waktu antar perubahan status, meniru durasi nyata lampu lalu lintas.
Sebuah program lampu lalu lintas yang baik harus mematuhi urutan yang benar untuk menghindari kemacetan atau kecelakaan. Urutan standar internasional adalah:
Berikut adalah contoh implementasi menggunakan C++ standar. Kita akan menggunakan pustaka untuk output dan serta untuk kontrol waktu.
#include <iostream>
#include <chrono>
#include <thread>
#include <string>
using namespace std;
// Enumerasi untuk mendefinisikan status lampu
enum class WarnaLampu {
MERAH,
HIJAU,
KUNING
};
// Fungsi untuk menampilkan status lampu saat ini
void tampilkanStatus(WarnaLampu warna) {
cout << "----------------------------------------" << endl;
switch (warna) {
case WarnaLampu::MERAH:
cout << "| STATUS: MERAH (STOP) |" << endl;
// Durasi merah biasanya paling lama
this_thread::sleep_for(chrono::seconds(5));
break;
case WarnaLampu::HIJAU:
cout << "| STATUS: HIJAU (GO) |" << endl;
// Durasi hijau cukup lama
this_thread::sleep_for(chrono::seconds(6));
break;
case WarnaLampu::KUNING:
cout << "| STATUS: KUNING (PERINGATAN) |" << endl;
// Durasi kuning paling singkat
this_thread::sleep_for(chrono::seconds(2));
break;
}
}
int main() {
cout << "Simulasi Program Lampu Lalu Lintas Dimulai..." << endl;
// Loop simulasi tak terbatas
while (true) {
// 1. Status MERAH
tampilkanStatus(WarnaLampu::MERAH);
// 2. Status HIJAU
tampilkanStatus(WarnaLampu::HIJAU);
// 3. Status KUNING
tampilkanStatus(WarnaLampu::KUNING);
// Loop akan kembali ke MERAH
}
return 0;
}
Kita mendefinisikan tipe data kustom enum class WarnaLampu. Ini membuat kode lebih mudah dibaca dan mencegah kesalahan penulisan string status. Setiap nilai (MERAH, HIJAU, KUNING) mewakili satu keadaan operasional.
Fungsi kunci dalam simulasi ini adalah this_thread::sleep_for(). Fungsi ini menghentikan eksekusi program selama durasi yang ditentukan (dalam contoh ini menggunakan detik). std::chrono::seconds(X) membantu kita mendefinisikan durasi ini secara eksplisit. Ini sangat penting karena waktu adalah aspek vital dari sistem lalu lintas.
Fungsi tampilkanStatus menerima nilai WarnaLampu, mencetak statusnya ke konsol, dan kemudian menunggu durasi yang sesuai sebelum fungsi berakhir, memicu iterasi berikutnya dalam loop main(). Perhatikan bahwa durasi (misalnya 5 detik untuk Merah) dapat disesuaikan berdasarkan kebutuhan simulasi Anda.
Program di atas adalah dasar yang sangat solid. Untuk pengembangan lebih lanjut, beberapa fitur dapat ditambahkan: