Advertisement
Guest User

Untitled

a guest
Jun 22nd, 2017
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 8.54 KB | None | 0 0
  1. /*
  2.  * File:   UKOL1jelint.c
  3.  * Author: jelint10
  4.  *
  5.  * Created on 19. říjen 2010, 17:45
  6.  */
  7.  
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10.  
  11. /*
  12.  *
  13.  */
  14. enum MONTHS
  15. {
  16.     JANUARY = 1,
  17.     FEBRUARY = 2,
  18.     MARCH = 3,
  19.     APRIL = 4,
  20.     MAY = 5,
  21.     JUNE = 6,
  22.     JULY = 7,
  23.     AUGUST = 8,
  24.     SEPTEMBER = 9,
  25.     OCTOBER = 10,
  26.     NOVEMBER = 11,
  27.     DECEMBER = 12
  28. };
  29.  
  30. int getDaysCount(int month, bool specialYear)
  31. {
  32.     switch (month)
  33.     {
  34.         case JANUARY:
  35.         case MARCH:
  36.         case MAY:
  37.         case JULY:
  38.         case AUGUST:
  39.         case OCTOBER:
  40.         case DECEMBER:
  41.             return 31;
  42.         case FEBRUARY:
  43.         {
  44.             if (specialYear)
  45.                 return 29;
  46.             else
  47.                 return 28;
  48.         }
  49.         default:
  50.             return 30;
  51.     }
  52.     return 0;
  53. }
  54.  
  55. bool isSpecialYear(long long int year)
  56. {
  57.     if (year >= 1584)
  58.     {
  59.         if (!(year % 100) && (year % 400))
  60.             return false;
  61.         else if (!(year % 4000))
  62.             return false;
  63.         else
  64.             return true;
  65.     }
  66.  
  67.     return year % 4 ? false : true;
  68. }
  69.  
  70. void findLowOrHighYear (long long int *requiredYear, long long int higherYear, long long int lowerYear, int division, bool low)
  71. {
  72.     if (low)
  73.     {
  74.         if (division != 4 && lowerYear < 1584)
  75.             lowerYear = 1584;
  76.         if (division != 4 && higherYear < 1584)
  77.             higherYear = 1584;
  78.         for (long long int i  = (lowerYear + 1); i < higherYear; i++)
  79.         {
  80.             if (!(i % division))
  81.             {
  82.                 (*requiredYear) = i;
  83.                 printf("low %d division %d \n", i, division);
  84.                 return;
  85.             }
  86.         }
  87.     }
  88.     else
  89.     {
  90.         if (division != 4 && lowerYear < 1584)
  91.             lowerYear = 1584;
  92.         if (division != 4 && higherYear < 1584)
  93.             higherYear = 1584;
  94.         for (long long int i  = (higherYear - 1); i > lowerYear; i--)
  95.         {
  96.             if (!(i % division))
  97.             {
  98.                 (*requiredYear) = i;
  99.                 printf("high %d division %d \n", i, division);
  100.                 return;
  101.             }
  102.         }
  103.     }
  104. }
  105.  
  106. int main(int argc, char** argv)
  107. {
  108.     int day1 = 0;
  109.     int month1 = 0;
  110.     long long int year1 = 0;
  111.     int day2 = 0;
  112.     int month2 = 0;
  113.     long long int year2 = 0;
  114.  
  115.     int daysYear1 = 0;
  116.     int daysYear2 = 0;
  117.     unsigned long long int totalDays = 0;
  118.  
  119.     long long int low4year = 0;
  120.     long long int low100year = 0;
  121.     long long int low400year = 0;
  122.     long long int low4000year = 0;
  123.  
  124.     long long int high4year = 0;
  125.     long long int high100year = 0;
  126.     long long int high400year = 0;
  127.     long long int high4000year = 0;
  128.  
  129.     printf("%d %d %d %d \n", low4year, low100year, low400year, low4000year);
  130.     printf("%d %d %d %d \n", high4year, high100year, high400year, high4000year);
  131.  
  132.     printf("Zadejte prvni datum - den mesic rok:\n");
  133.  
  134.     if (scanf("%d %d %d", &day1, &month1, &year1) != 3)
  135.     {
  136.         printf("Nespravny vstup.\n");
  137.         return (0);
  138.     }
  139.     printf("Zadejte druhe datum - den mesic rok:\n");
  140.  
  141.     if (scanf("%d %d %d", &day2, &month2, &year2) != 3)
  142.     {
  143.         printf("Nespravny vstup.\n");
  144.         return (0);
  145.     }
  146.     if (year2  < year1)
  147.     {
  148.         printf("tos posral\n");
  149.         return (0);
  150.     }
  151.     else if (year2 == year1 && month2 < month1)
  152.     {
  153.         printf("tos posral\n");
  154.         return (0);
  155.     }
  156.     else if (year2 == year1 && month2 == month1 && day2 < day1)
  157.     {
  158.         printf("tos posral\n");
  159.         return (0);
  160.     }
  161.     else if (year2 == year1 && month2 == month1 && day2 == day1)
  162.     {
  163.         printf("tos posral\n");
  164.         return (0);
  165.     }
  166.     for (int i = 1; i < month1; i++)
  167.         daysYear1 += getDaysCount (i, isSpecialYear(year1));
  168.     printf("%d \n", daysYear1);
  169.     daysYear1 += day1;
  170.     printf("%d \n", daysYear1);
  171.     for (int i = 1; i < month2; i++)
  172.         daysYear2 += getDaysCount (i, isSpecialYear(year2));
  173.     printf("%d \n", daysYear2);
  174.     daysYear2 += day2;
  175.     printf("%d \n", daysYear2);
  176.     /*if (year1 > year2)
  177.     {
  178.         if (isSpecialYear(year2))
  179.             totalDays = 366 - daysYear2;
  180.         else
  181.             totalDays = 365 - daysYear2;
  182.  
  183.         totalDays += daysYear1;
  184.  
  185.         /*for (int i  = (year2 + 1); i < year1; i++)
  186.         {
  187.             if (isSpecialYear(i))
  188.                 totalDays += 366;
  189.             else
  190.                 totalDays += 365;
  191.         }*//*
  192.         printf("%d\n", low4year);
  193.         findLowOrHighYear(&low4year, year1, year2, 4, true);
  194.         findLowOrHighYear(&low100year, year1, year2, 100, true);
  195.         findLowOrHighYear(&low400year, year1, year2, 400, true);
  196.         findLowOrHighYear(&low4000year, year1, year2, 4000, true);
  197.  
  198.         findLowOrHighYear(&high4year, year1, year2, 4, false);
  199.         findLowOrHighYear(&high100year, year1, year2, 100, false);
  200.         findLowOrHighYear(&high400year, year1, year2, 400, false);
  201.         findLowOrHighYear(&high4000year, year1, year2, 4000, false);
  202.         printf("%d\n", low4year);
  203.         totalDays += (year1 - (year2 + 1)) * 365;
  204.         if (high4year && low4year)
  205.             totalDays += (high4year - low4year) / 4;
  206.         if (high100year && low100year)
  207.             totalDays -= (high100year - low100year) / 100;
  208.         if (high100year && low100year)
  209.             totalDays += (high400year - low400year) / 400;
  210.         if (high100year && low100year)
  211.             totalDays -= (high4000year - low4000year) / 4000;
  212.     }
  213.     else */if (year2 > year1)
  214.     {
  215.         if (isSpecialYear(year1))
  216.             totalDays = 366 - daysYear1;
  217.         else
  218.             totalDays = 365 - daysYear1;
  219.         printf("%d \n", totalDays);
  220.         totalDays += daysYear2;
  221.         printf("%d \n", totalDays);
  222.         /*for (int i  = (year1 + 1); i < year2; i++)
  223.         {
  224.             if (isSpecialYear(i))
  225.                 totalDays += 366;
  226.             else
  227.                 totalDays += 365;
  228.         }*/
  229.  
  230.         findLowOrHighYear(&low4year, year2, year1, 4, true);
  231.         findLowOrHighYear(&low100year, year2, year1, 100, true);
  232.         findLowOrHighYear(&low400year, year2, year1, 400, true);
  233.         findLowOrHighYear(&low4000year, year2, year1, 4000, true);
  234.  
  235.         findLowOrHighYear(&high4year, year2, year1, 4, false);
  236.         findLowOrHighYear(&high100year, year2, year1, 100, false);
  237.         findLowOrHighYear(&high400year, year2, year1, 400, false);
  238.         findLowOrHighYear(&high4000year, year2, year1, 4000, false);
  239.  
  240.         totalDays += (year2 - (year1 + 1)) * 365;
  241.         printf("%I64d \n", totalDays);
  242.         if (high4year && low4year && (high4year - low4year))
  243.             totalDays += ((high4year - low4year) / 4) + 1;
  244.         else if (high4year && low4year && !(high4year - low4year))
  245.             totalDays += 1;
  246.         printf("%I64d \n", totalDays);
  247.  
  248.         if (high100year && low100year && (high100year - low100year))
  249.             totalDays -= ((high100year - low100year) / 100) + 1;
  250.         else if (high100year && low100year && !(high100year - low100year))
  251.             totalDays -= 1;
  252.         printf("%I64d \n", totalDays);
  253.  
  254.         if (high400year && low400year && (high400year - low400year))
  255.             totalDays += ((high400year - low400year) / 400) + 1;
  256.         else if (high400year && low400year && !(high400year - low400year))
  257.             totalDays += 1;
  258.         printf("%I64d \n", totalDays);
  259.  
  260.         if (high4000year && low4000year && (high4000year - low4000year))
  261.             totalDays -= ((high4000year - low4000year) / 4000) + 1;
  262.         else if (high4000year && low4000year && !(high4000year - low4000year))
  263.             totalDays -= 1;
  264.         printf("%I64d \n", totalDays);
  265.     }
  266.     else if (year2 == year1)
  267.         totalDays = daysYear2 - daysYear1;
  268.  
  269.     // Sracky s tema dnama co se nepocitaj...
  270.     if (year1 < 1584 && year2 > 1584)
  271.         totalDays -= 10;
  272.     else if (year1 == 1584 && year2 > 1584)
  273.     {
  274.         if (month1 == JANUARY)
  275.         {
  276.             for (int i = day1; i <= day2; i++)
  277.                 if (i >= 7 && i <= 16)
  278.                     totalDays -= 1;
  279.         }
  280.     }
  281.     else if (year1 < 1584 && year2 == 1584)
  282.     {
  283.         if (month2 == JANUARY)
  284.         {
  285.             for (int i = day2; i >= day1; i--)
  286.                 if (i >= 7 && i <= 16)
  287.                     totalDays -= 1;
  288.         }
  289.     }
  290.     else if (year1 == 1584 && year2 == 1584)
  291.     {
  292.         for (int i = daysYear1; i <= daysYear2; i++)
  293.             if (i >= 7 && i <= 16)
  294.                 totalDays -= 1;
  295.     }
  296.     printf("%I64d", totalDays);
  297.  
  298.     return (EXIT_SUCCESS);
  299. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement