借金の計算です。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
マグナーテン

借金の計算です。

#1

投稿記事 by マグナーテン » 18年前

元金、返済回数、利率を入力し、
元金均等払いの1回目から指定回数までの
支払額、利息、残高を実行結果画面に実行結果画面に表示する。

という課題が出されたのですが、基礎が出来ていないためわかりません。

元金均等払いとは返済額の元金部分が一定であるもので
・毎月の元金返済部分     元金÷返済回数で一定固定
・初回の利息支払部分     元金×利率÷12ヶ月
・N回目利息部分       元金×(1-(N-1)÷返済回数)×利率÷12ヶ月
・N回目の返済額       元金÷返済回数+元金×(1-(N-1)÷返済回数)×利率÷12ヶ月
ということらしいというところまでたどり着いたのですが、プログラミングがちんぷんかんぷんです。

よろしければ教えていただきたいです。お願いします。

管理人

Re:借金の計算です。

#2

投稿記事 by 管理人 » 18年前

こんにちは。

>プログラミングがちんぷんかんぷんです。

このように言われましてもこちらとしては、どこからどの程度お教えしたらいいのかわかりません。

どの辺までわかって、どこ辺りを教えてほしいのか、

自分ではどの程度まで調べたのか、まず、書いてください。

マグナーテン

Re:借金の計算です。

#3

投稿記事 by マグナーテン » 18年前

自分でやろうとしたのですが
複数文字を入力させるにはどうしたらいいかわかりません。

管理人

Re:借金の計算です。

#4

投稿記事 by 管理人 » 18年前

数値を入力するにはscanf関数を使用します。

scanfを使って2種類の入力を格納してみます。
#include <stdio.h>

int main(){
	int gankin,kaisu;

	printf("元金 ->") , scanf("%d",&gankin);

	printf("回数 ->") , scanf("%d",&kaisu);

	for(int i=0;i<kaisu;i++)
		printf("%d : %d\n",i,gankin*(i+1));

	return 0;
}
このようにすることで、回数年分の出力が可能で、元金から年数倍して表示しています。

管理人

Re:借金の計算です。

#5

投稿記事 by 管理人 » 18年前

後は単純に計算だけだと思ったのですが、複利の返済って難しいですね。
上記の式でうまくいくんでしょうか?
上の式ではうまく計算できないように思うのですが。

上記の式で計算すると
元金 -> 100000
回数 -> 30
利率 -> 0.25
 1 : 返済   5416 残高  94584
 2 : 返済   5416 残高  89168
 3 : 返済   5416 残高  83752
 4 : 返済   5416 残高  78336
 5 : 返済   5416 残高  72920
 6 : 返済   5416 残高  67504
 7 : 返済   5416 残高  62088
 8 : 返済   5416 残高  56672
 9 : 返済   5416 残高  51256
10 : 返済   5416 残高  45840
11 : 返済   5416 残高  40424
12 : 返済   5416 残高  35008
13 : 返済   5416 残高  29592
14 : 返済   5416 残高  24176
15 : 返済   5416 残高  18760
16 : 返済   5416 残高  13344
17 : 返済   5416 残高   7928
18 : 返済   5416 残高   2512
19 : 返済   5416 残高  -2904
20 : 返済   5416 残高  -8320
21 : 返済   5416 残高 -13736
22 : 返済   5416 残高 -19152
23 : 返済   5416 残高 -24568
24 : 返済   5416 残高 -29984
25 : 返済   5416 残高 -35400
26 : 返済   5416 残高 -40816
27 : 返済   5416 残高 -46232
28 : 返済   5416 残高 -51648
29 : 返済   5416 残高 -57064
30 : 返済   5416 残高 -62480
計算したソースはこちらです。
#include <stdio.h>

int main(){
	int kaisu,zandaka,hensai;
	double gankin,riritu=0.0;

	printf("元金 -> ") , scanf("%lf",&gankin);

	printf("回数 -> ") , scanf("%d",&kaisu);

	printf("利率 -> ") , scanf("%lf",&riritu);
	
	zandaka = gankin;
	
	for(int i=1;i<=kaisu;i++){
		hensai = gankin/(double)kaisu+gankin*(double)(1-(i-1)/kaisu)*riritu/12.0;
		printf("%2d : 返済%7d",i,hensai);
		zandaka -= hensai;
		printf(" 残高%7d\n",zandaka);
	}

    return 0;
}
寝てなくて頭がボーっとしてるのでものすごい重大なミスしてたらすみません・・。



返済金額が毎月同じ額になるように計算するには・・・どうしたらいいのでしょう。

利子は毎月残金にかかり、利率の1/12がかかるんでしょうか?

利率r(%ではなく1.05等とする)円でA円借りて、6回で毎月同額L円返すとき
1ヶ月目の残高は

(A)*(r/12)-L

ですよね?2ヶ月目の残高は

((A)*(r/12)-L)*(r/12)-L)

となり、6ヶ月で返済するのなら

(((((((A)*(r/12)-L)*(r/12)-L)*(r/12)-L)*(r/12)-L)*(r/12)-L)*(r/12)-L) = 0

となるって計算でいいんでしょうか?
このLを求めたらいいんでしょうけど、数学が苦手なんで求め方がわかりません(_ _|||)

マグナーテン

Re:借金の計算です。

#6

投稿記事 by マグナーテン » 18年前

最初の説明がわかりにくかったようですいません。

元金均等返済では毎月の支払いは段々減っていきます。
利子は毎月残金に残金にかかり、1/12です。
1ヶ月の残高は 支払額10000、利息3%、支払い回数10回とすると

・毎月返済額は
元金÷支払い回数より
100000/10=10000円
・初回の利息は
元金*年率/12(ヶ月)
100000*0.03/12=250円
・初回返済額は
10000+250=10250円

2回目以降は

・利息は
残高*年率/12
89750*0.03/12=224円
・2回目支払額
10000+224=10225円
・残高は
元金-毎月返済額(金利含)
89750-10225=79525円


回数 返済額 内元金 内利息 残高
総計 101,375 100,000 1,375 100,000
1 10,250 10,000 250 89,750
2 10,225 10,000 225 79,525
3 10,200 10,000 200 69,325
4 10,175 10,000 175 59,150
5 10,150 10,000 150 49,000
6 10,125 10,000 125 38,875
7 10,100 10,000 100 28,775
8 10,075 10,000 75 18,700
9 10,050 10,000 50 8,675
10 8,675 10,000 25 0

となります。scanf関数は理解できました。ありがとうございます。

管理人

Re:借金の計算です。

#7

投稿記事 by 管理人 » 18年前

返済額は毎月徐々に減っていますけどいいんですか?

フリオ

Re:借金の計算です。

#8

投稿記事 by フリオ » 18年前

 
 とりあえずできましたけど、

>回数 返済額 内元金 内利息 残高
>総計 101,375 100,000 1,375 100,000
>1 10,250 10,000 250 89,750
>2 10,225 10,000 225 79,525
>3 10,200 10,000 200 69,325
>4 10,175 10,000 175 59,150
>5 10,150 10,000 150 49,000
>6 10,125 10,000 125 38,875
>7 10,100 10,000 100 28,775
>8 10,075 10,000 75 18,700
>9 10,050 10,000 50 8,675
>10 8,675 10,000 25 0

このサンプルは、間違ってるんじゃないでしょうか?
各返済額を全部足しても総返済額 101375 になりません。
#include <stdio.h>
#include <math.h>

int main(void)
{
    int pri, num, pay, pri_bal, total = 0, odd, i;
    double in;
    
    scanf("%d %d %lf", &pri, &num, &in);
    printf("\n借入金 %d, 返済回数 %d, 年利率 %.3f\n\n", pri, num, in);
    in /= 12;
    odd = pri % num;
    pri_bal = pri;
    puts("回数     支払額  利息   元本残高");
    for(i = 1; i <= num; i ++){
        pay = (int)floor(pri / num + pri_bal * in + (odd > 0) + 0.5);
        printf("%4d %10d %5d %10d\n",
                i,
                pay,
                (int)floor(pri_bal * in + 0.5),
                pri_bal - pri / num - (odd > 0));
        total += pay;
        pri_bal -= pri / num + (odd -- > 0);
    }
    printf("\n総返済額 %d\n", total);
    return 0;
}
 

マグナーテン

Re:借金の計算です。

#9

投稿記事 by マグナーテン » 18年前

自分でやってみた表が間違っていました。
http://www.miya-shoko.or.jp/interest/interes4.html
上のサイトでやるとフリオさんのようになりました。
お忙しいところお時間をかけていただいて、ありがとうございます。

管理人

Re:借金の計算です。

#10

投稿記事 by 管理人 » 18年前

内 元 金、 内 利 息 の合計が毎月同じになるように計算できないんですかねぇ・・。

考えてみたけどよくわかりませんでした(_ _||)

フリオ

Re:借金の計算です。

#11

投稿記事 by フリオ » 18年前

 
 いまさらですが、
元利金等支払いの場合ができたので,載せておきます。
#include <stdio.h>
#include <math.h>

int main(void)
{
	unsigned int num, i;
	double pri, in_rate, pay, pay_pri;
	
	printf("借入金額 : ");
	scanf("%lf", &pri);
	printf("返済回数 : ");
	scanf("%d", &num);
	printf(" 年利率  : ");
	scanf("%lf", &in_rate);
	printf("\n  <借入金額:%d, 返済回数:%d, 年利率:%.3f>\n", (int)pri, num, in_rate);
	in_rate = 0.03 / 12;
	puts("\n[回数]      [返済額]    [内元金]  [内利息]  [元金残高]");
	pay_pri = pri * in_rate / (pow(1 + in_rate, num) - 1);
	for(i = 1; i <= num; i ++){
		pay = pay_pri + pri * in_rate;
		printf("%5d    %10d  %10d  %8d  %10d\n",
				i,
				(int)pay,
				(int)pay_pri,
				(int)(pri * in_rate),
				(int)(pri - pay_pri));
		pri -= pay_pri;
		pay_pri *= (1 + in_rate);
	}
	printf("\n  <返済総額 : %d>\n", (int)(pay_pri * num));
	return 0;
}
 

管理人

Re:借金の計算です。

#12

投稿記事 by 管理人 » 18年前

ホントですね!
なるほど、、そのように計算するのですね。

これからもこのプログラムを参考にさせてもらいます♪

閉鎖

“C言語何でも質問掲示板” へ戻る