解決済み

C++借金の返済額の計算

  • すぐに回答を!
  • 質問No.888928
  • 閲覧数1099
  • ありがとう数2
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 83% (30/36)

私は借入金の返済額を計算するプログラムを作ろうとしていますが、手が動きません。
作りたいプログラムを具体的にいいますと

キーボード入力:
借入金額(元金)、支払い開始年月、年利、支払い回数

表示:
毎月の「元金返済額、利息返済額、残債高」を支払う回数分表示。支払う総額を表示。

月返済額は一定です。
使いたい計算式は以下の通りです。
 月利=年利÷12
 月返済額=借入金額*月利*(1+月利)^(支払い回数)
     ÷{(1+月利)^(支払い回数)-1}
 n回目の支払い時の残積高=
 (((1+月利)^n)*(借入金額-(月返済額÷月利))
+(月返済額÷月利)
 n回目の元金返済額=(n-1)回目の支払い後の残積高
           -n回目の支払い後の残積高
 n回目の利息返済額=月返済額-n回目の元金返済額

どなたか、このプログラムについて教えていただけませんか?;;
scanfで読み取った支払い回数の階乗を含んだ式を関数宣言するなんて難しくてわからないんです。利息が増えていくしくみも難しいです><
投稿初めてなので何かいたらない点があるかもしれませんが、よろしくお願いしますm(_ _)m

質問者が選んだベストアンサー

  • 回答No.2

いまいちどのレベルで解らないのかがわからないのですが・・・

組み方が解らなければ、最初に説明されている事象をそのままコードに置き換えるだけです。

月利=年利÷12を置き換えます。
まぁ、変数もいるでしょうから、

float nenri = 0.01 //10%
float geturi = 0;
として、(今回は直接値を入れてます)
geturi = nenri / 12;
になります。これはOKでしょうか?
では次です。
月返済額=借入金額*月利*(1+月利)^(支払い回数)÷{(1+月利)^(支払い回数)-1}

階乗の動きはわかりますよね?
3^1=3
3^2=9  (3*3)
3^3=27 (3*3*3)
この動きを関数にするだけです。
1例としては以下のような感じです。

float jyou( float data , int cnt ){

float result=data;
for(int i=2;i<=cnt;i++){
result=result * data;
}
return result;
}

data に元の数字、cntに階乗の数字を与えます。
3の6乗であれば
kotae = jyou(3,6)です。

float result=data;は階乗が1の時の為に元数字と同じものを入れておきます。
次のループから階乗分、元数字を掛け合わせていくだけです。

関数も出来たところで、元に戻りますが月返済額は

float tukihensai = 0;
float kariire = 300000; //30万借りた
int kaisu = 24; //24回払い

tukihensai = kariire * geturi * jyou((1 + geturi),kaisu) / (jyou((1 + geturi) , kaisu) -1);

になります。

ま、後は同じ要領で順番に組んでいけばOKです。
これでも無理、もしくはわからなければ、
ソースでも乗せましょうかね。
補足コメント
Hankusu

お礼率 83% (30/36)

詳しい解答ありがとうございます。
misty7666さんのアドバイスを参考にプログラムを書いてみました。

#include<stdio.h>
#include<math.h>
#difine float jyou(float data,int cnt) float result=data;
for(int i=2;i<=cnt;i++){
result=result*data;
}
return result;

main(){
float kariire;
float tukiri;
float nenri;
float kaisu;
float tukihensai;
float zanseki;
float motokinhensai;
float risokuhensai;

printf("Input kariirekin\n");
scanf("%lf",&kariire);
printf("Input tukiri\n");
scanf("%lf",&tukiri);
printf("Input nenri\n");
scanf("%lf",&nenri);
printf("Input siharaikaisuu\n",&kaisu);
scanf("%d",&kaisu);

tukiri=nenri/12;

float jyou(float data,int cnt){

tukihensai=kariire*nenri*jyou((1+nenri),tukiri)/(jyou((1+geturi),kaisu)/(jyou((1+geturi),kaisu)-1);

zanseki=(jyou((1+tukiri),kaisu))*(kariire-(tukihensai/tukiri))+(tukihensai/tukiri);

motokinhensai=(jyou((1+tukiri),kaisu-1))*(kariire-(tukihensai/tukiri))+(tukihensai/tukiri)-zanseki;

risokuhensai=tukihensai-motokinhensai;risokuhensai=tukihensai-motokinhensai;

printf("tuki hensaigaku = %d\n",tukihensaigaku);
printf("motokinhensaigaku %d risokuhensaigaku %d zansekidaka %d\n",motokinhensai,risokuhensai,zanseki);
}
}

こんな風になりました。
コンパイルしたところ、コンパイルエラーになってしまいました。
階乗の計算と関数が噛み合っていないのでしょうか・・・。
最終的にはの実行結果の目標は

2004/06 gankin=19900 risoku=200 zanseki=80000
2004/07 gankin=19990 risoku=180 zanseki=60000
・・・
2005/12 gankin=20000 risoku= 30 zanseki= 0
Tsuki Hensaigaku =20000
Risoku Goukei =1000

というようにしようと思っているんです。(書いてある数字は適当です。)
私の実力不足でここまではできないかもしれませんけどTT

貴重なお時間を割かせてしまい申し訳ないです。
大感謝しています。
投稿日時 - 2004-06-12 03:58:08
お礼コメント
Hankusu

お礼率 83% (30/36)

ご指導ありがとうございます。
私が、おばかすぎて見放されてしまったようですね・・・TT
階乗の計算はnotnotさんがいうように、pow(x,y)で実現しました。だけど、プロトタイプ宣言のしかたがわからなくて、プログラムの完成にはいたっていません。
投稿日時 - 2004-06-14 02:52:45
たいせつな将来のこと。あえて、知らない人に聞いてみよう。

その他の回答 (全1件)

  • 回答No.1

ベストアンサー率 48% (4382/8998)

こういった問題だと、専用関数があるのでExcelでやるほうがずっと楽で、仕様変更もしやすいです。

この仕様のプログラムを全部書いてくれという質問ではないですよね?

>scanfで読み取った支払い回数の
scanfは使い方が難しく特にキーボードからの入力には初心者は使ってはいけない関数です。数字のキーボード入力は、fgetsで文字列入力して、atoi、 atof 関数によりその文字列を整数値、実数値に変換します。

>支払い回数の階乗を含んだ式を
べき乗 a^b は、pow(a,b) です。

>利息が増えていくしくみも難しいです
元金が減っていけば、利息はだんだん減っていきますよね?返済額が利息より少なければ不足分だけ元金が増えていきますけど(借金が雪だるま式に増える)。
補足コメント
Hankusu

お礼率 83% (30/36)

へんなところにお礼書いたり、お礼書くところに、補足的なことを書いたりと、粗相ばかりでごめんなさい。なんとか自己解決できました。お二方のおかげです。ありがとうございました。
投稿日時 - 2004-06-14 13:33:43
お礼コメント
Hankusu

お礼率 83% (30/36)

素早いご解答どうもありがとうございました。
初めての質問ということもあり、私の理解度や状況等の説明が不十分でとても解答しづらかっただろうと思います。そんな中、私の意図を汲み取ろうとしてくださり、うれしく、そして申し訳なく思っています。
ありがとうございましたm(_ _)m
投稿日時 - 2004-06-12 03:32:10
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集


OKWAVE若者応援スペシャル企画

ピックアップ

ページ先頭へ