fork download
  1. #include <iostream>
  2. #include <cmath>
  3. #include <ctime> // để lấy thời gian hệ thống
  4. #include <cstring> // để dùng strcpy
  5. using namespace std;
  6.  
  7. struct ThoiGian {
  8. int gio, phut, giay;
  9. };
  10.  
  11. struct Ngay {
  12. int ngay, thang, nam;
  13. };
  14.  
  15. int doi_sang_giay(ThoiGian t); // Hàm đổi giờ, phút, giây → tổng số giây
  16. bool nam_nhuan(int nam); // Hàm kiểm tra năm nhuận
  17. int so_ngay_trong_thang(int thang, int nam); // Hàm số ngày trong một tháng
  18. long long doi_sang_so_ngay(Ngay d); // Hàm đổi ngày/tháng/năm → tổng số ngày kể từ 01/01/0001
  19. int thu_trong_tuan(Ngay d); // Hàm tính thứ trong tuần (0 = Chủ nhật, 1 = Thứ hai, ...)
  20. const char* ten_thu(int thu); //// Trả về tên thứ (dạng const char*)
  21. void truong_hop_a(); // TH1: Hai thời điểm trong cùng một ngày
  22. void truong_hop_b(); // TH2: Hai thời điểm liên tiếp, t2 có thể là ngày hôm sau
  23. void truong_hop_c(); // TH3: Hai ngày bất kỳ
  24. void truong_hop_d(); // TH4: Ngày hôm nay (t1) và ngày t2 nhập vào
  25.  
  26.  
  27. int main() {
  28. cout << "=== CHUONG TRINH TINH KHOANG THOI GIAN GIUA HAI THOI DIEM ===\n";
  29. cout << "Chon truong hop can tinh:\n";
  30. cout << "a) Hai thoi diem trong ngay (h, m, s)\n";
  31. cout << "b) Hai thoi diem lien tiep, t2 co the la ngay hom sau\n";
  32. cout << "c) Hai ngay trong nam (ngay, thang, nam)\n";
  33. cout << "d) t1 la hom nay, tinh khoang cach den t2 va xac dinh thu\n";
  34. cout << "Nhap lua chon (a/b/c/d): ";
  35. char chon;
  36. cin >> chon;
  37. switch (chon) {
  38. case 'a': case 'A': truong_hop_a(); break;
  39. case 'b': case 'B': truong_hop_b(); break;
  40. case 'c': case 'C': truong_hop_c(); break;
  41. case 'd': case 'D': truong_hop_d(); break;
  42. default:
  43. cout << "Lua chon khong hop le!\n";
  44. }
  45. return 0;
  46. }
  47.  
  48. int doi_sang_giay(ThoiGian t) {
  49. return t.gio * 3600 + t.phut * 60 + t.giay;
  50. }
  51.  
  52.  
  53. bool nam_nhuan(int nam) {
  54. return (nam % 4 == 0 && nam % 100 != 0) || (nam % 400 == 0);
  55. }
  56.  
  57. int so_ngay_trong_thang(int thang, int nam) {
  58. int ngay_thang[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
  59. if (thang == 2 && nam_nhuan(nam)) return 29;
  60. return ngay_thang[thang];
  61. }
  62.  
  63.  
  64. long long doi_sang_so_ngay(Ngay d) {
  65. long long tong = 0;
  66. for (int i = 1; i < d.nam; i++)
  67. tong += nam_nhuan(i) ? 366 : 365;
  68. for (int i = 1; i < d.thang; i++)
  69. tong += so_ngay_trong_thang(i, d.nam);
  70. tong += d.ngay;
  71. return tong;
  72. }
  73.  
  74. int thu_trong_tuan(Ngay d) {
  75. int q = d.ngay;
  76. int m = d.thang;
  77. int y = d.nam;
  78. if (m < 3) { // nếu là tháng 1 hoặc 2 thì coi như tháng 13,14 của năm trước
  79. m += 12;
  80. y--;
  81. }
  82. int h = (q + 13*(m+1)/5 + y + y/4 - y/100 + y/400) % 7;
  83. return (h + 6) % 7; // đổi về hệ 0=CN, 6=Thứ 7
  84. }
  85.  
  86. const char* ten_thu(int thu) {
  87. const char* t[] = {
  88. "Chu nhat", "Thu hai", "Thu ba",
  89. "Thu tu", "Thu nam", "Thu sau", "Thu bay"
  90. };
  91. return t[thu];
  92. }
  93.  
  94.  
  95. void truong_hop_a() {
  96. ThoiGian t1, t2;
  97. cout << "Nhap thoi diem t1 (gio phut giay): ";
  98. cin >> t1.gio >> t1.phut >> t1.giay;
  99. cout << "Nhap thoi diem t2 (gio phut giay): ";
  100. cin >> t2.gio >> t2.phut >> t2.giay;
  101. int hieu = abs(doi_sang_giay(t2) - doi_sang_giay(t1));
  102. cout << "=> Khoang thoi gian giua hai thoi diem la: " << hieu << " giay\n";
  103. }
  104.  
  105.  
  106. void truong_hop_b() {
  107. ThoiGian t1, t2;
  108. cout << "Nhap thoi diem t1 (gio phut giay): ";
  109. cin >> t1.gio >> t1.phut >> t1.giay;
  110. cout << "Nhap thoi diem t2 (gio phut giay): ";
  111. cin >> t2.gio >> t2.phut >> t2.giay;
  112. int giay1 = doi_sang_giay(t1);
  113. int giay2 = doi_sang_giay(t2);
  114. int hieu;
  115. if (giay2 >= giay1)
  116. hieu = giay2 - giay1;
  117. else
  118. hieu = (24 * 3600 - giay1) + giay2; // t2 thuộc ngày hôm sau
  119. cout << "=> Khoang thoi gian giua t1 va t2 la: " << hieu << " giay\n";
  120. }
  121.  
  122.  
  123. void truong_hop_c() {
  124. Ngay n1, n2;
  125. cout << "Nhap ngay t1 (ngay thang nam): ";
  126. cin >> n1.ngay >> n1.thang >> n1.nam;
  127. cout << "Nhap ngay t2 (ngay thang nam): ";
  128. cin >> n2.ngay >> n2.thang >> n2.nam;
  129. long long so1 = doi_sang_so_ngay(n1);
  130. long long so2 = doi_sang_so_ngay(n2);
  131. long long hieu = so2 - so1;
  132. cout << "=> Khoang thoi gian giua t1 va t2 la: " << hieu << " ngay\n";
  133. cout << "Thu cua t1: " << ten_thu(thu_trong_tuan(n1)) << endl;
  134. cout << "Thu cua t2: " << ten_thu(thu_trong_tuan(n2)) << endl;
  135. }
  136.  
  137. void truong_hop_d() {
  138. time_t bay_gio = time(0);
  139. tm *hientai = localtime(&bay_gio);
  140. Ngay n1;
  141. n1.ngay = (*hientai).tm_mday;
  142. n1.thang = (*hientai).tm_mon + 1;
  143. n1.nam = (*hientai).tm_year + 1900;
  144. cout << "Hom nay la: " << n1.ngay << "/" << n1.thang << "/" << n1.nam
  145. << " (" << ten_thu(thu_trong_tuan(n1)) << ")\n";
  146. Ngay n2;
  147. cout << "Nhap ngay t2 (ngay thang nam): ";
  148. cin >> n2.ngay >> n2.thang >> n2.nam;
  149. long long so1 = doi_sang_so_ngay(n1);
  150. long long so2 = doi_sang_so_ngay(n2);
  151. long long hieu = so2 - so1;
  152. cout << "=> t2 cach hom nay " << hieu << " ngay\n";
  153. cout << "Thu cua t2 la: " << ten_thu(thu_trong_tuan(n2)) << endl;
  154. }
  155.  
  156.  
Success #stdin #stdout 0s 5308KB
stdin
Standard input is empty
stdout
=== CHUONG TRINH TINH KHOANG THOI GIAN GIUA HAI THOI DIEM ===
Chon truong hop can tinh:
a) Hai thoi diem trong ngay (h, m, s)
b) Hai thoi diem lien tiep, t2 co the la ngay hom sau
c) Hai ngay trong nam (ngay, thang, nam)
d) t1 la hom nay, tinh khoang cach den t2 va xac dinh thu
Nhap lua chon (a/b/c/d): Lua chon khong hop le!