Advertisement
Guest User

Untitled

a guest
Jun 24th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 9.40 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 year % 4 ? false : 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.     if (isSpecialYear(year1))
  140.          printf("Special year.\n");
  141.     if (day1 > getDaysCount(month1, isSpecialYear(year1)) || day1 < 1)
  142.     {
  143.         printf("Nauc se dny v mesici voe.\n");
  144.         return (0);
  145.     }
  146.     if (month1 > 12 || month1 < 1)
  147.     {
  148.         printf("Mas blby mesic.\n");
  149.         return (0);
  150.     }
  151.     if (year1 < 1)
  152.     {
  153.         printf("Posrals rok.\n");
  154.         return (0);
  155.     }
  156.     printf("Zadejte druhe datum - den mesic rok:\n");
  157.  
  158.     if (scanf("%d %d %d", &day2, &month2, &year2) != 3)
  159.     {
  160.         printf("Nespravny vstup.\n");
  161.         return (0);
  162.     }
  163.  
  164.     if (day2 > getDaysCount(month2, isSpecialYear(year2)) || day2 < 1)
  165.     {
  166.         printf("Nauc se dny v mesici voe.\n");
  167.         return (0);
  168.     }
  169.  
  170.     if (month2 > 12 || month2 < 1)
  171.     {
  172.         printf("Mas blby mesic.\n");
  173.         return (0);
  174.     }
  175.     if (year2 < 1)
  176.     {
  177.         printf("Posrals rok.\n");
  178.         return (0);
  179.     }
  180.     if (year2  < year1)
  181.     {
  182.         printf("tos posral\n");
  183.         return (0);
  184.     }
  185.     else if (year2 == year1 && month2 < month1)
  186.     {
  187.         printf("tos posral\n");
  188.         return (0);
  189.     }
  190.     else if (year2 == year1 && month2 == month1 && day2 < day1)
  191.     {
  192.         printf("tos posral\n");
  193.         return (0);
  194.     }
  195.     else if (year2 == year1 && month2 == month1 && day2 == day1)
  196.     {
  197.         printf("Neubehl zadny den.");
  198.         return (0);
  199.     }
  200.     for (int i = 1; i < month1; i++)
  201.         daysYear1 += getDaysCount (i, isSpecialYear(year1));
  202.     printf("%d \n", daysYear1);
  203.     daysYear1 += day1;
  204.     printf("%d \n", daysYear1);
  205.     for (int i = 1; i < month2; i++)
  206.         daysYear2 += getDaysCount (i, isSpecialYear(year2));
  207.     printf("%d \n", daysYear2);
  208.     daysYear2 += day2;
  209.     printf("%d \n", daysYear2);
  210.     /*if (year1 > year2)
  211.     {
  212.         if (isSpecialYear(year2))
  213.             totalDays = 366 - daysYear2;
  214.         else
  215.             totalDays = 365 - daysYear2;
  216.  
  217.         totalDays += daysYear1;
  218.  
  219.         /*for (int i  = (year2 + 1); i < year1; i++)
  220.         {
  221.             if (isSpecialYear(i))
  222.                 totalDays += 366;
  223.             else
  224.                 totalDays += 365;
  225.         }*//*
  226.         printf("%d\n", low4year);
  227.         findLowOrHighYear(&low4year, year1, year2, 4, true);
  228.         findLowOrHighYear(&low100year, year1, year2, 100, true);
  229.         findLowOrHighYear(&low400year, year1, year2, 400, true);
  230.         findLowOrHighYear(&low4000year, year1, year2, 4000, true);
  231.  
  232.         findLowOrHighYear(&high4year, year1, year2, 4, false);
  233.         findLowOrHighYear(&high100year, year1, year2, 100, false);
  234.         findLowOrHighYear(&high400year, year1, year2, 400, false);
  235.         findLowOrHighYear(&high4000year, year1, year2, 4000, false);
  236.         printf("%d\n", low4year);
  237.         totalDays += (year1 - (year2 + 1)) * 365;
  238.         if (high4year && low4year)
  239.             totalDays += (high4year - low4year) / 4;
  240.         if (high100year && low100year)
  241.             totalDays -= (high100year - low100year) / 100;
  242.         if (high100year && low100year)
  243.             totalDays += (high400year - low400year) / 400;
  244.         if (high100year && low100year)
  245.             totalDays -= (high4000year - low4000year) / 4000;
  246.     }
  247.     else */if (year2 > year1)
  248.     {
  249.         if (isSpecialYear(year1))
  250.             totalDays = 366 - daysYear1;
  251.         else
  252.             totalDays = 365 - daysYear1;
  253.         printf("%d \n", totalDays);
  254.         totalDays += daysYear2;
  255.         printf("%d \n", totalDays);
  256.         /*for (int i  = (year1 + 1); i < year2; i++)
  257.         {
  258.             if (isSpecialYear(i))
  259.                 totalDays += 366;
  260.             else
  261.                 totalDays += 365;
  262.         }*/
  263.  
  264.         findLowOrHighYear(&low4year, year2, year1, 4, true);
  265.         findLowOrHighYear(&low100year, year2, year1, 100, true);
  266.         findLowOrHighYear(&low400year, year2, year1, 400, true);
  267.         findLowOrHighYear(&low4000year, year2, year1, 4000, true);
  268.  
  269.         findLowOrHighYear(&high4year, year2, year1, 4, false);
  270.         findLowOrHighYear(&high100year, year2, year1, 100, false);
  271.         findLowOrHighYear(&high400year, year2, year1, 400, false);
  272.         findLowOrHighYear(&high4000year, year2, year1, 4000, false);
  273.  
  274.         totalDays += (year2 - (year1 + 1)) * 365;
  275.         printf("%I64d \n", totalDays);
  276.         if (high4year && low4year && (high4year - low4year))
  277.             totalDays += ((high4year - low4year) / 4) + 1;
  278.         else if (high4year && low4year && !(high4year - low4year))
  279.             totalDays += 1;
  280.         printf("%I64d \n", totalDays);
  281.  
  282.         if (high100year && low100year && (high100year - low100year))
  283.             totalDays -= ((high100year - low100year) / 100) + 1;
  284.         else if (high100year && low100year && !(high100year - low100year))
  285.             totalDays -= 1;
  286.         printf("%I64d \n", totalDays);
  287.  
  288.         if (high400year && low400year && (high400year - low400year))
  289.             totalDays += ((high400year - low400year) / 400) + 1;
  290.         else if (high400year && low400year && !(high400year - low400year))
  291.             totalDays += 1;
  292.         printf("%I64d \n", totalDays);
  293.  
  294.         if (high4000year && low4000year && (high4000year - low4000year))
  295.             totalDays -= ((high4000year - low4000year) / 4000) + 1;
  296.         else if (high4000year && low4000year && !(high4000year - low4000year))
  297.             totalDays -= 1;
  298.         printf("%I64d \n", totalDays);
  299.     }
  300.     else if (year2 == year1)
  301.         totalDays = daysYear2 - daysYear1;
  302.  
  303.     // Sracky s tema dnama co se nepocitaj...
  304.     if (year1 < 1584 && year2 > 1584)
  305.         totalDays -= 10;
  306.     else if (year1 == 1584 && year2 > 1584)
  307.     {
  308.         if (month1 == JANUARY)
  309.         {
  310.             for (int i = day1; i <= 16; i++)
  311.                 if (i >= 7)
  312.                     totalDays -= 1;
  313.         }
  314.     }
  315.     else if (year1 < 1584 && year2 == 1584)
  316.     {
  317.         if (month2 == JANUARY)
  318.         {
  319.             for (int i = day2; i >= 7; i--)
  320.                 if (i <= 16)
  321.                     totalDays -= 1;
  322.         }
  323.         else
  324.             totalDays -= 10;
  325.     }
  326.     else if (year1 == 1584 && year2 == 1584)
  327.     {
  328.         for (int i = daysYear1; i <= daysYear2; i++)
  329.             if (i >= 7 && i <= 16)
  330.                 totalDays -= 1;
  331.     }
  332.     printf("Ubehlo: %I64d", totalDays);
  333.  
  334.     return (EXIT_SUCCESS);
  335. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement