Tutorial: Program Penghitung Ongkos Parkir

Kemarin waktu gw ikut jadi tutor pemrograman buat junior-junior gw di kampus, temen gw ada ngasih mereka soal buat dikerjain. Soalnya sih sebenernya nggak susah, cuma untuk logikanya mungkin anak-anak yang ikut kelas tutor kemarin itu masih belum dapet. Normal sih, kemarin itu baru jalan minggu kedua buat semester ini soalnya. Berhubung mungkin ada orang lain yang perlu dibantu juga untuk masalah yang sama, gw bahas di sini dah.

Jadi kemarin itu anak-anak yang ikut tutor diminta untuk bikin program penghitung ongkos parkir pake bahasa C. Diasumsikan kendaraan yang diparkir di tempat parkirnya nggak boleh nginep. Programnya minta inputan ongkos parkir untuk jam pertama, ongkos untuk jam berikutnya, jam masuk kendaraan ke tempat parkir, & jam keluar kendaraan dari tempat parkir. Contoh tampilan programnya kira-kira begini (yang di-bold & digarisbawahi itu inputan dari user).

Ongkos Jam Pertama    : 2000
Ongkos Jam Kedua      : 1000

Jam Masuk Kendaraan   : 11:50
Jam Keluar Kendaraan  : 14:20

Total Ongkos Parkir   : 4000

Gw di sini nggak bakalan bikin programnya dari awal, tapi gw bakal ngasih tau beberapa bagian yang diperluin buat bikin program ini yang bisa jadi lu pada udah tau, tapi mungkin juga belum. Pertama, untuk inputan jam & menitnya. Function scanf() bisa dipake buat nginput nilai ke lebih dari satu variabel. Buat kasus kayak soal di atas, kita perlu buat kayak begini untuk nginput jam & menitnya.

scanf("%d:%d", &jamMasuk, &mntMasuk);

Sekarang masalah penghitungan selisih jam & menitnya. Ada beberapa cara buat ngelakuin ini, temen gw ada yang ngerjain bagian ini dengan cara ini.

slshWkt = (jamKeluar * 60 + mntKeluar) - (jamMasuk * 60 + mntMasuk);
slshJam = slshWkt / 60;
slshMnt = slshWkt % 60;

Logika temen gw kira-kira begini:

  1. Hitung selisih waktu dalam satuan menit.
  2. Cari selisih jam. Caranya, bagi selisih waktu dengan 60 menit (kalau ada lebihnya dibulatkan ke bawah, berhubung tipe datanya integer).
  3. Cari selisih menit. Caranya, hitung hasil modulus selisih waktu dengan 60 menit.

Tapi gw lebih suka ngerjain itu dengan cara ini.

slshJam = jamKeluar - jamMasuk;
slshMnt = mntKeluar - mntMasuk;

Lalu pertanyaannya: gimana jadinya kalo menit keluarnya lebih kecil dari menit masuknya? Cara pertama tadi itu nilai selisih menitnya nggak mungkin negatif karena cara perhitungannya begitu, lalu gimana dengan cara kedua? Kita perlu tambahin potongan program kayak di bawah ini sesudah selisih jam & selisih menitnya didapet.

if (slshMnt < 0) {
slshJam--;
slshMnt+=60;
}

Jadi kalo selisih menitnya nilainya negatif, nilai selisih jamnya bakal dikurangi 1 & nilai selisih menitnya bakal ditambah 60. Jadi kalo kendarannya masuk jam 11:50 & keluar jam 14:20, hitungan nilai variabelnya kira-kira begini.

slshJam = 3   ---------------------------> slshJam = 2
slshMnt = -30 ---------------------------> slshMnt = 30

Jadi hitungan selisih jamnya 2 jam 30 menit. Sekarang kita hitung ongkos parkirnya. Perlu diinget kalo ongkos untuk jam pertama beda dengan ongkos untuk jam berikutnya & kalo ada hitungan menit di selisih jam parkirnya ongkos untuk sisa menit itu dianggap ongkos satu jam. Jadi kira-kira programnya harus dibuat begini.

if (slshJam  == 0)
totalOngkos = ongkosJamPertama;
else {
totalOngkos = ongkosJamPertama + ongkosJamBerikut (slshJam - 1);

if (slshMnt > 0)
totalOngkos = totalOngkos + ongkosJamBerikut;

}

Kira-kira begini penjelasannya:

  • Kalau selisih jamnya nol, berarti kendaraan diparkir kurang dari satu jam. Karena itu ongkos yang harus dibayar sama dengan ongkos jam pertama.
  • Kalau selisih jamnya bukan nol, berarti kendaraan diparkir satu jam atau lebih. Karena itu, total ongkos yang harus dibayar sama dengan ongkos jam pertama ditambah dengan ongkos jam berikutnya dikalikan dengan selisih jam dikurangi satu, karena ongkos untuk jam pertama tidak perlu dikalikan dengan ongkos jam berikutnya. Kalau selisih menit lebih dari nol, berarti ongkos parkir kendaraan ditambah satu jam karena perhitungan jam untuk ongkos parkirnya harus dibulatkan ke atas.

2 thoughts on “Tutorial: Program Penghitung Ongkos Parkir

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s