-
Calendar Problem
I have to write a function which takes in a year between 1900 and 1999 and returns as a number the first day of that year. Days of the week go from 0 - 6 ( Sunday = 0, Saturday = 6).
I am supposed to use a leap year test to make this function work. I am also meant to make use of the fact that 1/1/1900 was a Monday. At the moment the program returns the correct value for the year 1900, but for every other year i enter i get "9" which is an invalid value. Any help??
Here is my code so far:
Code:
# include <stdio.h>
int new_years_day(int day, int year);
int no_of_days(int months, int year);
int first_day(int day, int year, int months);
int main(void)
{
int choice, day = 0, months = 0, year = 0;
printf("Choose a function\n (1) new_years_day (2) no_of_days (3) first_day >> ");
scanf("%d", &choice);
if (choice == 1)
new_years_day(day, year);
else if (choice == 2)
no_of_days(months, year);
else if (choice == 3)
first_day(day, year, months);
else
{
printf("\nPlease enter a number between 1 and 3 >> ");
scanf("%d", &choice);
}
return 0;
}
int new_years_day(int day, int year)
{
int i = 0, leap = 0;
// ask user for year between 1900 and 1999
printf("Enter a year between 1900 and 1999 >> ");
scanf("%d", &year);
// check that user enters a valid year
while (year < 1900 || year > 1999)
{
// print error message
printf("You can only choose a year between 1900 and 1999!! >> ");
scanf("%d", &year);
}
for ( i = day; day <= 6; day++)
/* Problem: need to count no. of years after 1900 and loop between 0 and 6
the right number of times to get the right day */
// leap year check
while ((year % 400 == 0) && (year % 4 == 0) && (year % 100 > 0))
leap = 1; // is a leap year
// find correct day
if (year == 1900)
{
day = 1;
printf("\nThe first day of the year in %d was a %d (0 - Sunday, 6 - Saturday)\n", year, day);
}
else if (leap = 1)
{
day = day + 2;
printf("\nThe first day of the year in %d was a %d (0 - Sunday, 6 - Saturday)\n", year, day);
}
else if (leap = 0)
{
day++;
printf("\nThe first day of the year in %d was a %d (0 - Sunday, 6 - Saturday)\n", year, day);
}
return year, day;
}
int no_of_days(int months, int year)
{
int i, current, leap = 0;
// ask user for year between 1900 and 1999
printf("Enter a year between 1900 and 1999 >> ");
scanf("%d", &year);
// check that user enters a valid year
while (year < 1900 || year > 1999)
{
// print error message
printf("You can only choose a year between 1900 and 1999!! >> ");
scanf("%d", &year);
}
// ask user for a month between 1 and 12
printf("Enter a month between 1 and 12 >> ");
scanf("%d", &months);
// check that user enters a valid month
while (months < 1 || months > 12)
{
// print error message
printf("You can only choose a month between 1 and 12!! >> ");
scanf("%d", &months);
}
return months, year;
}
int first_day(int day, int year, int months)
{
int i, current, leap = 0;
// ask user for year between 1900 and 1999
printf("Enter a year between 1900 and 1999 >> ");
scanf("%d", &year);
// check that user enters a valid year
while (year < 1900 || year > 1999)
{
// print error message
printf("You can only choose a year between 1900 and 1999!! >> ");
scanf("%d", &year);
}
// ask user for a month between 1 and 12
printf("Enter a month between 1 and 12 >> ");
scanf("%d", &months);
// check that user enters a valid month
while (months <1 || months >12)
{
// print error message
printf("You can only choose a month between 1 and 12!! >> ");
scanf("%d", &months);
}
return day, year, months;
}
-
Firstly, you cannot return multiple values from functions. You only have one function that does something, namely new_years_day. The other two functions just accept user-input but they don't do anything.
-
Sorry bout the confusion but the other 2 functions are meant to be there cos i still have to build them yet. It's just that i'm stuck on the 1st function (new_years_day). Should I just have (return 0) at the bottom then instead of (return year, day), for example ??
-
Declare the function like this :
void new_years_day(int day, int year);
then you don't have to return anything.
-
Ok, thanks. So anybody got any ideas as to how i can make this function work then?
Code:
void new_years_day(int day, int year)
{
int i = 0, leap = 0;
// ask user for year between 1900 and 1999
printf("Enter a year between 1900 and 1999 >> ");
scanf("%d", &year);
// check that user enters a valid year
while (year < 1900 || year > 1999)
{
// print error message
printf("You can only choose a year between 1900 and 1999!! >> ");
scanf("%d", &year);
}
for ( i = day; day <= 6; day++)
/* Problem: need to count no. of years after 1900 and loop between 0 and 6
the right number of times to get the right day */
// leap year check
while ((year % 400 == 0) && (year % 4 == 0) && (year % 100 > 0))
leap = 1; // is a leap year
// find correct day
if (year == 1900)
{
day = 1;
printf("\nThe first day of the year in %d was a %d (0 - Sunday, 6 - Saturday)\n", year, day);
}
else if (leap = 1)
{
day = day + 2;
printf("\nThe first day of the year in %d was a %d (0 - Sunday, 6 - Saturday)\n", year, day);
}
else if (leap = 0)
{
day++;
printf("\nThe first day of the year in %d was a %d (0 - Sunday, 6 - Saturday)\n", year, day);
}
}
-
-
Yeah, I've tried that but it makes very little difference. What I really need is a little help with the logic of how to actually code the solution. I know what I want to do, I just can't figure it out in terms of code or logical steps.
-
Cheers appreciate the help :D