Find the last Sunday of each month: Difference between revisions

No edit summary
Line 204:
 
=={{header|C}}==
Identical to [[Last_Friday_of_each_month#C|Last Friday of each month]] except for the initial day offset.
{{incorrect|C|It can produce different results depending on the time of day that it is run (amongst other issues).}}
 
<lang C>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main(int argc, char *argv[])
#define NUM_MONTHS 12
 
void LastSundays(int year)
{
int days[] = {31,2829,31,30,31,30,31,31,30,31,30,31};
time_t t;
struct tm* datetime int m, y, w;
 
if (argc < 2 || (y = atoi(argv[1])) <= 1752) return 1;
int sunday=0;
isLeapYear days[1] -= (yeary % 4==0) || (!(yeary % 100==0) && (yeary % 400==0)));
int dayOfWeek=0;
w = y * 365 + 97 * (y - 1) / 400 + 4;
int month=0;
int monthDay=0;
int isLeapYear=0;
int daysInMonth[NUM_MONTHS]={
31,28,31,30,31,30,31,31,30,31,30,31
};
 
isLeapYear=(year%4==0 || ((year%100==0) && (year%400==0)));
 
if(isLeapYear)
{
daysInMonth[1]=29;
}
 
time(&t);
datetime = localtime(&t);
datetime->tm_year=year-1900;
for(month=0; month<12;month++)
{
datetime->tm_mon=month;
monthDay=daysInMonth[month];
datetime->tm_mday=monthDay;
 
t = mktime(datetime);
dayOfWeek=datetime->tm_wday;
 
while(dayOfWeek!=sunday)
{
monthDay--;
datetime->tm_mday=monthDay;
t = mktime(datetime);
dayOfWeek=datetime->tm_wday;
 
for(monthm = 0; monthm < 12;month m++) {
t w = mktime(datetimew + days[m]) % 7;
printf("%d-%02d-%02dd\n",year y,month m + 1,monthDay);
days[m] + (w < 5 ? -2 : 5) - w);
}
printf("%d-%02d-%02d\n",year,month+1,monthDay);
}
 
{return 0;
}
 
int main()
{
LastSundays(2013);
return 0;
}
 
</lang>
 
1

edit