• ベストアンサー

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

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