Advertisement
AnhVan1712

Ngay

Mar 6th, 2020
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.09 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. struct ngay
  4. {
  5. int d, m, y;
  6. } p;
  7. int kiemTraNamNhuan(int a);
  8. int kiemTraTinhHopLe(ngay p, int A[]);
  9. void nhap(ngay& p, int A[]);
  10. void xuat(ngay p);
  11. void nhap2(int& a);
  12. int ngayThu(ngay p, int A[]);
  13. int saukNgay(ngay& p, int A[], int& k);
  14. int truockNgay(ngay& p, int A[], int& k);
  15. void main()
  16. {
  17. int A[13] = { 31,31,28,31,30,31,30,31,31,30,31,30,31 };
  18. nhap(p, A);
  19. int k;
  20. // int kq=ngayThu (p,A);
  21. //printf ("%d\n",kq);
  22. //xuat (p);
  23. truockNgay(p, A, k);
  24. xuat(p);
  25. }
  26. int truockNgay(ngay& p, int A[], int& k)
  27. {
  28. printf_s("Nhap k :\n");
  29. scanf_s("%d", &k);
  30. int ngay = ngayThu(p,A);
  31. int i, dem=0;
  32. if (k - ngay <= 0)
  33. {
  34. if (k - ngay == 0)
  35. {
  36. p.y = p.y - 1;
  37. p.d = 31;
  38. p.m = 12;
  39. return 1;
  40. }
  41. else
  42. {
  43. if (k - p.d < 0)
  44. {
  45. p.d = p.d - k;
  46. return 1;
  47. }
  48. else
  49. {
  50. k = k - p.d;
  51. while (k > 0)
  52. {
  53. for (i = p.m - 1; i <= 1; i--)
  54. {
  55. k = k - A[i];
  56. if (k < 0)
  57. {
  58. break;
  59. }
  60. }
  61. }
  62. }
  63. p.d = abs(k);
  64. p.m = i;
  65. return 1;
  66. }
  67. }
  68. else
  69. {
  70. dem = dem + 1;
  71. k = k - ngay;
  72. if (kiemTraNamNhuan(p.y - 1) == 1)
  73. {
  74. A[2] = 29;
  75. } else
  76. {
  77. A[2] =28;
  78. }
  79. while (k > 0)
  80. {
  81. for (i = 12; i >= 1; i--)
  82. {
  83. k = k - A[i];
  84. if (k <= 0)
  85. {
  86. break;
  87. }
  88. }
  89. if (i == 0)
  90. {
  91. dem = dem + 1;
  92. }
  93. }
  94. p.y = p.y - dem;
  95. p.m = i;
  96. p.d = abs(k);
  97. }
  98. return 0;
  99. }
  100. int saukNgay(ngay& p, int A[], int& k)
  101. {
  102. printf_s("Nhap k :\n");
  103. scanf_s("%d", &k);
  104. int a = k;
  105. if (kiemTraNamNhuan(p.y) == 1)
  106. {
  107. A[2] = 29;
  108. }
  109. k = k - (A[p.m] - p.d);
  110. if (k < 0)
  111. {
  112. p.d = p.d + a;
  113. return 0;
  114. }
  115. int dem = 0;
  116. int i, tam;
  117. while (k > 0)
  118. {
  119. for (i = p.m + 1; i <= 12; i++)
  120. {
  121. tam = k;
  122. k = k - A[i];
  123. if (k < 0)
  124. {
  125. break;
  126. }
  127. if (i == 12)
  128. {
  129. if (kiemTraNamNhuan(p.y + 1) == 1)
  130. {
  131. A[2] = 29;
  132. }
  133. dem = dem + 1;
  134. p.m = 0;
  135. }
  136. }
  137. }
  138. p.y = p.y + dem;
  139. p.m = i;
  140. p.d = tam;
  141. return 0;
  142. }
  143. int ngayThu(ngay p, int A[])
  144. {
  145. int kq = 0;
  146. for (int i = 1; i < p.m; i++)
  147. {
  148. kq = kq + A[i];
  149. }
  150. kq = kq + p.d;
  151. return kq;
  152. }
  153. void nhap2(int& a)
  154. {
  155. printf_s("Hay nhap nam :\n");
  156. do
  157. {
  158. scanf_s("%d", &a);
  159. if (a <= 0)
  160. {
  161. printf_s("Khong hop le, hay nhap lai !\n");
  162. }
  163. } while (a <= 0);
  164. }
  165. int kiemTraNamNhuan(int a)
  166. {
  167. if ((a % 400 == 0) || (a % 4 == 0) && (a % 100 != 0))
  168. {
  169. return 1;
  170. }
  171. else
  172. {
  173. return 0;
  174. }
  175. }
  176. int kiemTraTinhHopLe(ngay p, int A[])
  177. {
  178. if ((p.d < 1 || p.d>31) || (p.m < 1 || p.m>12) || (p.y <= 0))
  179. {
  180. return 0;
  181. }
  182. else
  183. {
  184. if (kiemTraNamNhuan(p.y) == 1)
  185. {
  186. A[2]++;
  187. }
  188. if (p.d > A[p.m])
  189. {
  190. return 0;
  191. }
  192. }
  193. return 1;
  194. }
  195. void nhap(ngay& p, int A[])
  196. {
  197. printf_s("Nhap lan luot ngay thang nam :\n");
  198. int kt = -1;
  199. do
  200. {
  201. scanf_s("%d%d%d", &p.d, &p.m, &p.y);
  202. kt = kiemTraTinhHopLe(p, A);
  203. if (kt == 0)
  204. {
  205. printf_s("Khong hop le , hay nhap lai ! :\n");
  206. }
  207. } while (kt == 0);
  208. }
  209. void xuat(ngay p)
  210. {
  211. printf_s("%d/%d/%d\n", p.d, p.m, p.y);
  212. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement