Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- struct ngay
- {
- int d, m, y;
- } p;
- int kiemTraNamNhuan(int a);
- int kiemTraTinhHopLe(ngay p, int A[]);
- void nhap(ngay& p, int A[]);
- void xuat(ngay p);
- void nhap2(int& a);
- int ngayThu(ngay p, int A[]);
- int saukNgay(ngay& p, int A[], int& k);
- int truockNgay(ngay& p, int A[], int& k);
- void main()
- {
- int A[13] = { 31,31,28,31,30,31,30,31,31,30,31,30,31 };
- nhap(p, A);
- int k;
- // int kq=ngayThu (p,A);
- //printf ("%d\n",kq);
- //xuat (p);
- truockNgay(p, A, k);
- xuat(p);
- }
- int truockNgay(ngay& p, int A[], int& k)
- {
- printf_s("Nhap k :\n");
- scanf_s("%d", &k);
- int ngay = ngayThu(p,A);
- int i, dem=0;
- if (k - ngay <= 0)
- {
- if (k - ngay == 0)
- {
- p.y = p.y - 1;
- p.d = 31;
- p.m = 12;
- return 1;
- }
- else
- {
- if (k - p.d < 0)
- {
- p.d = p.d - k;
- return 1;
- }
- else
- {
- k = k - p.d;
- while (k > 0)
- {
- for (i = p.m - 1; i <= 1; i--)
- {
- k = k - A[i];
- if (k < 0)
- {
- break;
- }
- }
- }
- }
- p.d = abs(k);
- p.m = i;
- return 1;
- }
- }
- else
- {
- dem = dem + 1;
- k = k - ngay;
- if (kiemTraNamNhuan(p.y - 1) == 1)
- {
- A[2] = 29;
- } else
- {
- A[2] =28;
- }
- while (k > 0)
- {
- for (i = 12; i >= 1; i--)
- {
- k = k - A[i];
- if (k <= 0)
- {
- break;
- }
- }
- if (i == 0)
- {
- dem = dem + 1;
- }
- }
- p.y = p.y - dem;
- p.m = i;
- p.d = abs(k);
- }
- return 0;
- }
- int saukNgay(ngay& p, int A[], int& k)
- {
- printf_s("Nhap k :\n");
- scanf_s("%d", &k);
- int a = k;
- if (kiemTraNamNhuan(p.y) == 1)
- {
- A[2] = 29;
- }
- k = k - (A[p.m] - p.d);
- if (k < 0)
- {
- p.d = p.d + a;
- return 0;
- }
- int dem = 0;
- int i, tam;
- while (k > 0)
- {
- for (i = p.m + 1; i <= 12; i++)
- {
- tam = k;
- k = k - A[i];
- if (k < 0)
- {
- break;
- }
- if (i == 12)
- {
- if (kiemTraNamNhuan(p.y + 1) == 1)
- {
- A[2] = 29;
- }
- dem = dem + 1;
- p.m = 0;
- }
- }
- }
- p.y = p.y + dem;
- p.m = i;
- p.d = tam;
- return 0;
- }
- int ngayThu(ngay p, int A[])
- {
- int kq = 0;
- for (int i = 1; i < p.m; i++)
- {
- kq = kq + A[i];
- }
- kq = kq + p.d;
- return kq;
- }
- void nhap2(int& a)
- {
- printf_s("Hay nhap nam :\n");
- do
- {
- scanf_s("%d", &a);
- if (a <= 0)
- {
- printf_s("Khong hop le, hay nhap lai !\n");
- }
- } while (a <= 0);
- }
- int kiemTraNamNhuan(int a)
- {
- if ((a % 400 == 0) || (a % 4 == 0) && (a % 100 != 0))
- {
- return 1;
- }
- else
- {
- return 0;
- }
- }
- int kiemTraTinhHopLe(ngay p, int A[])
- {
- if ((p.d < 1 || p.d>31) || (p.m < 1 || p.m>12) || (p.y <= 0))
- {
- return 0;
- }
- else
- {
- if (kiemTraNamNhuan(p.y) == 1)
- {
- A[2]++;
- }
- if (p.d > A[p.m])
- {
- return 0;
- }
- }
- return 1;
- }
- void nhap(ngay& p, int A[])
- {
- printf_s("Nhap lan luot ngay thang nam :\n");
- int kt = -1;
- do
- {
- scanf_s("%d%d%d", &p.d, &p.m, &p.y);
- kt = kiemTraTinhHopLe(p, A);
- if (kt == 0)
- {
- printf_s("Khong hop le , hay nhap lai ! :\n");
- }
- } while (kt == 0);
- }
- void xuat(ngay p)
- {
- printf_s("%d/%d/%d\n", p.d, p.m, p.y);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement