アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (4件)

前の方が書かれている通り何に配列を使うのか少々疑問ですが、


使うとすればこんな感じではないかと思います。

#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だと、つい、「宿題では?」と思います。
もし宿題なら自分で解かなければ意味が無いと思いので丸写しはしないで下さい。
って書いた本人がいっても説得力ありませんが。
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/11/08 10:50

よくみたら new しなくてもよかったですね。

失礼しました。

void CAaaDlg::func1(int year, int month, int day)
{
CTimect1(year, month, day, 0, 0, 0);
CTimect2(year, 1, 1, 0, 0, 0);
CTimeSpants1(ct1.GetTime());
CTimeSpants2(ct2.GetTime());
CTimeSpandiff = ts1 - ts2;
CStringkotae;
kotae.Format("%d", diff.GetDays());
AfxMessageBox(kotae);
}
    • good
    • 0

何がどうわからないのか、御自分でやってみたところ、分からなかったところを書いた方がいいですよ。



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);
}

たぶん宿題の参考にはならないと思います。
    • good
    • 0

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


配列のドコが分からないのでしょうか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!