プログラミング初心者です。
初めての投稿になります。至らない点などございますが、
どうぞよろしくお願いいたします。
一応、カレンダーが12ヶ月分縦に一気に表示されるプログラムを作りました。
そこでその1年分のカレンダーを2*6の並びにしたく、
作ろうと思ったのですが、ネットや本でたくさん調べたのですが、
配列や構造体の使い方がわからなくて・・・(´・ω・`)
配列を使うと「型の前に ; がありません」がでてきたり、
わけがわからなくて・・・
わかりやすいヒント、
配列や構造体のことなどくださると幸いです。
よろしくお願いいたします。
ちなみに、2*6というのは、
1月 2月
3月 4月
5月 6月
:
という感じです。
回答よろしくお願いいたします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.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_________________________________________
不明点は、補足にて問い合わせください。
No.2
- 回答日時:
>>一応、カレンダーが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");}
}
}
}
No.1
- 回答日時:
> 型の前に ; がありません」
とか言われても、何をどうやろうとしてどうなったのかわかりません。
わからないので、それをどう直したらいいかもわかりません。
やりかたはいくらでもあります。
あなたがどんなやり方をしようとしたかがわからないので、それが正しいかどうかも判断できません。
どういう風に考えてどう作ろうとしたか、まずは提示してはどうでしょう?
配列を使わない方法もあります。
例えば
> 1月 2月
というのは
1月の1行目 2月の1行目 改行
1月の2行目 2月の2行目 改行
1月の3行目 2月の3行目 改行
...
と考えれらますよね?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Access DTPickerの初期表示月を変えたい 1 2022/08/02 08:55
- Excel(エクセル) 列を自動で追加したい 3 2022/07/11 12:58
- Excel(エクセル) 下記エクセルの式がなぜこうなるのか理由が知りたいです。 6 2022/08/20 00:43
- Excel(エクセル) Excelで東証のカレンダーを作りたい 6 2022/12/30 20:55
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- Excel(エクセル) Excel セルに入っている日付を参照して、別シートのリストを表示させたい 1 2022/04/12 17:02
- Visual Basic(VBA) excel2016でリストからカレンダーに内容を反映させたいです 2 2022/10/27 15:32
- 健康保険 傷病手当金の申請について 3 2022/07/09 09:14
- 作詞・作曲 ピンク・レディー『渚のシンドバット』の歌詞には岸田総理のウクライナ電撃訪問が歌いこまれている? 5 2023/03/23 19:48
- インターネット広告・アフィリエイト アフェリエイトサイト 作成について 5 2022/05/13 21:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列の要素数に変数を入れたい...
-
関数から配列を返すには?
-
C#で構造体の配列を持った構造...
-
define で 配列
-
MFC - ダイアログボックスのPic...
-
c言語
-
int i, int i[1];
-
c言語 任意の整数の和
-
シマウマの模様を変えるプログラム
-
VBAのプログラムで、DIAG = 1# ...
-
System.IO.Directory.GetFiles...
-
C言語 配列の長さの上限
-
ダイアログから、ドキュメント...
-
ExcelVBAでのkernel32(64bit)
-
c言語のポインタへの文字列入力...
-
char*を初期化したいのですが
-
セグメントエラー
-
if文の判定条件に配列
-
WSH(VBS)でJSONの文字列を読み...
-
VBAで符号無し整数
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関数から配列を返すには?
-
構造体のextern方法
-
配列の要素数に変数を入れたい...
-
C言語において、 配列要素をひ...
-
define で 配列
-
c言語
-
C#で構造体の配列を持った構造...
-
C言語 ファイルの指定された行...
-
c言語 構造体
-
コンボボックスでデフォルト値...
-
配列のアドレス部
-
MFCのCArrayを使った二次元配列
-
MFC - ダイアログボックスのPic...
-
C言語についてです 5人のテスト...
-
C言語から質問です。
-
AfxBeginThread の引数について
-
C言語の課題が出たのですが自力...
-
Cのエラー
-
int i, int i[1];
-
C#で配列が空かを判定するには?
おすすめ情報