Ngày (Date) bao gồm ngày, tháng, năm. Có nhiều cách hiển thị ngày.
Đây là chương trình sắp xếp ngày tháng bằng Selection Sort. Hãy tìm hiểu các khái niệm liên quan.
Sắp xếp ngày tháng
Việc sắp xếp ngày tháng đòi hỏi kiến thức rõ ràng về ngày tháng và xác thực. Trước khi sắp xếp, cần kiểm tra ngày nhập có hợp lệ không (ví dụ 29-2 chỉ hợp lệ năm nhuận).
Sau khi xác thực, ta sắp xếp theo thứ tự ngược: năm trước, sau đó tháng, cuối cùng ngày.
Selection Sort (Sắp xếp chọn)
Selection Sort là thuật toán sắp xếp tìm phần tử nhỏ nhất đặt lên đầu mảng, rồi thu hẹp mảng. Do đó đặt từng phần tử vào vị trí đúng theo thứ tự tăng dần.
Chương trình dùng Selection Sort để sắp xếp các ngày do người dùng nhập.
Ví dụ
Input: 4 1 2012 31 5 2019 19 12 2012 Output: 4 1 2012 19 12 2012 31 5 2019
Giải thích
Vì tất cả ngày đều hợp lệ, chương trình sắp xếp chúng theo thứ tự tăng dần.
Ví dụ mã C++
#include <iostream>
using namespace std;
struct date {
int day;
int month;
int year;
int valid = 1;
};
int datevalidate(int dd, int mm, int yy) {
if (yy >= 100 && yy <= 9999) {
if (mm >= 1 && mm <= 12) {
if ((dd >= 1 && dd <= 31) && (mm == 1 || mm == 3 || mm == 5 || mm == 7 || mm == 8 || mm == 10 || mm == 12));
else if ((dd >= 1 && dd <= 30) && (mm == 4 || mm == 6 || mm == 9 || mm == 11));
else if ((dd >= 1 && dd <= 28) && (mm == 2));
else if (dd == 29 && mm == 2 && (yy % 400 == 0 || (yy % 4 == 0 && yy % 100 != 0)));
else
return 0;
} else {
return 0;
}
} else {
return 0;
}
}
int main() {
cout << "Nhập 5 ngày cần sắp xếp:\n";
struct date input[5];
for (int i = 0; i < 5; i++) {
cout << "Nhập ngày " << (i+1) << " : ";
cin >> input[i].day;
cin >> input[i].month;
cin >> input[i].year;
input[i].valid = datevalidate(input[i].day, input[i].month, input[i].year);
if (!input[i].valid) {
cout << "Ngày không hợp lệ";
exit(0);
}
}
for (int i = 0; i < 4; i++) {
for (int j = i+1; j < 5; j++) {
if (input[i].year > input[j].year) {
struct date temp = input[i];
input[i] = input[j];
input[j] = temp;
} else if (input[i].year == input[j].year && input[i].month > input[j].month) {
struct date temp = input[i];
input[i] = input[j];
input[j] = temp;
} else if (input[i].year == input[j].year && input[i].month == input[j].month && input[i].day > input[j].day) {
struct date temp = input[i];
input[i] = input[j];
input[j] = temp;
}
}
}
cout << "Các ngày sau sắp xếp: \n";
for (int i = 0; i < 5; i++) {
cout << input[i].day << " " << input[i].month << " " << input[i].year;
cout << endl;
}
} Kết quả
Nhập 5 ngày cần sắp xếp: Nhập ngày 1: 5 12 2019 Nhập ngày 2: 1 2 2012 Nhập ngày 3: 11 6 2324 Nhập ngày 4: 29 2 2652 Nhập ngày 5: 16 5 2012 Các ngày sau sắp xếp: 1 2 2012 16 5 2012 5 12 2019 11 6 2324 29 2 2652