2017-10-12 5 views
2
#include <iostream> 
#include <cmath> 
using namespace std; 


/* FINDS AND INITIALIZES TERM */ 

void findTerm(int t) { 
int term = t * 12; 

} 

/* FINDS AND INITIALIZES RATE */ 
void findRate(double r) { 
double rate = r/1200.0; 

} 

/* INITALIZES AMOUNT OF LOAN*/ 
void findAmount(int amount) { 
int num1 = 0.0; 
} 

void findPayment(int amount, double rate, int term) { 
int monthlyPayment = amount * rate/(1.0 -pow(rate + 1, -term)); 

cout<<"Your monthly payment is $"<<monthlyPayment<<". "; 
} 

これは主な機能です。私はこの住宅ローン計算式で何が間違っていますか?

int main() { 
int t, a, payment; 
double r; 

cout<<"Enter the amount of your mortage loan: \n "; 
cin>>a; 

cout<<"Enter the interest rate: \n"; 
cin>>r; 

cout<<"Enter the term of your loan: \n"; 
cin>>t; 

findPayment(a, r, t); // calls findPayment to calculate monthly payment. 

return 0; 
} 

私はそれを何度も繰り返しましたが、それでも私には間違った量が与えられます。 私の教授は私たちにこのように書き例与えた: ローン= $ 200,000個の

率= 4.5%を

期間:30年

とfindFormula()関数は、住宅ローンのための$ 1013.67を作ることになっています支払い。私の教授は、このコードも教えてくれました(monthlyPayment = amount * rate /(1.0 - pow(rate + 1、-term));)。私は自分のコードに何が問題なのかよく分かりません。

+0

使用される計算式は何ですか? –

+0

住宅ローンの総費用は365ドルになる –

+0

あなたは4.5または0.0045としてあなたの率を入力しますか? –

答えて

2

数式は問題ありませんが、変換関数の値が返されたり使用されたりしていないため、入力が間違っています。

あなたのプログラムのこのリファクタリングを考えてみましょう:

#include <iostream> 
#include <iomanip>  // for std::setprecision and std::fixed 
#include <cmath> 

namespace mortgage { 

int months_from_years(int years) { 
    return years * 12; 
} 

double monthly_rate_from(double yearly_rate) { 
    return yearly_rate/1200.0; 
} 

double monthly_payment(int amount, double yearly_rate, int years) 
{ 
    double rate = monthly_rate_from(yearly_rate); 
    int term = months_from_years(years); 
    return amount * rate/(1.0 - std::pow(rate + 1.0, -term)); 
} 

} // end of namespace 'mortgage' 

int main() 
{ 
    using std::cout; 
    using std::cin; 

    int amount; 
    cout << "Enter the amount of your mortage loan (dollars):\n"; 
    cin >> amount; 

    double rate; 
    cout << "Enter the interest rate (percentage):\n"; 
    cin >> rate; 

    int term_in_years; 
    cout << "Enter the term of your loan (years):\n"; 
    cin >> term_in_years; 

    cout << "\nYour monthly payment is: $ " << std::setprecision(2) << std::fixed 
     << mortgage::monthly_payment(amount, rate, term_in_years) << '\n'; 
} 

それはまだユーザー入力のいずれかのチェックを欠いたが、あなたの例の値が与えられ、それが出力:

 
Enter the amount of your mortage loan (dollars): 
200000 
Enter the interest rate (percentage): 
4.5 
Enter the term of your loan (years): 
30 

Your monthly payment is: $ 1013.37 

少し違いからあなたの予想される出力(1013、 7)は、どんな種類の丸め誤差であっても、コンパイラによって選択されたstd::powの異なるオーバーロードさえもある可能性があります(C++ 11以来、積分パラメータはdouble)。

関連する問題