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 */
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.