教えてください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
** 生年月日が今日の日付より後になっています
**
確かにポインタ使用禁止では無理。とはいえ関数は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;
}
> 配列、ポインタは使用禁止とする。関数は用いてもよい。
難しいですね。
関数は用いてもよいけれどもポインタは使用禁止ということは、関数を呼び出すすべがないということです。文字列を扱うことは当然不可能です。
どう読み込んで、どう出力するかにもよりますが、この条件ではまず実現できないと思います。
- 最新から表示
- |
- 回答順に表示













