Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

x.Hming to write a program in C with a main function and five other functions: i

ID: 3618403 • Letter: X

Question

x.Hming to write a program in C with a main function and five other functions: input, output, calculate day of year for a calendar date, calculate calendar date from day of year and year, and determine if its a leap year function. I have a problem with calendar date from day of year and year function. I get the day of year and the year in the out put but I can't get the day and the month right.

This is the input:
5 4 1987
2 22 2004
8 9 2000
2 29 1900
3 2 2001
1 8 1999
9 31 2001
9 30 201
12 31 2004
22 9 2000
2 29 2000

and this should be the output:
Day of Year     Calendar Date
    124          05/04/1987
     53          02/22/2004
    222          08/09/2000
     61          03/02/2001
      8          01/08/1999
    366          12/31/2004
     60          02/29/2000

but i get this as an output:
Day of Year     Calendar Date
   124           2/ 2/1987
    53           2/ 2/2004
   222           2/ 2/2000
    61           2/ 2/2001
     8           2/ 2/1999
   366           2/ 2/2004
Press any key to continue . . .

This is teh C code I have for the program. The function I have problem with is calculateCalendarDate


#include <stdio.h>
#include <stdlib.h>
#define MONTHS 13
#define MAX_ELEMS 100

int main (void)
{
// Function Declarations
   int getCalendarDates ( int daysOfMonth [], int daysArray [], int yearsArray [] );
   void writeResults ( int daysArray [], int yearsArray [], int daysOfMonth [], int numElems );
   int convertDateToDayOfYear ( int daysOfMonth [], int month, int day, int year );
   void calculateCalendarDate ( int daysOfMonth [], int dayOfYear, int year, int *month, int *day );
   int determineLeapYear ( int year );
     
  
// Local Definitions
   int daysOfMonth [MONTHS] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
   int daysArray [MAX_ELEMS];
   int yearsArray [MAX_ELEMS];
   FILE *fpInput; /* input textfile variable */
   FILE *fpOutput; /* output textfile variable */
   int numElems; /* number of elements read into array */
   int i;

   int dayOfYear;

     
// Statements
   numElems = getCalendarDates ( daysOfMonth, daysArray, yearsArray );  

   writeResults ( daysArray, yearsArray, daysOfMonth, numElems );

   system("pause");
   return 0;
}



int getCalendarDates ( int daysOfMonth [], int daysArray [], int yearsArray [] )
{
//   Local Declarations
   int day;
   int month;
   int year;
   int dayOfYear;
   int i = 0;
   FILE*fpInput;

//   Statements
   if (!(fpInput = fopen ("Prog1-TestIn1.txt", "r")))
     
       printf("Error opening file "), exit (100);

   while (fscanf(fpInput, "%d %d %d", &month, &day, &year) != EOF && i < MAX_ELEMS )
       {
        dayOfYear = convertDateToDayOfYear ( daysOfMonth, month, day, year );
        if(dayOfYear != -1)
        {
                   // store in arrays      
                   yearsArray[i] = year;
                   daysArray [i] = dayOfYear;
                   i++;    
        }
        }
      
      
   return i;
}   // getData

void writeResults ( int daysArray [], int yearsArray [], int daysOfMonth [], int numElems )
{
    int i;
    int dayOfYear;
    int month;
    int day;
    int year;

    printf("Day of Year Calendar Date ");
    for (i=0; i < numElems; i++)
    {
    printf("%6d ", daysArray [i]);
    calculateCalendarDate ( daysOfMonth, dayOfYear, year, &month, &day );
  
    printf("%2d/%2d/%4d ", month, day, yearsArray [i]);
    }
}


int convertDateToDayOfYear ( int daysOfMonth [], int month, int day, int year )
{
    int i;
    int sum;
    int dayOfYear;
          
   if( month >= 1 && month <= 12 && day >= 1 && day <= daysOfMonth [month] && year > 1000 && year < 9999 )
       if( determineLeapYear ( year ) == 1 && month > 2 || day > 28 )
            for( i=0, sum=0; i < month; i++ )
                {
                   sum += daysOfMonth [i];
                   dayOfYear = sum + day + 1;
                }
       else
            for( i=0, sum=0; i &

Explanation / Answer

#include<stdio.h>
#include <stdlib.h>

#include<iostream.h>
#define MONTHS 12
#define MAX_ELEMS 100
int getCalendarDates ( int daysOfMonth [], int daysArray[],int yearsArray [] );
   void writeResults ( int daysArray [], int yearsArray[],int daysOfMonth [], int numElems );
   int convertDateToDayOfYear ( int daysOfMonth [], intmonth,int day, int year );
   void calculateCalendarDate ( int daysOfMonth [], intdayOfYear,int year, int *month, int *day );
   int determineLeapYear ( int year );
      
int main (void)
{
// Function Declarations

   
// Local Definitions
   int daysOfMonth [MONTHS] ={31,28,31,30,31,30,31,31,30,31,30,31};
   int daysArray [MAX_ELEMS];
   int yearsArray [MAX_ELEMS];
   FILE *fpInput; /* input textfile variable */
   FILE *fpOutput; /* output textfile variable */
   int numElems; /* number of elements read into array*/
   int i;
   int dayOfYear;
       
// Statements
   numElems = getCalendarDates ( daysOfMonth, daysArray,yearsArray );   
   writeResults ( daysArray, yearsArray, daysOfMonth,numElems );

  system("pause");
   return 0;
}


  
int getCalendarDates ( int daysOfMonth [], int daysArray [], intyearsArray [] )
{
//    Local Declarations
    int day;
    int month;
    int year;
    int dayOfYear;
    int i = 0;
    FILE*fpInput;

//   Statements
    //if (!(fpInput = fopen ("Prog1-TestIn1.txt","r")))
     if (!(fpInput = fopen ("input.txt","r")))
       printf("Error openingfile "), exit (100);

    while(fscanf(fpInput, "%d %d %d", &month, &day, &year) !=EOF && i < MAX_ELEMS )
       {
        dayOfYear =convertDateToDayOfYear( daysOfMonth, month, day, year );
        if(dayOfYear != -1)
        {
                  // store in arrays       
                  yearsArray[i] = year;  
                  daysArray [i] = dayOfYear;
                  i++;     
        }
        }
       
       
    return i;
}    // getData

void writeResults ( intdaysArray [], int yearsArray [], int daysOfMonth [], int numElems)
{
    int i;
    int dayOfYear;
    int month;
    int day;
    int year;

   printf("Day of Year Calendar Date ");
    for (i=0; i < numElems; i++)
    {
    printf("%6d ", daysArray [i]);
   calculateCalendarDate(daysOfMonth, daysArray[i],yearsArray[i], &month, &day );
   
    printf("%02d/%02d/%4d ", month, day, yearsArray[i]);
    }
}


int convertDateToDayOfYear ( int daysOfMonth [], int month, intday, int year )

{

int i;

int sum;

int dayOfYear;

int leap=determineLeapYear( year );

if( month >= 1&& month <= 12 && day >= 1 && day<= daysOfMonth [month-1]+leap && year > 1000&& year < 9999 )
{
   for( i=0, sum=0; i < month-1; i++ )
       {
        if(leap==1&&i==1)
                sum++;
        sum += daysOfMonth[i];
         }
    dayOfYear = sum + day;
return dayOfYear;
}
else

return -1;

}


void calculateCalendarDate ( int daysOfMonth [], int dayOfYear, intyear, int *month, int *day )
{
int daysinmonth;
int i;
int sum;
int daysin;
           
               for (i = 1; i < 13; i++)
               {
                       if (dayOfYear <= (daysinmonth = daysOfMonth[i - 1] + (i == 2&& determineLeapYear(year))))
                               break;
                       dayOfYear -= daysinmonth;
               }
               *month = i;
               *day = dayOfYear;
            return ;
           }


int determineLeapYear ( int year )
{
    if( (year % 4 == 0 && year % 100 != 0)|| year % 400 == 0 )
        return 1; /* a leap yaer*/
    else
        return 0; /* not a leapyear */
}