- 締切済み
教えてください3
初心者なのでわかりやすくお願いします。 生年月日と今日の日付を読み込み、生年月日から今日までの日数を計算して出力するプログラムを制御文を用いて作成せよ。 配列、ポインタは使用禁止とする。関数は用いてもよい。 うるう年とは4で割り切れかつ100で割り切れない年、及び400で割り切れる年はうるう年である。 ただし、 1.年月日は西暦とし、入力できる年月日は西暦1800年1月1日以降とする 2.年月日が正しい範囲内にないときは、入力データ誤りとみなしメッセージを出力して終了 3.生年月日が今日の日付より後のときも、誤りとみなし メッセージを出力して終了とすること。 <実行結果> ** 生年月日を入力してください ** 1985 2 4 ** 今日の日付を入力してください ** 2010 6 12 1985年2月4日から今日までの日数は 9259日です ちなみに西暦1年1月1日から今日までの日数は 733935日です さらに西暦1年1月1日から生年月日までの日数は 724676日です <実行結果> ** 生年月日を入力してください ** 12 3 4 ** 今日の日付を入力してください ** 123 4 5 ** 入力した年月日が正しい範囲内にありません <実行結果> ** 生年月日を入力してください ** 1987 1 2 ** 今日の日付を入力してください ** 1800 1 1 ** 生年月日が今日の日付より後になっています **
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- trapezium
- ベストアンサー率62% (276/442)
確かにポインタ使用禁止では無理。とはいえ関数はOKというので、でっち上げてみた。 ---- int mdays(int y, int m) { int d = 31; switch (m) { case 2: if (0 == (y & 3)) { if (y % 100) d++; else if (!(y % 400)) d++; } return d - 3; case 4: case 6: case 9: case 11: --d; break; } return d; } int ddays(int y, int m, int d) { while (--m > 0) d += mdays(y, m); --y; d += 365 * y; d += y >> 2; d -= y / 100 - y / 400; return d; }
- Tacosan
- ベストアンサー率23% (3656/15482)
「西暦 1年 1月 1日からの日数」をどのように計算するのか教えてください.
- jacta
- ベストアンサー率26% (845/3158)
> 配列、ポインタは使用禁止とする。関数は用いてもよい。 難しいですね。 関数は用いてもよいけれどもポインタは使用禁止ということは、関数を呼び出すすべがないということです。文字列を扱うことは当然不可能です。 どう読み込んで、どう出力するかにもよりますが、この条件ではまず実現できないと思います。
- zwi
- ベストアンサー率56% (730/1282)
自分で書いたコードは見せてもらえないですか?