All pastes #352743 Raw Edit

Unnamed

public text v1 · immutable
·published 2007-02-13 00:14 UTC
rendered paste body
#include <stdio.h>

int main()
{
int day1, month1, year1, day2, month2, year2, result;
int evaluate = 0;
char var1, var2, c;

/* Define Functions */
int verify_date(int day, int month, int year, char var1, char var2); /* Verifys if date input is correct */
int february(int year); /* identifys how many days are on February */
int difference(int day1, int month1, int year1, int day2, int month2, int year2); /* Calculates the difference between two dates */

/* Main Program */
   do
   {
      fprintf(stderr, "Insert first Date: (e.g. <day>/<month>/<year> or <day>-<month>-<year>)\n");
      scanf("%i%c%i%c%i", &day1, &var1, &month1, &var2, &year1);
      for (c = getchar(); c!= '\n'; c = getchar() );
      evaluate = verify_date(day1, month1, year1, var1, var2);
   }   while (!evaluate);

   do
   {
      fprintf(stderr, "Insert second Date: (e.g. <day>/<month>/<year> or <day>-<month>-<year>)\n");
      scanf("%i%c%i%c%i", &day2, &var1, &month2, &var2, &year2);
      for (c = getchar(); c!= '\n'; c = getchar() );
      evaluate = verify_date(day2, month2, year2, var1, var2);
   }   while (!evaluate);

   result = difference(day1, month1, year1, day2, month2, year2);
   printf("%i\n", result);
   return 0;
/* End of Main Program */
}

/* VERIFICAR MES DE FEVEREIRO */

/* Functions */

int verify_date(int day, int month, int year, char var1, char var2) /* Verify if an illegal date is entered */
{
   int evaluate1, evaluate2, y;

   if ((var1 == '/' || var1 == '-') && (var2 == '/' || var2 == '-'))
   {

      if (month > 0 && month < 13) /* 1 <= month <= 12 */
      {
         if (month == 4 || month == 6 || month == 9 || month == 11) /* Months with 30 days */
         {
            if (day < 1 || day > 30) /* 1 <= day <= 30 */
            {
               fprintf(stderr, "NOT standard output");
               evaluate1 = 0;
            }
            else
               evaluate1 = 1;
         }
         if (month == 2) /* February, month with 28 days */
         {
            if (year % 4 == 0)
               y = 29;
            else
               y = 28;
            if (day < 1 || day > y)
            {
               fprintf(stderr, "NOT standard output");
               evaluate1 = 0;
            }
            else
               evaluate1 = 1;
         }
         else /* Months with 31 days */
         {
            if (day < 1 || day > 31) /* 1 <= day <= 31 */
            {
               fprintf(stderr, "NOT standard output");
               evaluate1 = 0;
            }
            else
               evaluate1 = 1;
         }
      }
      else 
      {
         fprintf(stderr, "NOT standard output");
         evaluate1 = 0;
      }
      
      if (year > 0 && year < 10000) /* 1 <= year <= 9999 */
         evaluate2 = 1;
      else
      {
         fprintf(stderr, "NOT standard output");
         evaluate2 = 0;
      }
   
      if (evaluate1 == 1 && evaluate2 == 1)
         return 1;
      else
         return 0;
   }
   else
      return 0;
}

int difference(int day1, int month1, int year1, int day2, int month2, int year2)
{
   int dif_years, ys, ye, dif_months, ms, me, dif_days, ds, de;
       /* ys = year_start, ye = year_end, ms = month_start, me = month_end, ds = day_start, de = day_end */
   int months[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
   int days = 0;
   int m, y;

   dif_years = year1 - year2;
   if (dif_years > 0)   {   
      ys = year2;
      ms = month2;
      ds = day2;
      ye = year1;
      me = month1;
      de = day1;
   }
   if (dif_years < 0)   {
      ys = year1;
      ms = month1;
      ds = day1;
      ye = year2;
      me = month2;
      de = day2;
   }
   else   {
      dif_months = month1 - month2;
      if (dif_months > 0)   {
         ys = year2;
         ms = month2;
         ds = day2;
         ye = year1;
         me = month1;
         de = day1;
      }
      if (dif_months < 0)   {
         ys = year1;
         ms = month1;
         ds = day1;
         ye = year2;
         me = month2;
         de = day2;
      }
      else   {   /* dif_months = 0 */
         dif_days = day1 - day2;
         if (dif_days > 0)   {
            ys = year2;
            ms = month2;
            ds = day2;
            ye = year1;
            me = month1;
            de = day1;
         }
         if (dif_days < 0)   {
            ys = year1;
            ms = month1;
            ds = day1;
            ye = year2;
            me = month2;
            de = day2;
         }
         else
            return 0;
      }
   }

   if (dif_years > 0 || dif_years < 0)   {
      months[1] = february(ys);
      days += months[ms-1] - ds;
      m = ms;
      while (m < 12)   {
         days += months[m];
         ++m;
      }
      y = ys + 1;
      while (y < ye)   {
         months[1] = february(y);
         m = 0;
         while (m < 12)   {
            days += months[m];
            ++m;
         }
      }
      months[1] = february(ye);
      m = 0;
      while (m < me)   {
         days += months[m];
         ++m;
      }
      days += de;
   }
   else   {
      months[1] = february(ys);
      days += months[ms-1] - ds;
      m = ms;
      while (m < me)   {
         days += months[m];
         ++m;
      }
      days += de;
   }
   if (dif_years > 0 || (dif_years == 0 && dif_months > 0) || (dif_years == 0 && dif_months == 0 && dif_days > 0))
      return -days;
   else
      return days;
}

int february(int year)
{
   int root;

   root = year % 4;
   if (root == 0)
      return 29;
   else
      return 28;
}