* A Calendar app on C
@ 2004-06-02 5:58 Fabio Miranda Hamburger
2004-06-02 7:10 ` Christian Beckel
2004-06-02 10:07 ` Glynn Clements
0 siblings, 2 replies; 6+ messages in thread
From: Fabio Miranda Hamburger @ 2004-06-02 5:58 UTC (permalink / raw)
To: linux-c-programming
Hi.
I am trying to program a basic calendar software in C. The idea is to ask
for a year and display all the calendar from january to december. How to
code such app taking care of 31/28 days month and check each 4 year for a
leap year? Any idea/comment/advice/code is welcome.
best regards,
---
Fabio Andres Miranda
Ingenieria de sistemas informaticos
Universidad Latina - Costa Rica
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: A Calendar app on C
2004-06-02 5:58 A Calendar app on C Fabio Miranda Hamburger
@ 2004-06-02 7:10 ` Christian Beckel
2004-06-02 7:17 ` Christian Beckel
2004-06-02 10:07 ` Glynn Clements
1 sibling, 1 reply; 6+ messages in thread
From: Christian Beckel @ 2004-06-02 7:10 UTC (permalink / raw)
To: linux-c-programming
Hi,
there are several possibilities to compute the number of days in a month or if
there is a leap or not.
if (i == 2)
days = 28;
else
days = 31 - ( (i != 4 || i != 6 || i != 9 || i != 11) ? 1 : 0 );
I think there is no simpler way, because the numbers of months are unregular.
> Hi.
>
> I am trying to program a basic calendar software in C. The idea is to ask
> for a year and display all the calendar from january to december. How to
> code such app taking care of 31/28 days month and check each 4 year for a
> leap year? Any idea/comment/advice/code is welcome.
>
>
> best regards,
>
> ---
> Fabio Andres Miranda
> Ingenieria de sistemas informaticos
> Universidad Latina - Costa Rica
>
> -
> To unsubscribe from this list: send the line "unsubscribe
> linux-c-programming" in the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: A Calendar app on C
2004-06-02 7:10 ` Christian Beckel
@ 2004-06-02 7:17 ` Christian Beckel
2004-06-02 9:18 ` John T. Williams
0 siblings, 1 reply; 6+ messages in thread
From: Christian Beckel @ 2004-06-02 7:17 UTC (permalink / raw)
To: linux-c-programming
oops, I forgot to test if there is a leap or not, the first line should be:
if (i == 2)
days = (i % 4 != 0) ? 28 : 29;
> Hi,
>
> there are several possibilities to compute the number of days in a month or
> if there is a leap or not.
>
> if (i == 2)
> days = 28;
> else
> days = 31 - ( (i != 4 || i != 6 || i != 9 || i != 11) ? 1 : 0 );
>
> I think there is no simpler way, because the numbers of months are
> unregular.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: A Calendar app on C
2004-06-02 7:17 ` Christian Beckel
@ 2004-06-02 9:18 ` John T. Williams
2004-06-02 10:38 ` wwp
0 siblings, 1 reply; 6+ messages in thread
From: John T. Williams @ 2004-06-02 9:18 UTC (permalink / raw)
To: linux-c-programming
isn't there some rule about if the year is year%100=0 then is has to
also be yea%400 to be a leap year?
On Wed, 2004-06-02 at 03:17, Christian Beckel wrote:
> oops, I forgot to test if there is a leap or not, the first line should be:
>
> if (i == 2)
> days = (i % 4 != 0) ? 28 : 29;
>
>
> > Hi,
> >
> > there are several possibilities to compute the number of days in a month or
> > if there is a leap or not.
> >
> > if (i == 2)
> > days = 28;
> > else
> > days = 31 - ( (i != 4 || i != 6 || i != 9 || i != 11) ? 1 : 0 );
> >
> > I think there is no simpler way, because the numbers of months are
> > unregular.
> -
> To unsubscribe from this list: send the line "unsubscribe linux-c-programming" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: A Calendar app on C
2004-06-02 5:58 A Calendar app on C Fabio Miranda Hamburger
2004-06-02 7:10 ` Christian Beckel
@ 2004-06-02 10:07 ` Glynn Clements
1 sibling, 0 replies; 6+ messages in thread
From: Glynn Clements @ 2004-06-02 10:07 UTC (permalink / raw)
To: Fabio Miranda Hamburger; +Cc: linux-c-programming
Fabio Miranda Hamburger wrote:
> I am trying to program a basic calendar software in C. The idea is to ask
> for a year and display all the calendar from january to december. How to
> code such app taking care of 31/28 days month and check each 4 year for a
> leap year? Any idea/comment/advice/code is welcome.
A year is a leap year if:
static int is_leap(int year)
{
return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0);
}
Thus:
static int days_in_year(int year)
{
return is_leap(year) ? 366 : 365;
}
So the number of days in a month is:
static int days_in_month(int year, int month)
{
static const int days[2][12] = {
{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
};
return days[is_leap(year)][month-1];
}
As for the relationship between days of the year and the days of the
week, note that the 400-year cycle for leap years is an exact number
of weeks (400 years == 400 * 365 + 97 == 146097 days == 20871 * 7
days), and that 2000-01-01 was a Saturday, so:
int year_start(int year)
{
int day = 6; /* Saturday */
int i;
year %= 400;
for (i = 0; i < year; i++)
day += days_in_year(i);
return day % 7;
}
This could easily be optimised (e.g. using a lookup table), but the
above is all of the information required to produce a calendar for any
given year.
[Unless, that is, you want it to work for years prior to the adoption
of the Gregorian calendar; note the output from "cal 1752".]
--
Glynn Clements <glynn.clements@virgin.net>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: A Calendar app on C
2004-06-02 9:18 ` John T. Williams
@ 2004-06-02 10:38 ` wwp
0 siblings, 0 replies; 6+ messages in thread
From: wwp @ 2004-06-02 10:38 UTC (permalink / raw)
To: linux-c-programming
Hello John,
On Wed, 02 Jun 2004 05:18:57 -0400 "John T. Williams" <jowillia@vt.edu> wrote:
> isn't there some rule about if the year is year%100=0 then is has to
> also be yea%400 to be a leap year?
Yes there is! Google would report many pages around this.
According to http://www.mitre.org/tech/cots/LEAPCALC.html:
if (year mod 4 != 0)
{use 28 for days in February}
else if (year mod 400 == 0)
{use 29 for days in February}
else if (year mod 100 == 0)
{use 28 for days in February}
else
{use 29 for days in February}
Regards,
> On Wed, 2004-06-02 at 03:17, Christian Beckel wrote:
> > oops, I forgot to test if there is a leap or not, the first line should be:
> >
> > if (i == 2)
> > days = (i % 4 != 0) ? 28 : 29;
> >
> >
> > > Hi,
> > >
> > > there are several possibilities to compute the number of days in a month or
> > > if there is a leap or not.
> > >
> > > if (i == 2)
> > > days = 28;
> > > else
> > > days = 31 - ( (i != 4 || i != 6 || i != 9 || i != 11) ? 1 : 0 );
> > >
> > > I think there is no simpler way, because the numbers of months are
> > > unregular.
> > -
> > To unsubscribe from this list: send the line "unsubscribe linux-c-programming" in
> > the body of a message to majordomo@vger.kernel.org
> > More majordomo info at http://vger.kernel.org/majordomo-info.html
>
> -
> To unsubscribe from this list: send the line "unsubscribe linux-c-programming" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
--
wwp
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2004-06-02 10:38 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-06-02 5:58 A Calendar app on C Fabio Miranda Hamburger
2004-06-02 7:10 ` Christian Beckel
2004-06-02 7:17 ` Christian Beckel
2004-06-02 9:18 ` John T. Williams
2004-06-02 10:38 ` wwp
2004-06-02 10:07 ` Glynn Clements
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).