1. Bài tập tìm ngày trước đó của một ngày trong C

Bài tập cơ bản này ta có thể có hướng giải quyết là sử dụng cấu trúc switch case trong ngôn ngữ lập trình C.

Đầu vào sẽ là một ngày(ngay, thang, nam),  yêu cầu của bài toán là tìm ngày trước đó của ngày đó trong C.

2. Lời giải

Để giải được bài tập tìm ngày trước đó của một ngày trong C bạn phải có kiến thức về toán học cơ bản, có kiến thức về nhập xuất cơ bản và cách sử dụng cấu trúc switch case trong lập trình C cơ bản.

Các bước thực hiện bài toán như sau:

Bước 1: Khai báo biến int Thang, Nam, Ngay đùng để gán giá trị của tháng, năm và ngày; khai báo biến int NgayCuaThang được dùng để gán giá trị số ngày của tháng.

Bước 2: Nhập dữ liệu cho Thang và Nam; nếu Nam < 0 yêu càu nhập lại Nam; nếu Thang < 1 || Thang > 12 yêu cầu nhập lại Thang.

Bước 3: Sử dụng switch truyền vào biến Thang với các case 1, 3, 5, 7, 8, 10, 12 thì gán  NgayCuaThang = 31; các case 4, 6, 9 , 11 sẽ có NgayCuaThang = 30; case 2 ta sử dụng điều kiện if nếu Nam % 4 = 0 && Nam % 100 != 0) || Nam % 400 = 0 thỏa mãn thì có NgayCuaThang = 29 còn ngược lại có NgayCuaThang = 28.

Bước 4: Nhập dữ liệu của Ngay với điều kiện nếu Ngay < 1 || Ngay > NgayCuaThang yêu cầu nhập lại.

Bước 5: Sử dụng if với điều kiện Ngay=1 thì Ngay = NgayTrongThang sử dụng if neu Thang = 1 thỏa mãn thì Thang = 12, Nam–(Ngày 1 tháng 1) ngược lại Thang giam 1 (ngày đầu của 1 tháng); ngược lại Ngay giảm 1(ngày trong 1 tháng).

Bước 6: in kết quả Ngay, Thang, Nam ra màn hình.

Chương trình giải bài tập tìm ngày trước đó của một ngày trong C như sau :

#include<stdio.h>
int main()
{
    // khai bao bien Thang, Nam, Ngay
    int Thang, Nam, Ngay;
    // khai bao bien NgayTrongThang
    int NgayTrongThang;
    // Nhap du lieu cua Nam  
    do
    {
        printf("\nNhap vao nam: ");
        scanf("%d", &Nam);
        if(Nam < 0 )
        {
            printf("\nDu lieu nam khong hop le. Xin kiem tra lai!");
        }
    }while(Nam < 0);//neu Nam < 0 yeu cau nhap lai
    // Nhap du lieu cua Thang
    do
    {
        printf("\nNhap vao thang: ");
        scanf("%d", &Thang);
        if (Thang < 1 || Thang > 12)// 1 nam co 12 thang
            printf("\nDu lieu thang khong hop le. Xin kiem tra lai!");
    }while(Thang < 1 || Thang > 12);
    switch(Thang)
    {
    // thang 1, 3, 5, 6, 8, 10 , 12 có 31 ngay
    case 1: case 3: case 5: case 7: case 8: case 10: case 12:
        NgayTrongThang=31;
        break;
    // thang 4, 6, 9, 11 co 30 ngay
    case 4: case 6: case 9 : case 11:
        NgayTrongThang=30;
        break;
    // thang 2 có 28 ngay neu nam nhuan co 29 ngay
    case 2:
        if((Nam % 4 == 0 && Nam % 100 != 0) || (Nam % 400 == 0))//kiem tra nam nhuan
        {
            NgayTrongThang=29;
        }
        else
        {
            NgayTrongThang=28;
        }
    }
    // Nhap vao ngay
    do
    {
        printf("\nNhap vao ngay: ");
        scanf("%d",&Ngay);
        if(Ngay < 1 || Ngay > NgayTrongThang)//neu Ngay < 1 hoac Ngay > NgayTrongThang nhap lai
        {
            printf("\nDu lieu ngay khong hop le. Xin kiem tra lai!");
        }
    }while(Ngay < 1 || Ngay > NgayTrongThang);
    if(Ngay == 1)//Neu Ngay nhap là 1
    {
        Ngay = NgayTrongThang;// Ngay truoc do la ngay trong thang truoc
        if(Thang == 1)//Thang 1 ngay 1
        {
            Thang = 12;
            Nam--;
        }
        else//Thang khac 1
            Thang--;
    }
    else{//Ngay khac 1
        Ngay--;
    }
    printf("\nNgay truoc do la: %d - %d - %d ", Ngay, Thang, Nam);
}

Ví dụ tôi nhập Ngay=26, Thang=2,Nam=2002

Kết quả:

Nhap vao nam: 2002

Nhap vao thang: 2

Nhap vao ngay: 26

Ngay truoc do la: 25 – 2 – 2002

3. Tổng kết

Để thực hiện giải bài tập tìm ngày trước đó của một ngày trong C bạn đọc cần phải có kiến thức cơ bản về ngôn ngữ lập trình C, bạn cần nắm vững cách nhập xuất căn bản và các cách sử dụng cấu trúc switch case trong C và các phép toán học cơ bản.