|
1ヶ月を30日で統一してますけど。
initを改造すれば何とかなると思います。
#include <stdio.h>
typedef struct {
int printed;
int offset;
int max;
} Month;
Month g_year[12];
void init(void)
{
int i;
for (i = 0; i < 12; i++) {
g_year[i].printed = 0;
g_year[i].offset = i * 30;
g_year[i].max = 30;
}
}
void print_line(int month)
{
int i;
printf("%*s", 3 * ((g_year[month].printed + g_year[month].offset) % 7), "");
for (i = (g_year[month].printed + g_year[month].offset) % 7; i < 7; i++) {
if (g_year[month].printed >= g_year[month].max) {
printf(" ");
} else {
printf("%3d", ++g_year[month].printed);
}
}
}
void print_4_months(int first)
{
int i;
int end_flg[4] = {0};
for (;;) {
int flg = 0;
for (i = 0; i < 4; i++) {
print_line(i+first);
putchar(' ');
if (g_year[i+first].printed >= g_year[i+first].max) {
end_flg[i] = 1;
}
flg += end_flg[i];
}
puts("");
if (flg == 4)
break;
}
}
int main(void)
{
init();
print_4_months(0); puts("");
print_4_months(4); puts("");
print_4_months(8); puts("");
return 0;
}
|