









Dear Kanjeng Pembaca sekalian,… naaagh bagi para mahasiswa yang sedang menggeluti bidang dasar-dasar programming… tentu ada 2 (dua) hal ketika mengatasi suatu persoalan pemrograman …!!! Pertama, adalah sebelum coding memahami dulu persoalan / case studynya… dan mulai membayangkan logiknya …!!! Kedua, setelah memahami baru menuliskan coding programnya… syukur-syukur sbelumnya dapat menggambarkan dalam bentuk flow chart…!!! Kalau sudah biasa, mungkin gak perlu lagi flow chart… so berikut case studynya … tentang Kenjeran Cross Road …!!!
So diatas, adalah contoh soal … dalam hal ini adalah apapun soal nya… ini semacam latihan… dan di dunia kerja nantinya bisa banget kita harus mencari solusi atas suatu case study … so bagi yang akan bergerak di bidang software engineering tentu pertama-tama harus memahami dulu case studynya …!!! Kemudian tentu harus mengetahui juga… apa output yang diharapkan …!!! So berikutnya adalah output yang diharapkan …!!!
Baik kita bahas dulu logik programming nya … tentu harus memahami soalnya… sehingga nanti kita bisa bikin programmnya …!!! Dalam dunia programming yang selalu harus diperhatikan adalah 3 (tiga) tahap, yaitu (i) Input, (ii) Proses, dan (iii) Output …!!! Berbicara soal input, maka harus dipastikan bahwa inputnya adalah valid… kalau gak valid maka akan membuat garbage in… dan ujung-ujungnya akan membikin garbage out …!!! Yuk kita mulai dalami soal input … :
Input yang akan dimasukkan adalah variable M, N dan T dan ketiga variabel tersebut mempunyai data type integer (bilangan bulat) …!!! Case study nya adalah mobil kita berada di lampu merah, dimana M = banyaknya mobil didepan mobil kita, dan N= banyaknya mobil dibelakang mobil kita, dan T = waktu yang dimasukkan untuk mengetahui apakah dengan waktu yang diberikan (dalam hal ini T), mobil kita akan lewat lampu merah, dan berapa mobil yang tidak melewati …!!!
Kemudian ada constraint, atau akan divalidasi … dimana M adalah bilangan integer antara 1 s/d 100, dan N adalah bilangan integer antara 1 s/d 100, dan T adalah bilangan integer antara 1 s/d 1000 detik …!!! So ini dulu dipahami soal input… dengan singkatnya ada 3 variabel yaitu M, N dan T… dan masing-masing ada constraint nya… jika data input valid baru deeegh masuk ke babak proses …!!!
Berikutnya kita akan membahas tentang proses… dimana proses akan dilakukan ketika input yang diberikan valid …!!! Kalau data yang dimasukkan tidak valid, maka tentu gak perlu dibahas… cukup diberikan message ‘Data Invalid’ … dan hal ini untuk mencegah Garbage in Garbage Out (GIGO) …!!! Naaagh gimana proses nya … yuuuk kita analisa :
Lampu merah akan menyala selama 20 detik setelah itu akan padam dan men-trigger lampu kuning, kemudian lampu kuning akan menyala selama 5 detik dan kemudian akan men-trigger lampu hijau, dan lampu hijau akan menyala selama 60 detik sebelum kembali ke lampu merah …!!! Tentu ketika lampu hijau … baru mobil boleh jalan … dan 1 mobil membutuhkan waktu 5 detik … untuk melewati lampu persimpangan tersebut …!!!
Masuk lebih dalam lagi… bahwa terlihat 1 siklus (lampu merah, lampu kuning dan lampu hijau) itu membutuhkan waktu = 20 + 5 + 60 = 85 detik …!!! Naaagh karena lampu hijau selama 60 detik… maka akan lewat 12 mobil atau 60 detik / 5 detik untuk setiap mobil yang akan lewat di lampu persimpangan …!!! So dari sini bisa terlihat bahwa 1 siklus itu akan lewat 12 mobil … atau equivalen 85 detik itu akan lewat 12 mobil …!!!
Untuk menentukan mobil kita lewat atau tidak… gampangnya adalah total mobil didepan kita ada berapa tinggal ditambah 1 mobil …!!! Jadi untuk menghitungnya gampang… pasang variable mobil_kita_lewat = M + 1; Kemudian kita, dengan berapa banyak total mobil yang lewat… caranya adalah total detik (T) dibagi dengan 85 detik… hasilnya adalah bilangan integer (tanpa pecahan)… dan hasilnya ini dikalikan dengan 12 … ini untuk mendapatkan mobil yang lewat dalam siklus …!!! Kemudian tentu ada sisanya … misalnya tersisa 40 detik… (misalnya diberikan T = 125 red.) … maka 1 siklus = 12 kendaraan, ditambah dengan 40 – (20 detik lampu merah + 5 detik lampu kuning) … sehongga masih tersisa 15 detik …!!! So 15 detik ini akan menghasilkan … tambahan 3 kendaraan …!!! Jadi total kendaraan yang lewat adalah 15 kendaraan …!!! Ok… sampai disini … sudah memahami …???
Naaagh untuk memastikan apakah kendaraan kita lewat atau tidak… gampangnya adalah total mobil termasuk mobil kita atau tadi disebut mobil_kita_lewat = M + 1 tadi…. apakah M + 1 itu <= total_kendaraan_lewat …!!! Jika benar… maka kondisi true… jika salah kondisi false… !!! Naaagh berikutnya adalah memastikan outputnya seperti apa …!!! Kemudian menghitung sisa mobil yang gak lewat… tentu gampangnya adalah total dari (M + 1 + N) > total kendaraan lewat, maka diproses selisihnya, jika sama atau lebih kecil… sudah pasti seluruhnya lewat atau tersisa 0 mobil …!!!
Berikutnya adalah menganalisa output yang akan dihasilkan … dan terlihat outputnya cukup simple… hanya mengeluarkan YES! jika mobil kita lewat… atau NO! Jika mobil gak lewat,…. plus beserta sisa mobil yang gak lewat …!!! So ini cukup dengan perintah printf saza nantinya …!!! So gimana kira-kira programnya … yuuuk kita lihat … :
#include <stdio.h>int main(){int m, n, t, siklus, sisa_waktu, sisa_mobil;int mobil_kita_ikut, tambahan_mobil, total_mobil_lewat;int total_mobil_antrian;scanf(“%d %d %d”, &m, &n, &t);// Validasi untuk memastikan m, n dan t adalah valid sesuai soalif (m >= 1 && m <= 100 && n >= 1 && n <= 100 && t >= 1 && t <= 1000){//printf(“Data Valid \n”);// jumlah mobil depan antrian termasuk mobil kitamobil_kita_ikut = m + 1;// total mobil yang ngantri termasuk mobil kitatotal_mobil_antrian = mobil_kita_ikut + n;//printf(“Mobil kita ikut : %d \n”, mobil_kita_ikut);//printf(“Total Mobil Antrian : %d \n”, total_mobil_antrian);// Menghitung banyaknya siklussiklus = t / 85;//printf(“Siklus : %d \n”, siklus);sisa_waktu = t – ( siklus * 85);//printf(“Sisa waktu : %d \n”, sisa_waktu);tambahan_mobil = (sisa_waktu – 25) / 5;total_mobil_lewat = (siklus * 12) + tambahan_mobil;//printf(“Total Mobil Lewat = %d \n”, total_mobil_lewat);// menghitung sisa mobilif (total_mobil_antrian > total_mobil_lewat){sisa_mobil = total_mobil_antrian – total_mobil_lewat;}else{sisa_mobil = 0;}// memastikan lewat atau gak mobil kitaif (mobil_kita_ikut <= total_mobil_lewat){printf(“YES! %d\n”, sisa_mobil);}else{printf(“NO! %d\n”, sisa_mobil);}} else{printf(“Data is invalid \n”);}return 0;}
Leave a Reply