dポイントプレゼントキャンペーン実施中!

プログラミング初心者です。
初めての投稿になります。至らない点などございますが、
どうぞよろしくお願いいたします。


一応、カレンダーが12ヶ月分縦に一気に表示されるプログラムを作りました。

そこでその1年分のカレンダーを2*6の並びにしたく、
作ろうと思ったのですが、ネットや本でたくさん調べたのですが、
配列や構造体の使い方がわからなくて・・・(´・ω・`)

配列を使うと「型の前に ; がありません」がでてきたり、
わけがわからなくて・・・

わかりやすいヒント、
配列や構造体のことなどくださると幸いです。
よろしくお願いいたします。

ちなみに、2*6というのは、
1月 2月
3月 4月
5月 6月
   :

という感じです。

回答よろしくお願いいたします。

A 回答 (3件)

以下のようにしてください。


---------------------------------------------
# include <stdio.h>

int main(void)
{

int y,m,d=0;
int yy=0,mm=0;

int day;

int wd;

int i;
int j;
int wm;
int low;
int col;

//12カ月分のカレンダー用日付
//6行7列=42個を確保
//カレンダーに1から末日までの数値を埋め込み、値が0の個所は空白を表示させる
intdays[12][42];


printf("年(西暦)=");
scanf("%d",&yy);

//配列全体を0クリアする
for (i=0;i<12;i++){
for (j=0;j<42;j++){
days[i][j] = 0;
}
}
//12か月分の日付を格納する
for(mm=1;mm<=12;mm++){
//閏年
switch(mm){
case 2:
if(((yy%4==0)&&(yy%100!=0)||yy%400==0))
day=29;
else day=28;
break;

//4月6月9月11月30日まで
case 4:
case 6:
case 9:
case 11:
day=30;
break;

default:
day=31;
break;
}

y=yy;
m=mm;
if(m==1||m==2){
y--;
m+=12;
}

//ツェラー
wd=(y + (y/4) - (y/100) + (y/400) + ((13*m+8)/5) + 1)%7;
//その月の日付を設定(1日から末日まで)
for(d=1;d<=day;d++){
i = mm -1;
j = d -1 + wd;
days[i][j] = d;
}
}

//カレンダーを2列で表示する
for(wm=0;wm<6;wm++){
m = 2 * wm + 1;
printf("%2d月__________________%2d月\n",m,m+1);
printf("日_月_火_水_木_金_土__日_月_火_水_木_金_土\n");
for(low=0;low<6;low++){
//左側の月
i = m - 1;
for(col=0;col<7;col++){
j = low * 7 + col;
d = days[i][j];
if (d == 0){
printf("___");
}else{
printf("%2d_",d);
}
}
printf("_");
//右側の月
i = m + 1 - 1;
for(col=0;col<7;col++){
j = low * 7 + col;
d = days[i][j];
if (d == 0){
printf("___");
}else{
printf("%2d_",d);
}
}
printf("\n");
}
}

}

---------------------------------------------
空白が詰められるので、空白を_で表示してあります。
このプログラムを実行されるときは、_を空白に変えてからコンパイルしてください。

以下実行結果です。
---------------------------------------------
年(西暦)=2014
1月__________________ 2月
日_月_火_水_木_金_土__日_月_火_水_木_金_土
_________ 1_ 2_ 3_ 4____________________ 1_
5_ 6_ 7_ 8_ 9_10_11__ 2_ 3_ 4_ 5_ 6_ 7_ 8_
12_13_14_15_16_17_18__ 9_10_11_12_13_14_15_
19_20_21_22_23_24_25__16_17_18_19_20_21_22_
26_27_28_29_30_31_____23_24_25_26_27_28____
___________________________________________
3月__________________ 4月
日_月_火_水_木_金_土__日_月_火_水_木_金_土
__________________ 1________ 1_ 2_ 3_ 4_ 5_
2_ 3_ 4_ 5_ 6_ 7_ 8__ 6_ 7_ 8_ 9_10_11_12_
9_10_11_12_13_14_15__13_14_15_16_17_18_19_
16_17_18_19_20_21_22__20_21_22_23_24_25_26_
23_24_25_26_27_28_29__27_28_29_30__________
30_31______________________________________
5月__________________ 6月
日_月_火_水_木_金_土__日_月_火_水_木_金_土
____________ 1_ 2_ 3__ 1_ 2_ 3_ 4_ 5_ 6_ 7_
4_ 5_ 6_ 7_ 8_ 9_10__ 8_ 9_10_11_12_13_14_
11_12_13_14_15_16_17__15_16_17_18_19_20_21_
18_19_20_21_22_23_24__22_23_24_25_26_27_28_
25_26_27_28_29_30_31__29_30________________
___________________________________________
7月__________________ 8月
日_月_火_水_木_金_土__日_月_火_水_木_金_土
______ 1_ 2_ 3_ 4_ 5_________________ 1_ 2_
6_ 7_ 8_ 9_10_11_12__ 3_ 4_ 5_ 6_ 7_ 8_ 9_
13_14_15_16_17_18_19__10_11_12_13_14_15_16_
20_21_22_23_24_25_26__17_18_19_20_21_22_23_
27_28_29_30_31________24_25_26_27_28_29_30_
______________________31___________________
9月__________________10月
日_月_火_水_木_金_土__日_月_火_水_木_金_土
___ 1_ 2_ 3_ 4_ 5_ 6___________ 1_ 2_ 3_ 4_
7_ 8_ 9_10_11_12_13__ 5_ 6_ 7_ 8_ 9_10_11_
14_15_16_17_18_19_20__12_13_14_15_16_17_18_
21_22_23_24_25_26_27__19_20_21_22_23_24_25_
28_29_30______________26_27_28_29_30_31____
___________________________________________
11月__________________12月
日_月_火_水_木_金_土__日_月_火_水_木_金_土
__________________ 1_____ 1_ 2_ 3_ 4_ 5_ 6_
2_ 3_ 4_ 5_ 6_ 7_ 8__ 7_ 8_ 9_10_11_12_13_
9_10_11_12_13_14_15__14_15_16_17_18_19_20_
16_17_18_19_20_21_22__21_22_23_24_25_26_27_
23_24_25_26_27_28_29__28_29_30_31__________
30_________________________________________


不明点は、補足にて問い合わせください。
    • good
    • 0

>>一応、カレンダーが12ヶ月分縦に一気に表示されるプログラムを作りました。


このプログラムを提示してください。
それをもとに、どのようにするか考えましょう。

この回答への補足

一応こんな感じにつくりました><

# include <stdio.h>

int main(void)
{

int y,m,d=0;
int yy=0,mm=0;

int day;

int wd;
int i;

printf("年(西暦)=");
scanf("%d",&yy);


for(mm=1;mm<=12;mm++){
//閏年
switch(mm){
case 2:
if(((yy%4==0)&&(yy%100!=0)||yy%400==0))
day=29;
else day=28;
break;

//4月6月9月11月30日まで
case 4:
case 6:
case 9:
case 11:
day=30;
break;

default:
day=31;
break;}

y=yy;
m=mm;
if(m==1||m==2){
y--;
m+=12;}

//ツェラー
wd=(y + (y/4) - (y/100) + (y/400) + ((13*m+8)/5) + 1)%7;

printf("\n %d月\n",mm);
printf("日 月 火 水 木 金 土");
printf("\n");
for(i=1;i<=wd;i++){printf(" ");}


//日にちの計算
for(d=1;d<=day;d++){
wd=(y + (y/4) - (y/100) + (y/400) + ((13*m+8)/5) + d)%7;

printf("%2d ",d);
if(wd==6){
printf("\n");}

}

}

}

補足日時:2014/05/09 22:21
    • good
    • 0

> 型の前に ; がありません」



とか言われても、何をどうやろうとしてどうなったのかわかりません。
わからないので、それをどう直したらいいかもわかりません。

やりかたはいくらでもあります。
あなたがどんなやり方をしようとしたかがわからないので、それが正しいかどうかも判断できません。

どういう風に考えてどう作ろうとしたか、まずは提示してはどうでしょう?



配列を使わない方法もあります。

例えば
> 1月 2月
というのは
1月の1行目 2月の1行目 改行
1月の2行目 2月の2行目 改行
1月の3行目 2月の3行目 改行
...
と考えれらますよね?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!