- ベストアンサー
A銀行とB銀行の預金比較
- A銀行とB銀行に、それぞれ100万円を預けた時の各年の預金高を比較する。
- 求められるのは、B銀行の預金高がA銀行を上回るまでの年数。
- しかし、このプログラムでは結果が出ないので修正が必要。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
論理構成を建てずに、闇雲にプログラムしてもダメです。 【前提】 (1)利率は単利は年利0.2%、複利は01.19%とする。 (2)利金は1円単位で、端数切り捨てとする。 【処理】 (1)単利側をI、複利側をJとし、初期値100万円から開始 (2)単利側の計算 I += 1000000 * 0.002 (3)複利側の計算 J += J * 0.0019 (4)JがIより大きくなるまで(2)と(3)を繰り返す (5)繰り返した回数(年)を表示する 【間違えている点】 (1)金額が100円である。 (2)複利側で利金が初期元本の利金を繰り入れている。 (3)whileは条件を満たす間、ループする。 本件では最初はJ=Iなので、条件を満たさない。 何故なら、100に0.002を掛けても0.2で、切り捨てにより 0になるので、I+=aとしてもIの値は変化しない。Jも同じ。 C言語ではUntil条件のループ制御文はありません。 日本語で、「~になるまで繰り返す」という表現は表せません。 これは「~になったら繰返しを止める」ということなので、 代わりに、「~でない間、繰り返す」と考えるのが正しい。 以上を修正すると、以下の通り。 (1)初期値 long i = 1000000; 念のためlong型を使う。 long j = 1000000; (2)利渡り j += j * 0.0019; (3)繰り返し条件 while ( j <= i );
その他の回答 (3)
- ICE_FALCON
- ベストアンサー率56% (63/111)
#1です。 利息だから1円単位でいいのか・・・・整数型でよかったのね。 まあキャストすれば動くでしょ。 a+= (int)(a_org*a_rate); b+= (int)(b*b_rate);
- Tacosan
- ベストアンサー率23% (3656/15482)
いろいろと間違っているし, 表示を見れば理由はわかると思うんだけど.... とりあえず, 1万円単位でいいの? 普通は, 少なくとも 1円単位で考えるものじゃない?
- ICE_FALCON
- ベストアンサー率56% (63/111)
まず i= i + a; j= j + b; の結果がint型なので小数点が消えてなくなる。 Bは利息の掛け算がループに入っていないので単利になってる。 double a_org = 1000000; double b_org = 1000000; double a_rate = 0.002; double b_rate = 0.0019; int n=0; double a=a_org; double b=b_org; do { printf("[%d];i, j = %lf, %lf\n", n, a, b) a+= a_org*a_rate; b+= b*b_rate; n++; } while (a > b); printf("[%d];a, b = %lf, %lf\n", n, a, b); printf("%d年でBがAを上回る\n",n);
お礼
論理構成の手順からプログラムのミスまでとてもわかりやすく教えていただき、ありがとうございます。 これからは、まずしっかりと論理構成をした上でプログラムを書くように練習します。 どうもありがとうございました。