









Dear Kanjeng Pembaca sekalian,… masih ada case study tentang penentuan tahun kabisat… dimana soal nya sendiri sendiri tentang tahun kabisat (Leap Year) …!!! Terdapat 3 variable yang diminta yaitu date, month, dan year … !!! Atas dasar itu, akan ditentukan apakah tahun itu tahun kabisat … dan terdapat output yang diminta … dan constraints yang diminta sbb :
Berikutnya secara output pun diminta… agak berbeda dan sangat tergantung dari input yang dimasukkan… dimana ketika benar memang tahun kabisat, maka dicetak “It is a leap year” … kemudian jika ada tanggal yang ngacooo, maka dicetak “Invalid date or month” …!!! Ketika tanggal tersebut bukan tahun kabisat … maka akan dihitung berapa hari dan menampilkan “Day number : ” …!!!
Naaagh dari sini yang perlu diketahui adalah apa sih kriteria tahun kabisat itu …??? Karena kalau gak tahu tahun kabisat tentu akan ruweeet … seperti mau ke Surabaya tapi gak tahu ke arah mana… timur kaagh, selatan, utara atau barat …!!! So yang penting adalah apa definisi nya … so yuuuk kita lihat apa itu tahun kabisat …!!! Berdasarkan definisi dari wikipedia… arti dari tahun kabisat dan bagaimana logiknya terlihat dibawah ini …!!!
Naaagh algoritma ini nanti yang akan kita tanam… dimana jika habis dibagi 400, maka disebut tahun kabisat …!!! Jika habis dibagi 100 … bukan tahun kabisat … sedangkan kalau habis dibagi 4 disebut tahun kabisat …!!! Disini ketika harus menghitung jumlah hari … kita harus memasukkan… menghitung hari-hari sebelumnya… misalnya jika dimasukkan tanggal 15 02 2001, maka Day Number nya adalah 31 (bulan januari) + 15 hari di bulan Februari … atau 46 Days …!!!
So penjumlahan hari bisa dihitung di awal, dan mengacu nya bukan tanggal tahun kabisat …!!! Mungkin bertanya … lhooo nanti tidak akurat dong… kalau misalnya bulan Februari tahun kabisat khan 29 hari… ??? Jawabnya simple… karena output tidak ditanya pada tahun kabisat… berapa Day Number… jadi valid penghitungan Day Number itu menggunakan jumlah hari tahun non Kabisat …!!!
Berikutnya kita melakukan validasi untuk memastikan tanggal, bulan dan tahun masih masuk dalam range constraint …!!! Setelah sesuai validasi … maka untuk bulan-bulan misalnya Januari, Maret etc… maka range tanggal harus 1 s/d 31 …!!! Demikian juga untuk bulan April, Juni etc… perlu dipastikan bahwa tanggal itu range nya 1 s/d 30 …!!! Sedangkan untuk bulan Februari harus dilihat jika tahun kabisat boleh sampai tanggal 29… sedangkan kalau non kabisat sampai tanggal 28 …!!!
Selanjutnya baru deegh dicari … jika habis dibagi 400, disebut “Leap year “… jika habis dibagi 100 bukan Leap Year… sedangkan jika habis dibagi 4 disebut “Leap Year’ …!!! Khusus yang bukan Leap Year… maka dikeluarkan Day Number : sebagaimana telah dihitung sebelumnya …!!!
Setelah dipahami logiknya… baru deegh dijalankan validasi… logik-logik dengan if then else… serta mempersiapkan cetak output yang diiinginkan … dan berikut adalah source code programnya …!!!
#include <stdio.h>#include <stdlib.h>#include <math.h>int main(){int date = 31, month = 12, year = 2080;int day_number = 0;scanf(“%d %d %d”, &date, &month, &year);//mencari total hari untuk keperluan day_numberif (month == 1){day_number = date;}if (month == 2){day_number = date + 31;}if (month == 3){day_number = date + 59;}if (month == 4){day_number = date + 90;}if (month == 5){day_number = date + 120;}if (month == 6){day_number = date + 151;}if (month == 7){day_number = date + 181;}if (month == 8){day_number = date + 212;}if (month == 9){day_number = date + 243;}if (month == 10){day_number = date + 273;}if (month == 11){day_number = date + 304;}if (month == 12){day_number = date + 334;}if (date <= 31 && date > 0 && month <= 12 && month > 0 && year > 0 && year <= 2080 ){if (month == 1 || month == 3 || month == 5 ||month == 7 || month == 8 || month == 10 || month == 12){if (date > 0 && date < 32) // 0 < date < 32, kenapa ? karena jan, maret, mei, dll hanya sampai tanggal 31{if (year % 400==0){printf(“it is a leap year. \n”);}else if(year % 100==0){printf(“day number : %d\n”, day_number);}else if(year % 4==0){printf(“it is a leap year. \n”);}else{printf(“day number : %d\n”, day_number);}}else{printf(“invalid date or month!!! \n”);}}if (month == 4 || month == 6 || month == 9 || month == 11){if (date > 0 && date < 31) // 0 < date < 31, kenapa ? karena april, juni, dll, hanya sampai tanggal 30{if (year % 400==0){printf(“it is a leap year. \n”);}elseif(year % 100==0){printf(“day number : %d\n”, day_number);}elseif(year % 4==0){printf(“it is a leap year. \n”);}else{printf(“day number : %d\n”, day_number);}}else{printf(“invalid date or month!!! \n”);}}if (month == 2) //februari kasus sendiri, maka dibuat if statement baru karena ia 28{if ((date > 0 && date < 29) || ( date > 0 && date < 30 && year % 4 == 0)) //pahami line 66 tanda kurung perlu diperhatikan{if (year % 400==0){printf(“it is a leap year. \n”);}elseif(year % 100==0){printf(“day number : %d\n”, day_number);}elseif(year % 4==0){printf(“it is a leap year. \n”);}else{printf(“day number : %d\n”, day_number);}}else{printf(“invalid date or month!!! \n”);}}}else{printf(“invalid date or month!!! \n”);}return 0;}
Leave a Reply