• ベストアンサー

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

  • C言語でカレンダーを作成しています

    こんばんは。 当方プログラミング初心者なのですが、C言語でカレンダーを作成しています。 具体的には年だけ入力すれば一年分のカレンダーが出力され、 年と月を入力すればその年月のカレンダーが出力されるようなプログラムを作りたいと思っています。 例えば2011年と入力すれば2011年一年分のカレンダーが表示され、 2011年2月と入力すれば2011年2月一月分のカレンダーが表示されるといった感じです。 また、年を入力しなかった場合はエラーメッセージを返すようにしたいと考えています。 プログラムの概要は以下のようなものを考えてます。 scanfで年月を入力 if(年だけ入力すれば) 一年分のカレンダーを表示 if else(年月両方を入力すれば) 一ヶ月分のカレンダーを表示 else(それ以外) エラーメッセージ カレンダーを表示するプログラムは完成したのですが、if文の中身をどのようにすればいいのかわかりません。 良い案がありましたら、ご教示お願い致します!

  • カレンダーの作り方教えてください!

    西暦年と月を入力すると、その年月のカレンダーが出てくる万年カレンダーのC言語プログラムを教えてください! という質問をしたのですが、12か月分一度に表示させるには、どうしたらいいのでしょうか?

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

    西暦年と月を入力すると、その年月のカレンダーが出てくる万年カレンダーのC言語プログラムを教えてください!お願いします!

  • カレンダーのC言語プログラムを教えてください!

    西暦年と月を入力すると、その年月のカレンダーが出てくる万年カレンダーのC言語プログラムを教えてください! その出力結果が 2***年 *月 月 火 水 木 金 土 日 月 火 水 木 金 土 日 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 というように二週間ごとに表示するもので、 うるう年の判別ができるものになるようにしたいのですが。 年=n月=g で入力するものを作りたいんです。 よろしくお願いします!!!(>_<)

  • C言語でうまく組めません。

    恐れ入ります。C言語の勉強を今している者です。 ひとつ大きな難問に出会ってしまい困っています。ご教授ください。 カレンダーの問題です。 西暦で4桁 一ヶ月を42コマ用意します。 そして日曜日からはじまり月曜日で終わります。 たとえば2009年で考えますと(3ヶ月分のデータです) 2009 000000000102030405060708091011121314151617181920212223242526272829303100000000000000 010203040506070809101112131415161718192021222324252627280000000000000000000000000000 010203040506070809101112131415161718192021222324252627282930310000000000000000000000 2文字づつ拾って"00"の時はスペースを入れ、カレンダーを作成するプログラムを作成しようとしています。 DOS画面で表示される時は 2009年カレンダー 1月 2月 3月 4月 6月 7月 8月 9月 10月 11月 12月 13月 のようにしたいのですがうまくいきません。 どなたかご教授ください。4月以降のデータもご指示いただければすぐにご用意いたします。

  • C言語のプログラミングについて

    私は大学2年なのですが、現在留年するかしないかというぎりぎりのところに立っています。好意で単位をなんとかしてくれる教授を探し出し、C言語の宿題を出されました。ですが私は根っからの文型で、プログラミングなどしたこともありません。教科書を図書館で借りて読んでみるものの、すぐ理解できるような難易度ではないことだけがわかりました。 そこでもしよろしければ、プログラムを教えてもらいたいです。 1.キーボードから整数の入力を繰り返す。0以下の値が入力されたら終了し、入力した値の中の最小値を表示する。また、それが何番目に入力された値かもあわせて表示する。(6つの整数を入力、最後の整数は0を入力することとする。) 実行結果例 整数を入力: 6 整数を入力: 5 整数を入力: 4 整数を入力: 3 整数を入力: 2 整数を入力: 1 整数を入力: 0 最小値は6番目の1 2.キーボードから整数の入力を4回繰り返し、それらの値を2次元配列Aの各要素に順に代入し、その行列のそれぞれの要素と行列式を表示するプログラムを作成せよ。 実行結果例 1行1列の要素? 6 1行2列の要素? 5 2行1列の要素? 4 2行2列の要素? 3 行列A = 6 5 4 3 行列式 = 2 3.キーボードから西暦年を入力し,その年が閏年のときは「○○年はうるう年です」と表示し,そうでないならば「○○年はうるう年ではありません」と表示するプログラムを作成しなさい. なお,閏年の定義は以下の通りである. ・西暦年が4で割り切れる年は閏年 ・ただし,西暦年が100で割り切れる年は平年 ・ただし,西暦年が400で割り切れる年は閏年 実行結果例 西暦年を入力してください. 1987 1987 年はXXXXXXXX 一時的ではありますが、皆様のお力をお借りしたいです。 もちろん、ここでお答えをもらってもわからないままにせずに、無事進級することができたら独学で勉強しようとは思ってます。 なお、理系の人たちはVisualBasicというソフトを使っているようです。よろしくお願い致します。

  • ★C言語の問題です★

    C言語のプログラムの問題なんですが、どなたか以下の問題の1問でも解ける方がいればご回答おねがいします! または、アドバイスだけでもいいのでよろしくお願いします。 【問題】 1 西暦1868年から2007年までの年号を入力して和暦に変更して出力するプログ  ラムを作成するプログラム。  例 入力 1868  出力 明治元年       2007     平成19年 2 整数配列が-32768から32767の範囲の数しか扱えないとしたとき、10桁の整数同士  の足し算を行うプログラム。 3 3桁の整数の値を入力していき、-9999が入力されたところで、それまでに入力  された数の個数と合計を整数で、平均を浮動小数点数で出力するプログラム。 4 3つの文字列”Happy”と“New”と“Year”をつないで1つの文字列として出力する  プログラム。 5 学籍番号、氏名、出席からなる10人分のデータがある。出席の悪いものから並び替  えて表示するプログラム。  例  CA180002 山田太郎 70  CA170001 山田次郎 60  データは、適当なものを使います。

  • C言語です。

    C言語です。 2次元配列を用いて、2つの2行3列の行列 A=[ 1 2 3 4 5 6 ] B=[ 6 3 4 5 1 2 ] の和を表示するプログラムを教えてください。 コンパイル結果 7 5 7 9 6 8

  • C言語のプログラミングについてです。

    C言語のプログラミングについて教えて欲しいです。 scanf関数を用いて、キーボードから文字列(最大30文字)を読み込み、これをchar型配列に格納します。最大10個までの文字列が入力された場合か、「END」が入力された時、入力された逆順で画面に表示するプログラム。作成しなさい。 〈完成例〉 adjm 10mdjp jpd-4 njad' END njad jpd-4 10mdjp adjm

  • C言語初心者です。

    C言語初心者の者です・・。カレンダーを表示するというプログラムを 作成して下さい。という問題でソースが途中まで出来ていてこれを元に 作成するみたいなのですが、今まで、こちらのサイトで同じような質問は無いかなぁと検索してみたのですが、年数やうるう年の計算もされていて、どこをどの様に変えれば良いのかも分かりません。どなたか教えて頂けないでしょうか? 〖問題〗 以下のように、カレンダーを表示するプログラムを書いてください。 int main (void) { /* 1月表示 */ dispCalender(1); return 0; } void dispCalender(int month) { /* 2007年:月毎の最終日を管理する配列 */ int lastday[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30,31}; /* 2007年:各月が何曜日から始まるか管理する配列 */ int week[12] = {1, 4, 4, 0, 2, 5, 0, 3, 6, 1, 4, 6} /* ※0:日、1:月、2:火 ・・・ 6:土 */ (ここにいっぱいコード書く) } (実行結果) --------------------- [2007年1月] --------------------- 日 月 火 水 木 金 土 --------------------- 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ---------------------

専門家に質問してみよう