Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * File: UKOL1jelint.c
- * Author: jelint10
- *
- * Created on 19. říjen 2010, 17:45
- */
- #include <stdio.h>
- #include <stdlib.h>
- /*
- *
- */
- enum MONTHS
- {
- JANUARY = 1,
- FEBRUARY = 2,
- MARCH = 3,
- APRIL = 4,
- MAY = 5,
- JUNE = 6,
- JULY = 7,
- AUGUST = 8,
- SEPTEMBER = 9,
- OCTOBER = 10,
- NOVEMBER = 11,
- DECEMBER = 12
- };
- int getDaysCount(int month, bool specialYear)
- {
- switch (month)
- {
- case JANUARY:
- case MARCH:
- case MAY:
- case JULY:
- case AUGUST:
- case OCTOBER:
- case DECEMBER:
- return 31;
- case FEBRUARY:
- {
- if (specialYear)
- return 29;
- else
- return 28;
- }
- default:
- return 30;
- }
- return 0;
- }
- bool isSpecialYear(long long int year)
- {
- if (year >= 1584)
- {
- if (!(year % 100) && (year % 400))
- return false;
- else if (!(year % 4000))
- return false;
- else
- return true;
- }
- return year % 4 ? false : true;
- }
- void findLowOrHighYear (long long int *requiredYear, long long int higherYear, long long int lowerYear, int division, bool low)
- {
- if (low)
- {
- if (division != 4 && lowerYear < 1584)
- lowerYear = 1584;
- if (division != 4 && higherYear < 1584)
- higherYear = 1584;
- for (long long int i = (lowerYear + 1); i < higherYear; i++)
- {
- if (!(i % division))
- {
- (*requiredYear) = i;
- printf("low %d division %d \n", i, division);
- return;
- }
- }
- }
- else
- {
- if (division != 4 && lowerYear < 1584)
- lowerYear = 1584;
- if (division != 4 && higherYear < 1584)
- higherYear = 1584;
- for (long long int i = (higherYear - 1); i > lowerYear; i--)
- {
- if (!(i % division))
- {
- (*requiredYear) = i;
- printf("high %d division %d \n", i, division);
- return;
- }
- }
- }
- }
- int main(int argc, char** argv)
- {
- int day1 = 0;
- int month1 = 0;
- long long int year1 = 0;
- int day2 = 0;
- int month2 = 0;
- long long int year2 = 0;
- int daysYear1 = 0;
- int daysYear2 = 0;
- unsigned long long int totalDays = 0;
- long long int low4year = 0;
- long long int low100year = 0;
- long long int low400year = 0;
- long long int low4000year = 0;
- long long int high4year = 0;
- long long int high100year = 0;
- long long int high400year = 0;
- long long int high4000year = 0;
- printf("%d %d %d %d \n", low4year, low100year, low400year, low4000year);
- printf("%d %d %d %d \n", high4year, high100year, high400year, high4000year);
- printf("Zadejte prvni datum - den mesic rok:\n");
- if (scanf("%d %d %d", &day1, &month1, &year1) != 3)
- {
- printf("Nespravny vstup.\n");
- return (0);
- }
- printf("Zadejte druhe datum - den mesic rok:\n");
- if (scanf("%d %d %d", &day2, &month2, &year2) != 3)
- {
- printf("Nespravny vstup.\n");
- return (0);
- }
- if (year2 < year1)
- {
- printf("tos posral\n");
- return (0);
- }
- else if (year2 == year1 && month2 < month1)
- {
- printf("tos posral\n");
- return (0);
- }
- else if (year2 == year1 && month2 == month1 && day2 < day1)
- {
- printf("tos posral\n");
- return (0);
- }
- else if (year2 == year1 && month2 == month1 && day2 == day1)
- {
- printf("tos posral\n");
- return (0);
- }
- for (int i = 1; i < month1; i++)
- daysYear1 += getDaysCount (i, isSpecialYear(year1));
- printf("%d \n", daysYear1);
- daysYear1 += day1;
- printf("%d \n", daysYear1);
- for (int i = 1; i < month2; i++)
- daysYear2 += getDaysCount (i, isSpecialYear(year2));
- printf("%d \n", daysYear2);
- daysYear2 += day2;
- printf("%d \n", daysYear2);
- /*if (year1 > year2)
- {
- if (isSpecialYear(year2))
- totalDays = 366 - daysYear2;
- else
- totalDays = 365 - daysYear2;
- totalDays += daysYear1;
- /*for (int i = (year2 + 1); i < year1; i++)
- {
- if (isSpecialYear(i))
- totalDays += 366;
- else
- totalDays += 365;
- }*//*
- printf("%d\n", low4year);
- findLowOrHighYear(&low4year, year1, year2, 4, true);
- findLowOrHighYear(&low100year, year1, year2, 100, true);
- findLowOrHighYear(&low400year, year1, year2, 400, true);
- findLowOrHighYear(&low4000year, year1, year2, 4000, true);
- findLowOrHighYear(&high4year, year1, year2, 4, false);
- findLowOrHighYear(&high100year, year1, year2, 100, false);
- findLowOrHighYear(&high400year, year1, year2, 400, false);
- findLowOrHighYear(&high4000year, year1, year2, 4000, false);
- printf("%d\n", low4year);
- totalDays += (year1 - (year2 + 1)) * 365;
- if (high4year && low4year)
- totalDays += (high4year - low4year) / 4;
- if (high100year && low100year)
- totalDays -= (high100year - low100year) / 100;
- if (high100year && low100year)
- totalDays += (high400year - low400year) / 400;
- if (high100year && low100year)
- totalDays -= (high4000year - low4000year) / 4000;
- }
- else */if (year2 > year1)
- {
- if (isSpecialYear(year1))
- totalDays = 366 - daysYear1;
- else
- totalDays = 365 - daysYear1;
- printf("%d \n", totalDays);
- totalDays += daysYear2;
- printf("%d \n", totalDays);
- /*for (int i = (year1 + 1); i < year2; i++)
- {
- if (isSpecialYear(i))
- totalDays += 366;
- else
- totalDays += 365;
- }*/
- findLowOrHighYear(&low4year, year2, year1, 4, true);
- findLowOrHighYear(&low100year, year2, year1, 100, true);
- findLowOrHighYear(&low400year, year2, year1, 400, true);
- findLowOrHighYear(&low4000year, year2, year1, 4000, true);
- findLowOrHighYear(&high4year, year2, year1, 4, false);
- findLowOrHighYear(&high100year, year2, year1, 100, false);
- findLowOrHighYear(&high400year, year2, year1, 400, false);
- findLowOrHighYear(&high4000year, year2, year1, 4000, false);
- totalDays += (year2 - (year1 + 1)) * 365;
- printf("%I64d \n", totalDays);
- if (high4year && low4year && (high4year - low4year))
- totalDays += ((high4year - low4year) / 4) + 1;
- else if (high4year && low4year && !(high4year - low4year))
- totalDays += 1;
- printf("%I64d \n", totalDays);
- if (high100year && low100year && (high100year - low100year))
- totalDays -= ((high100year - low100year) / 100) + 1;
- else if (high100year && low100year && !(high100year - low100year))
- totalDays -= 1;
- printf("%I64d \n", totalDays);
- if (high400year && low400year && (high400year - low400year))
- totalDays += ((high400year - low400year) / 400) + 1;
- else if (high400year && low400year && !(high400year - low400year))
- totalDays += 1;
- printf("%I64d \n", totalDays);
- if (high4000year && low4000year && (high4000year - low4000year))
- totalDays -= ((high4000year - low4000year) / 4000) + 1;
- else if (high4000year && low4000year && !(high4000year - low4000year))
- totalDays -= 1;
- printf("%I64d \n", totalDays);
- }
- else if (year2 == year1)
- totalDays = daysYear2 - daysYear1;
- // Sracky s tema dnama co se nepocitaj...
- if (year1 < 1584 && year2 > 1584)
- totalDays -= 10;
- else if (year1 == 1584 && year2 > 1584)
- {
- if (month1 == JANUARY)
- {
- for (int i = day1; i <= day2; i++)
- if (i >= 7 && i <= 16)
- totalDays -= 1;
- }
- }
- else if (year1 < 1584 && year2 == 1584)
- {
- if (month2 == JANUARY)
- {
- for (int i = day2; i >= day1; i--)
- if (i >= 7 && i <= 16)
- totalDays -= 1;
- }
- }
- else if (year1 == 1584 && year2 == 1584)
- {
- for (int i = daysYear1; i <= daysYear2; i++)
- if (i >= 7 && i <= 16)
- totalDays -= 1;
- }
- printf("%I64d", totalDays);
- return (EXIT_SUCCESS);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement