• ベストアンサー

配列がよくわからない・・・。

キーボードから年、月、日を入力すると、その年の元旦から当日までの日数を表示するプログラムを作ってほしいです。ユリウス暦でOKです。

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

  • ベストアンサー
  • nue
  • ベストアンサー率50% (6/12)
回答No.2

前の方が書かれている通り何に配列を使うのか少々疑問ですが、 使うとすればこんな感じではないかと思います。 #include <stdio.h> int main() { int y, m, d, cnt, out; int days[13] = {-1,31,28,31,30,31,30,31,31,30,31,30,31}; // -1はダミー out = 0; printf("年月日を入力せよ.(年は西暦)\n"); scanf("%d%d%d", &y, &m, &d); if(y%4==0) days[2] = days[2] + 1; // 閏年なら2月の日数を+1 for(cnt=1; cnt<m; cnt++) out = out + days[cnt]; out = out + d; printf("元旦から%d日たっています.\n", out); return 0; } 配列の一番目の要素は、第0要素なので、 (1-12の)月と対応させるために使いません。 配列の宣言は第0要素を含めた13になっています。 入力された月の前の月までを、 配列を使うことでカンタンに足しています。 たぶんkanaboomさんはCをはじめたばかりだと思うので(自分もヒトの事言えませんが)、 出来る限りわかりやすく(換言すると回りくどく)書いたつもりです。 それから、ユリウス暦でもグレゴリオ暦でもそんなに変わりません。 このテの質問で困り度が3だと、つい、「宿題では?」と思います。 もし宿題なら自分で解かなければ意味が無いと思いので丸写しはしないで下さい。 って書いた本人がいっても説得力ありませんが。

kanaboom
質問者

お礼

ありがとうございます。お察しのとおり、宿題です。 初心者なもので、どんなふうにプログラムを組み立てていけばいいのか さっぱりわからないのに、こんな宿題を出されて困っておりました。 ご指摘のように、あなたの回答を参考に自分で書いてみたいと思います。 がんばります。

その他の回答 (3)

回答No.4

よくみたら new しなくてもよかったですね。失礼しました。 void CAaaDlg::func1(int year, int month, int day) { CTime ct1(year, month, day, 0, 0, 0); CTime ct2(year, 1, 1, 0, 0, 0); CTimeSpan ts1(ct1.GetTime()); CTimeSpan ts2(ct2.GetTime()); CTimeSpan diff = ts1 - ts2; CString kotae; kotae.Format("%d", diff.GetDays()); AfxMessageBox(kotae); }

回答No.3

何がどうわからないのか、御自分でやってみたところ、分からなかったところを書いた方がいいですよ。 Visual C++/MFCで書いてみました。(1分で) void CAaa::func1(int year, int month, int day) {   CTime *pt1, *pt2;   pt1 = new CTime(year, month, day, 0, 0, 0);   pt2 = new CTime(year, 1, 1, 0, 0, 0);   CTimeSpan ts1(pt1->GetTime());   CTimeSpan ts2(pt2->GetTime());   CTimeSpan diff = ts1 - ts2;   delete pt1;   delete pt2;   CString kotae;   kotae.Format("%d", diff.GetDays());   AfxMessageBox(kotae); } たぶん宿題の参考にはならないと思います。

  • coolguys
  • ベストアンサー率18% (351/1917)
回答No.1

ドコを配列にしたら良いのでしょうか? 配列のドコが分からないのでしょうか?

関連するQ&A

  • C言語の問題です

    うるう年も含めて、西暦年における各月の日数を表示せよ。 キーボードからの入力は、年と月、の2つの値。 例 2007 6   2007 2   2000 2   2100 2 画面にはその月の日数を表示する。 例 入力が 2007 6 に対して、画面に 「2007年6月の日数は30である」 と表示する。 間違って入力に対しては、再入力を促すようにすること。 プログラムに配列を必ず使うこと。 ソースプログラムと実行画面のコピーをWordファイルに貼り付けて提出すること。 うるう年の表示と年を選ばせることができません。 助けてください!

  • 配列

    整数n(n>0)を、k進法(1<k<10)で表すにはどうしたらよいのでしょうか?ちなみにnとkは両方とも入力できるようにして、k進法に変換した結果は配列に記憶してから、その配列を表示したいのですが。 それとは別に、各月の日数を記憶する配列を用意し、初期化で各月の日数を記録させ、a月b日からc月d日まで行われる催事の開催期間(日数)を求めたいです。 a月とc月は同じ年で、閏年はありません。 よろしくお願いします。

  • C言語の宿題ができません。

    演習問題4】 4-1. キーボードから整数値を入力して、奇数か偶数かを表示させる。 (if文で記述する) 4-2. キーボードから2つの整数値を入力して2つの値の大、等、小の関係を表示する。 (if文で記述する) 4-3. 月を入力し、入力した月の日数を表示する。ただし2月は28日とする。 (if文で記述する) 4-4. 月を入力し、入力した月の日数を表示する。ただし2月は28日とする。 (switch文で記述する) 【応用問題4】 r4-1. 問題4-1のプログラムで、さらに値が4の倍数であった場合に4の倍数であること も表示する。 ※ヒント:0は4の倍数ではない r4-2. キーボードから3つの整数値を入力して3つの値の大、中、小の関係を表示 する。 (if文で記述する) r4-3. 月を入力し、入力した月の日数を表示するプログラムで、入力した月が1~12の 範囲を越えていた場合エラーメッセージを表示させる。

  • 配列(testを使って)

    2 つの実数ベクトル(3 次元)A とBの足し算をしてその結果を表示するプログラムを書きなさい。ただし、ベクトルの値はキーボードから入力する。 testを使った配列によってこのプログラムを作りたいのですが3次元ってところが難しくてわかりません。 誰か分かる人いませんか?

  • 4年ごとの平均日数が365.2424日と計算したのは誰?

    ユリウス暦の4年ごとの平均日数は365.25日ですが グレゴリオ暦で4年ごとの平均日数は365.2424日ですね。 この4年ごとの平均日数が365.2424日というのは いつ、誰によって計算されたものなのでしょうか?

  • プログラミング 配列

    要素数が5の配列にキーボードから整数を入力し、最小値を表示する。プラグラムの 実行例で 1番目:1 2番目:2 3番目:3 4番目:4 5番目:5 最小値は1です という風に表示させたいのですが プログラムのソースを教えていただけないでしょうか?

  • 多次元配列の行列

    1番 キーボードから3×3の行列の要素を2次元配列に入力した後、その値を表示するプログラムをさくせいせよ 2番 キーボードから3×4の行列の要素を2次元配列に入力した後、転置行列を出力するプログラムをさくせいせよ 3番 2つの行列A(3×3行列)、B(3×3行列)の買う要素の値をキーボードから2つの配列に入力し、2つの行列、並びに、それらの和、差、積の行列を出力するプログラムを作成せよ(Bに単位行列を入れて検算せよ) 4番 2行3列の行列と3行2列の積を求めるプログラムを作成せよ どなたかわからないでしょうか?? 数が多くてすみません。 わかる方お願いします!!

  • 配列

    キーボードから文字列を二つ入力し、文字列が一致しているか否かを表示するプログラムで、 基本的な部分は出来たんですが文字列中の「?」はすべての文字と一致する文字とする、という条件がどうしてもわからずこまっています。 例:「abc?ef」 「abcDef」 「abc?ef」 「??ckef」(すべて一致する) よろしくお願いします。

  • 日数を計算する方法

    以下のようにして変数の配列を使って、 月の日数を格納しています。 int mon[12]={31,28,31,30,31,30,31,31,30,31,30,31}; これを使って、 元旦から入力された月日の日数を計算したいのですが どの様にすればいいですか? 例えば、 4月5日の場合は、 1月 31日 2月 28日 3月 31日 4月 5日 なので「95日」 ---------------- 途中までのプログラム #include<stdio.h> main(void) { int yy, mm, dd; int mon[12]={31,28,31,30,31,30,31,31,30,31,30,31}; printf( "西暦を入力しなさい" ); scanf( "%d", &yy ); printf( "月を入力しなさい" ); scanf( "%d", &mm ); printf( "日を入力しなさい" ); scanf( "%d", &dd ); /* うるう年判定 */ if (((yy%4==0)&&(yy%100!=0))||(yy%400==0)) mon[1]=29; else mon[1]=28; ・ ・

  • キーボード101配列と106配列

    同じような症状になった人がいれば教えて頂きたいのですが、 メモ帳やエクセルでテキストを入力している時は106配列になり、 Internet Explorer や Outlook Expressでテキストを入力 している時は101配列となります。 デバイスマネージャのキーボードを確認すると 「101/102 英語キーボードまたは Microsoft Natural PS/2 キーボード」 と表示されていますが、メモ帳などでテキストを入力している時は106配列となる為、 原因は違う所にあるのかな?と思っています。 全てのアプリケーションで106配列でテキストを入力するには どのようにすればよいのでしょうか?