• 締切済み

万年プログラムの祝日にマーク

こんにちは、Cプログラムの初心者です。万年カレンダーを作っているのですが、祝日と日曜日に(かっこ)をつける方法を教えていただけませんか?よろしくお願いいたします。

みんなの回答

  • FEX2053
  • ベストアンサー率37% (7988/21361)
回答No.2

祝日の計算は非常にめんどくさいんですが・・・。 例えば今年の5/6は祝日ですが、これってどうやって出てくるか 知ってますか? 5/3は憲法記念日で祝日、ただし日曜日なので、翌日が振替休日 5/4はみどりの日で祝日、既に休日なので更に翌日が振替休日 5/5はこどもの日で祝日、既に休日なので更に翌日が振替休日 5/6は平日の水曜日、故に繰り越した振替休日を適用 と、こんな計算になります。これをどうやって式にするかだけで どう考えても大変です。また今年の9/21も 5/21は9月第3月曜なので敬老の日で祝日 5/22は火曜日 5/23は秋分の日で祝日 祝日同士に挟まれた1日だけの平日は国民の休日になるので、5/22は 祝日に変更 という大変な計算があります。更に春分の日、秋分の日は毎年日付が 変わります。 ですので、通常は「祝日をデータベース化しておき、それを参照する」 方法で計算します。それでも結構な計算式になりますから、初心者だと 相当な難物ですよ。

redflower5
質問者

お礼

ありがとうございます。難しいようですが、少しずつやってみます。

redflower5
質問者

補足

お助けお願いできますか? 配列で四ヶ月ごと一行になるようにしました。 祝日には()をつけようとしましたが、エラーになってしまいます。どうかよろしくお願いいたします。 どうかy for (i=0; i<12; i++) for (j=0; j<6; j++) for (k=0; k<7; k++) cal[i][j][k]=0;/* うるう年判定 */ if (((yy%4==0)&&(yy%100!=0))||(yy%400==0)) mm[1]=29; else mm[1]=28;/* 1月1日の曜日 */ youbi=((yy-1)+(yy-1)/4-(yy-1)/100+(yy-1)/400+(13*13+8)/5+1)%7;/* 計算 */ dd=1; for (i=0;i<12;) { for(j=0;j<6;) { cal[i][j][youbi++]=dd++; if (youbi==7) {youbi=0; j++;} /* 次の週 */ if (mm[i]<dd) {i++; dd=1; break;} /* 次の月 */ } } for(y=0;y<4;y++){ // for(x=0;x<4;x++){ // printf("     %2d月",i); // printf("\n");} for(z=0; z<7; z++){ printf("%4s",week[z]);} printf(" "); } printf("\n"); for (j=0; j<6; j++) { for (k=0; k<7; k++) { if (cal[i][j][k]==0) printf(" "); else if(hantei(yy,mm,dd,youbi) == 2){ printf("\t"); printf("(%3d) ",cal[i][j][k]); flag = 1; // 日曜と祝日が重なったらflagをたてる } else if(hantei(yy,mm,dd,youbi) == 1 || flag == 1){ printf("(%3d) ",cal[i][j][k]); printf("\t"); flag = 0; } else if((i-1)%7 == 6){ // 土曜日 printf("%3d ",cal[i][j][k]); printf("\t"); } else{ printf("(%3d) ",cal[i][j][k]); //printf("%d"); //日付を出力 flag = 0; } if((i-1)%7 == 6) printf("\n"); //土曜のあとは改行 } for (k=0; k<7; k++) { if (cal[i+1][j][k]==0) printf(" "); else if(hantei(yy,mm,dd,youbi == 2){ printf("(%3d) ",cal[i+1][j][k]); flag = 1; // 日曜と祝日が重なったらflagをたてる } else if(hantei(yy,mm,dd,youbi) == 1 || flag == 1){ printf("(%3d) ",cal[i+1][j][k]); flag = 0; } else if((i-1)%7 == 6){ // 土曜日 printf("%3d ",cal[i+1][j][k]); } else { printf("(%3d) ",cal[i+1][j][k]); flag = 0; } if((i-1)%7 == 6) printf("\n"); //土曜のあとは改行 } for (k=0; k<7; k++) { if (cal[i+2][j][k]==0) printf(" "); printf("\t"); else if(hantei(yy,mm,dd,youbi) == 2){ printf("(%3d) ",cal[i+2][j][k]); flag = 1; // 日曜と祝日が重なったらflagをたてる } else if(hantei(yy,mm,dd,youbi) == 1 || flag == 1){ printf("(%3d) ",cal[i+2][j][k]); flag = 0; } else if((i-1)%7 == 6){ // 土曜日 printf("%3d ",cal[i+2][j][k]); } else{ printf("(%3d) ",cal[i+2][j][k]); flag = 0; } if((i-1)%7 == 6) printf("\n"); //土曜のあとは改行 } int hantei(int yy,int mm,int dd,int youbi){ if((mm==3 && dd== (int)(20.8431 + 0.242194*(yy-1980) - (yy-1980)/4)) // 春分の日 || (mm==9 && dd== (int)(23.2488 + 0.242194*(yy-1980) - (yy-1980)/4)) // 秋分の日 || (mm==1 && dd==1) // 元旦 || (mm==1 && dd>7 && dd<15 && youbi==1) // 成人の日 || (mm==2 && dd==11) // 建国記念日 || (mm==4 && dd==29) // みどりの日 || (mm==5 && dd==3) // 憲法記念日 || (mm==5 && dd==4) // 国民の祝日 || (mm==5 && dd==5) // 子供の日 || (mm==7 && dd>14 && dd<22 && youbi==1) // 海の日 || (mm==9 && dd>14 && dd<22 && youbi==1) // 敬老の日 || (mm==10 && dd>7 && dd<15 && youbi==1) // 体育の日 || (mm==11 && dd==3) // 文化の日 || (mm==11 && dd==23) // 勤労感謝の日 || (mm==12 && dd==23))// 天皇誕生日 { if(youbi == 0){// 日曜と休日が重なった処理 return 2; } else { return 1; } if(youbi == 0){ // 日曜日 return 1; } // return 0; } }

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

業務ソフト? 祝日のデータベースを作って、付き合わせで表示する。

redflower5
質問者

補足

回答ありがとうございます。 会社の研修で万年カレンダーを作ることになっています。 カレンダーは表示できるが、祝日表示はできないです。 Cプログラムだけで作りたいですが、 既にできているカレンダーに祝日だけ(かっこ) をつけるいい方法はありますか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 22日祝日なのですか

    カレンダーで祝日、日曜は、日にちが赤色になっていますが、何故、22日は祝日なのに、赤色になっていないのですか、22の下に赤文字でなにか、書いています

  • 祝日の色つけ方法

    B3に年、B4に月、B5~B35に日、C5~C35に 曜日が入力されているExcelのカレンダーがあります。 別シート「祝日」に2016年の祝日カレンダーがあります。 条件付き書式でCOUNTIF関数を使って、 下記のサイトの通りに祝日に色をつけようとしているのですが、 上手くいきません。 どういった数式を入れればよろしいでしょうか。 教えていただけると幸いです。

  • C#の万年カレンダーのプログラム教えてください

    どなたか申し訳ありませんが、初心者が書けるようにC#での万年カレンダーのプログラムを最初から最後まで教えていただけませんか?よろしくお願いします

  • 1年、祝日が多いと思いますか?少ないと思いますか?

    もうすぐ新しいカレンダーを掛ける時期がやってきます。 また新しい1年が始まりますが、祝日に注目したいと思います。 とりあえず、どんな祝日があるのかを見ますとー 1月1日:元日、1月第2月曜日:成人の日 2月11日:建国記念日 3月20日:春分の日 4月29日:昭和の日 5月3日:憲法記念日、5月4日:みどりの日、5月5日:こどもの日 7月第3月曜日:海の日 9月第3月曜日:敬老の日、9月23日:秋分の日 10月第2月曜日:体育の日 11月3日:文化の日、11月23日:勤労感謝の日 12月23日:天皇誕生日 ・・・ということで、15日(15回)あります。 さてそこで、これだけの祝日、多いと思いますか? ちょうどいいですか? それとも、少ないと思いますか? これを見ると、6月と8月は祝日がありませんが、何か欲しいですか?

  • エクセル 祝日の関数を教えてください

    条件付き設定で土、日、祝日に色を付けたカレンダーを作っています。 曜日の色の付け方はいろいろあるようですが、今回は 土曜日・・・=WEEKDAY($A1)=7 日曜日・・・=WEEKDAY($A1)=1 =WEEKDAY($A1)=の後に、土曜日は「7」、 日曜日は「1」で作りました。 そこで質問ですが、祝日の場合には「=」の後の数字をいくつで設定するのでしょうか? よろしくお願いします。

  • 10月14日は祝日ですか?何の日ですか?

    http://ja.wikipedia.org/wiki/10%E6%9C%8814%E6%97%A5 こちらで調べたんですがわかりませんでした。 今年の10月14日は、携帯のカレンダーが赤に なってるですが、 祝日ですか?祝日であるならなんの日ですか?

  • 5月4日が祝日になると、どうなるの?

    2007年から5月4日は「みどりの日」という祝日になるそうですが、 そうなると、5月3日・4日・5日と、祝日が3日連続になってしまいます。 5月5日が日曜日なら、5月6日は振替休日になると思うのですが、 もし、5月3日や4日が日曜日の場合、振替休日の扱いはどうなるのでしょうか?

  • 祝日が月曜日になる時とならない時

    お世話になりまーす^ー^ すごい、常識的なことなのかもしれませんが、疑問に思いました。 最近、祝日って何月の第何月曜日になって、土曜・日曜・月曜と3連休になってる事が多いですよね? それが11/3 または11/23はカレンダーを見る限りは祝日は月曜日ではないです。 何故、祝日が月曜になる時とならない時があるんでしょうか??^ー^;;;

  • 万年カレンダで祝日にマークを付けるには

    祝日に関して、下記の通りプログラムを作ったのですがうまくいきません。ご教授お願いします。 void Display_func( int year , int month ) {   int week , i , leap , day , *shuku , *furikae ;   int days[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};   int d = 0; **省略**   for( i=0 ; i<week ; i++ ){      printf(" ");   }   for(day=1 ; day<=days[month] ; day++ ){ ★★Yasumi_func( int &shuku , int &furikae ); /*祝日判定関数*/   if(i==0){     printf(" @%2d",day);   }else if(i==*shuku){      printf(" #%2d",day);   }else if(i==*furikae){     i = 1;     printf(" &%2d",day+1);   }else if(i==6){     printf(" *%2d",day);   }else{     printf(" %2d",day);   } 略 @:日曜日 *:土曜日 &:振替休日 #:祝日 return; } /* 祝日判定関数 */ void Yasumi_func( int *yshuku , int *furikae ) { int year , month , day , i ; if((month==3 && day== (int)(20.8431 + 0.242194*(year-1980) - (year-1980)/4))   || (month==1 && day>7 && day<15 && i==1) 略   || (month==11 && day==3)   || (month==12 && day==23))   {     if(i == 0){       *furikae = i ;      /* 振替休日 */     }else{       *shuku = i; /* 祝日 */     }   } }   Yasumi_func( int &yasumi , int &kae ); 祝日判定関数を呼びたいのですが「式の構文エラー」となってしまいます。 この他   if(i == 0){     *furikae = i ;   }else{     *shuku = i;   } この部分も自信がないので、アドバイスお願いいたします

  • 10月11日が祝日のカレンダーはありますか?

    こんにちは^^ 例年ならあるはずの10月の祝日。 しかし今年も去年に引き続いて、オリンピック開催の影響を受けて、10月に祝日がありません。 ですがうちにあるカレンダーには、10月に祝日があります。 実はこのカレンダーは去年の暮れに新聞屋さんからもらったので、祝日が正しく反映されていません。 みなさんのおうちや職場には、このように10月11日が祝日になっているカレンダーはありますか?

このQ&Aのポイント
  • 2年前に購入した外付HDDが突然ブルーレイレコーダーに認識されなくなりました。初期化や再接続を試しましたが、未登録HDDの警告画面が表示されます。
  • どのような方法で録画データを保持したまま、HDDをブルーレイレコーダーに再認識させることができるでしょうか?
  • ご利用のHDD製品はELECOMのSeeQvault対応6GB ELD-QEN2060UBKです。レコーダーはREGZAブルーレイ DBRーT2010を使用しています。
回答を見る