Viết chương trình nhập vào ngày tháng năm cho biết đó la ngày thứ bao nhiêu của năm
Cách tính thứ khi biết ngày tháng năm như nào? Bạn có biết bằng cách nào các ứng dụng lịch có thể xác định thứ của các ngày từ quá khứ tới tương lai tít tắp như vậy không? Bởi vì chúng ta có thể tính toán được việc đó. Bây giờ bạn có một bài tập C/C++ như sau: Hãy nhập vào ngày tháng năm, in ra hôm đó là thứ mấy? Hãy cùng Nguyễn Văn Hiếu Blog đi giải quyết bài tập này nhé. Show 1. Bài toán tính thứ khi biết ngày tháng nămTrong cuộc sống tất bật, chúng ta thường xuyên phải xác định ngày hôm nay là thứ mấy trong tuần. Chẳng hạn như, kiểm tra sinh nhật của thằng bạn rơi vào thứ mấy? Hay thực tế hơn, bạn có một ứng dụng muốn hiện thị đầy đủ thông tin thời gian Và lý do hợp lý nhất, bạn muốn biết bằng cách nào có thể xác định thứ mấy khi biết ngày tháng năm. Không dài dòng nữa, chúng ta sẽ cùng đi thẳng vào vấn đề nhé. 2. Tính thứ khi biết ngày tháng năm như nào?Để xây dựng một chương trình tính thứ cho biết trước ngày tháng năm, chúng ta cần thực hiện các công việc tuần tự như sau:
Dưới đây là code trên ngôn ngữ C/C++ thực hiện tính thứ khi biết ngày tháng năm. Các bạn có thể dùng tham khảo: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 #include #include using namespace std; /* #################################################################### #Tim thu khi biet ngay thang nam # #################################################################### */ // Kiem tra ngay hop le bool check_date(int day, int month){ if ((month==2) && (day>0) && (day<30)){ return true; } if (( (month==1) || (month==3) || (month==5) || (month==7) || (month==8) || (month==10)|| (month==12) ) && ((day>0) && (day<32))) { return true; } if (( (month==4) || (month==6) || (month==9) || (month==11) ) && ((day>0) && (day<31))) { return true; } return false; } // Kiem tra thang hop le bool check_month(int month){ if ((month>0) && (month<13)){ return true; }else{ return false; } } // Kiem tra nam hop le bool check_year(int year){ if ((year>999) && (year < 10000)){ return true; }else{ return false; } } // Kiem tra nam nhuan bool check_leap_year(int year){ if (((year % 4)==0) && ((year % 100)!=0)){ return true; }else if ((year % 400)==0){ return true; }else { return false; } } // Tim chính xác thu theo ngày tháng nam dã biêt // // http://en.wikipedia.org/wiki/Julian_day#Calculation // const char *get_day(int day, int month, int year){ int JMD; JMD = (day + ((153 * (month + 12 * ((14 - month) / 12) - 3) + 2) / 5) + (365 * (year + 4800 - ((14 - month) / 12))) + ((year + 4800 - ((14 - month) / 12)) / 4) - ((year + 4800 - ((14 - month) / 12)) / 100) + ((year + 4800 - ((14 - month) / 12)) / 400)- 32045) % 7; //cout << JMD; const char *weekday[] = {"Thu 2", "Thu 3", "Thu 4", "Thu 5", "Thu 6", "Thu 7", "Chu nhat"}; return weekday[JMD]; } main(){ // Khai bao bien int year, month, date, x, y; cout << "\n[+] CHUONG TRINH TINH THU KHI BIET NGAY THANG NAM."; // Take Inputs cout << "\n[+] Vui long nhap nam [YYYY] : "; cin >> year; // cout << "\n[+] Kiem tra[YYYY] : "; // verify year if (check_year(year)){ cout << "[-] Xac nhan!"; }else{ cout << "\n\t [-] Nhap sai!\n"; exit(0); } cout << "\n[+] Vui long nhap thang[MM] : "; cin >> month; // verify month if (check_month(month)){ cout << "[-] Xac nhan!"; }else{ cout << "[-] Nhap sai!"; exit(0); } cout << "\n[+] Vui long nhap ngay [DD] : "; cin >> date; // verify date if (check_date(date, month)){ cout << "[-] Xac nhan!\n\n"; }else{ cout << "[-] Nhap sai!"; exit(0); } cout << "[+] Ngay : " << date << ", Thang : " << month << ", Nam : " << year << " [ "; if (check_leap_year(year)){ cout << "Nam nhuan" << " ]"; }else{ cout << "Khong phai nam nhuan" << " ]"; } cout << "\n[-] Ngay trong tuan: "; cout << get_day(date, month, year); cout << "\n\n"; } Output: 0 1 2 3 4 5 6 7 8 9 10 11 [+] CHUONG TRINH TINH THU KHI BIET NGAY THANG NAM. [+] Vui long nhap nam [YYYY] : 2018 [-] Xac nhan! [+] Vui long nhap thang[MM] : 10 [-] Xac nhan! [+] Vui long nhap ngay [DD] : 9 [-] Xac nhan! [+] Ngay : 9, Thang : 10, Nam : 2018 [ Khong phai nam nhuan ] [-] Ngay trong tuan: Thu 3 3. Giải thích chương trìnhcheck_year,check_month,check_daylà các hàm giúp chúng ta kiểm tra năm, tháng, ngày của người dùng nhập vào có hợp lệ hay không. Nếu không hợp lệ, chúng ta sẽ dừng chương trình. Ngược lại, nếu hợp lệ chúng ta tiếp tục. check_leap_yearlà hàm kiểm tra một năm có phải năm nhuận không? Hàmget_daysẽ giúp chúng ta tính toán chính xác ngày tháng năm đó là thứ mấy. Công thức dưới đây dựa trênJulian Day Calculation 0 1 2 3 4 5 6 JMD = (day + ((153 * (month + 12 * ((14 - month) / 12) - 3) + 2) / 5) + (365 * (year + 4800 - ((14 - month) / 12))) + ((year + 4800 - ((14 - month) / 12)) / 4) - ((year + 4800 - ((14 - month) / 12)) / 100) + ((year + 4800 - ((14 - month) / 12)) / 400)- 32045) % 7; Sau khi thực hiện tính với công thức này, chúng ta sẽ thu được ngày của tuần ở dạng số. Hi vọng bài chia sẻ hữu ích với các bạn, chúc các bạn học tốt! |