Thứ Năm, 10 tháng 12, 2015

Chương trình nhập một ngày, xuất ra ngày thứ mấy trong tuần và ngày tiếp theo, ngày trước đó.

Biết rằng 1/1/1990 là ngày chủ nhật.

#include<stdio.h>
#include<conio.h>

int demngay(int d, int m, int y)
{
    int dd = 0;
    if (y - 1990 != 0)
        dd = (y - 1990) * 365;

    if (m - 1 != 0)
    {
        for (int i = 1; i <= m - 1; i++)
        {
            switch (i)
            {
            case 1:
                dd += 31;    break;
            case 2:
                dd += 28;    break;
            case 3:
                dd += 31;    break;
            case 4:
                dd += 30;    break;
            case 5:
                dd += 31;    break;
            case 6:
                dd += 30;    break;
            case 7:
                dd += 31;    break;
            case 8:
                dd += 31;    break;
            case 9:
                dd += 30;    break;
            case 10:
                dd += 31;    break;
            case 11:
                dd += 30;    break;
            }
        }

    }

    if (d - 1 != 0)
    {
        dd += d - 1;
    }

    if (m>2 && ((y - 1990) / 4 != 0))
        return dd + (y - 1990) / 4;

    return dd;

}


void xemngay(int d, int m, int y)
{
    int x = demngay(d, m, y), dem = 0;
    if (x % 7 == 0)
    {
        printf(" day la ngay chu nhat");
        return;
    }
    do
    {
        dem++;
        x--;
        if (x % 7 == 0)
            break;
    } while (1);

    switch (dem)
    {
    case 1:
        printf(" day la ngay thu 2");    break;
    case 2:
        printf(" day la ngay thu 3");    break;
    case 3:
        printf(" day la ngay thu 4");    break;
    case 4:
        printf(" day la ngay thu 5");    break;
    case 5:
        printf(" day la ngay thu 6");    break;
    case 6:
        printf(" day la ngay thu 7");    break;
    }

}

void ngaytruoc(int d, int m, int y)
{
    if (d != 1)
    {
        printf("\nNgay truoc do la: %d/%d/%d", d - 1, m, y);
        xemngay(d - 1, m, y);
        return;
    }

    switch (m)
    {
    case 1:
        printf("\nNgay truoc do la: 31/12/%d", y - 1);
        xemngay(31, 12, y - 1);
        return;
    case 2:
        printf("\nNgay truoc do la: 31/%d/%d", m - 1, y);
        xemngay(31, m - 1, y);
        return;
    case 3:
        if ((y - 1990) / 4)
        {
            printf("\nNgay truoc do la: 29/%d/%d", m - 1, y);
            xemngay(29, m - 1,y );
            return;
        }
        printf("\nNgay truoc do la: 28/%d/%d", m - 1, y);
        xemngay(28, m - 1, y );
        return;
    case 4:
        printf("\nNgay truoc do la: 31/%d/%d",m-1, y);
        xemngay(31, m-1, y );
        return;
    case 5:
        printf("\nNgay truoc do la: 30/%d/%d",m-1, y);
        xemngay(30, m-1, y);
        return;
    case 6:
        printf("\nNgay truoc do la: 31/%d/%d", m - 1, y);
        xemngay(31, m - 1, y);
        return;
    case 7:
        printf("\nNgay truoc do la: 30/%d/%d", m - 1, y );
        xemngay(30, m - 1, y );
        return;
    case 8:
        printf("\nNgay truoc do la: 31/&%d/%d", m - 1, y );
        xemngay(31, m - 1, y);
        return;
    case 9:
        printf("\nNgay truoc do la: 31/%d/%d", m - 1, y);
        xemngay(31, m - 1, y);
        return;
    case 10:
        printf("\nNgay truoc do la: 30/%d/%d", m - 1, y);
        xemngay(30, m - 1, y);
        return;
    case 11:
        printf("\nNgay truoc do la: 31/%d/%d", m - 1, y);
        xemngay(31, m - 1, y );
        return;
    case 12:
        printf("\nNgay truoc do la: 30/%d/%d", m - 1, y );
        xemngay(30, m - 1, y );
        return;
    }
   

}

void ngaysau(int d, int m, int y)
{
    switch (d)
    {
    case 31:
        if (m == 12)
        {
            printf("\nNgay sau do la: 1/1/%d", y + 1);
            xemngay(1, 1, y + 1);
            return;
        }
        printf("\nNgay sau do la: 1/%d/%d", m + 1, y);
        xemngay(1, m + 1, y);
        return;
    case 30:
        printf("\nNgay sau do la: 1/%d/%d", m + 1, y);
        xemngay(1, m + 1, y);
        return;
    case 28:
        if (m != 2)    break;
        printf("\nNgay sau do la: 1/%d/%d", m + 1, y);
        xemngay(1, m + 1, y);
        return;
    case 29:
        if (m != 2)    break;
        printf("\nNgay truoc do la: 31/%d/%d", m - 1, y);
        xemngay(31, m - 1, y);
        return;
    default: break;
    }
    printf("\nNgay sau do la: %d/%d/%d", d + 1, m, y);
    xemngay(d + 1, m, y);

}

void main(void)
{
    int d, m, y;
again:
    do
    {
        printf("\nNhap ngay: ");
        scanf("%d", &d);
        if (d<1 || d>31)
            printf("\nNgay cao nhat la 31 va thap nhat la 1. Nhap lai.");
    } while (d<1 || d>31);

    do
    {
        printf("\nNhap thang: ");
        scanf("%d", &m);
        if (m<1 || m>12)
            printf("\nThang cao nhat la 12 va thap nhat la 1. Nhap lai.");
    } while (m<1 || m>12);

    printf("\nNhap nam: ");
    scanf("%d", &y);

    printf("\nBan da nhap: %d/%d/%d", d, m, y);
    xemngay(d, m, y);
    ngaytruoc(d, m, y);
    ngaysau(d, m, y);
    getch();
    goto again;
}

Không có nhận xét nào:

Đăng nhận xét