• ベストアンサー

C言語でのカレンダー作成

今、C言語でカレンダーを表示させるプログラムを作成しています 西暦と月を入力すると、その年、その月の1ヶ月分のカレンダーが表示されるプログラムを作りました そこで、次は入力した月から3ヶ月分のカレンダーを表示させるプログラムを作成したいのですが、どなたか教えてくださいませんか? 配列を使う方法や文字列など色々な方法があると伺って、どの方法が作りやすいのかわからないんです・・・ borland c を使用しています

質問者が選んだベストアンサー

  • ベストアンサー
noname#144013
noname#144013
回答No.3

こんにちは。 前提として、作成するプログラムがコンソールアプリで、コンソール画面 にカレンダーを表示する場合ですが。。。 ※以下は、あくまで一例です。 ■縦方向に並べて表示する場合 ※こちらは、#1さんの言われるように、単純に作成済みの1ヶ月カレンダー  表示プログラムを、3回呼ぶだけで良いと思います。 1)既に作成済みのカレンダー表示を行うプログラムを関数化します。   例)   void DispMonth( int nYear, int nMonth );    int nYear  : カレンダーの年    int nMonth : カレンダーの月 2)入力された[年]、[月]を基準にして、forループなどで、[月]及び[年]を   変えながら、1)の関数を呼出す。  入力された[月]を中央にして、前後3ヶ月分のカレンダーを表示する場合、  ================================================  int nYear, nMonth;  int m, nYY, nMM;  nYear = 2010;  /* ←入力[年]とします */  nMonth = 11;   /* ←入力[月]とします */  /* 月単位のループ処理 */  for ( m=nMonth-1; m<=nMonth+1; ++m ) {    nYY = nYear;    nMM = m;    if ( nMM < 1 ) {      nMM += 12;      nYY--;    }    else if ( nMM > 12 ) {      nMM -= 12;      nYY++;    }    DispMonth( nYY, nMM );    /* 必要であれば、ここで空白行などを出力し間隔を調整する */  }  ================================================  のような処理になると思います。 ■横方向に並べて表示する場合 ※こちらの場合は、少し工夫が必要になります。 1)まず、作成済みのカレンダー表示を行うプログラムを組み直して、週単位   (第1週~第6週)で表示を行う関数にします。   例)   void DispWeek( int nYear, int nMonth, int nWeek );    int nYear  : カレンダーの年    int nMonth : カレンダーの月    int nWeek : 週単位のインデックス(1~6)  ※出力の際、行末には改行を付加しないようにしておきます。  ※週インデックスが、その月の週の数を越えた場合は、空白(スペース等)   を出力するようにしておきます。 2)入力された[年]、[月]を基準にして、forループなどで、[月]、[年]、及び、   [週のインデックス]を変えながら、1)の関数を呼出す。  入力された[月]を中央にして、前後3ヶ月分のカレンダーを表示する場合、  ================================================  int nYear, nMonth;  int m, nYY, nMM, nWeek;  nYear = 2010;  /* ←入力[年]とします */  nMonth = 11;   /* ←入力[月]とします */  /* 必要であれば、ここで年、月、及び、曜日名などの表示を行う */  ~~~  /* 週単位のループ処理 */  for ( nWeek=1; nWeek<=6; ++nWeek ) {    /* 月単位のループ処理 */    for ( m=nMonth-1; m<=nMonth+1; ++m ) {      nYY = nYear;      nMM = m;      if ( nMM < 1 ) {        nMM += 12;        nYY--;      }      else if ( nMM > 12 ) {        nMM -= 12;        nYY++;      }      DispWeek( nYY, nMM, nWeek );      /* 必要であれば、ここでスペースなどを出力し間隔を調整する */    }    /* ここで改行を出力する */  }  ================================================  のような処理になると思います。 ※GUIアプリの場合でも、基本的に月毎に表示位置をずらすようにすれば良い  と思います。 以上です。

rickey3939
質問者

お礼

ご丁寧に、ありがとうございます なるほど、関数を数回呼ぶ方法ですか、考え付きませんでした… 自分は初心者同然なので、こちらを参考に縦方向に表示するものを作ってみようかと思います

その他の回答 (2)

  • ohtawa
  • ベストアンサー率23% (9/38)
回答No.2

>西暦と月を入力すると、その年、その月の1ヶ月分のカレンダーが表示されるプログラムを作りました それだけ できたなら >そこで、次は入力した月から3ヶ月分のカレンダーを表示させるプログラムを作成したいのですが、どなたか教えてくださいませんか? は簡単ではないでしょうか >配列を使う方法や文字列など色々な方法があると伺って、どの方法が作りやすいのかわからないんです・・・ 他人が作りやすい方法がかならずしもあなたにつくりやすいとはかぎりません ご自分でやってみていちばんつくりやすい方法をえらべばよいのでは?

rickey3939
質問者

お礼

申し訳ありません、教えてもらいながらばっかの初心者同然の者でして… 私には些か難しいです… そうですね、自分に合った方法も探してみます ありがとうございます

  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.1

1ヶ月分を三回実行すればいいだけ。

rickey3939
質問者

お礼

回答、ありがとうございます 解決へのヒントになりそうです

関連するQ&A