2015-03-03 48 views
-2

好吧,在爲此工作了幾個小時之後,我認爲我想出了一些對於真正的「真正的」程序員來說不那麼令人畏縮的東西。
允許我提交我的卑微和可能很糟糕的代碼。
它完全有效,但現在我的問題是,我試圖讓它回到最初的問題,如果響應是負數。我明白了,「嘿!不要輸入一個負數!」,然後它會進入下一個提示。這是我目前輸出的負輸入:C++中的複合興趣函數

**歡迎使用消費貸款計算器** 您想借多少錢? $ -100 請輸入正確的貸款金額。 你的年度百分比率是多少? %

...而對於正輸入:

**歡迎消費者貸款計算器** 多少你想借錢? $ 100 你想借多少錢? $ 100 你想借多少錢? $

我想讓它回到「你想借多少錢?」如果用戶輸入爲負值,並且只有在輸入爲正值時才轉到下一個問題。我現在做錯了什麼?

#include <iostream> 
#include <cmath> 
#include <iomanip> 
#include <cstdlib> 
using namespace std; 

void get_input (double &principal, double &APR, double mon_pay); 

int main() 
{ 
    double loan; // principal 
    double APR; // APR 
    double mon_pay; //monthly payment 

    cout << "** Welcome to the Consumer Loan Calculator **"<<endl; 
    do { 
     cout << "How much would you like to borrow? $"; 
     cin >>loan; 
     if (loan < 0) 
     cout <<"Please enter a positive loan amount."; 
     } 
    while (loan > 0); 
    cout << "What is your annual percentage rate? %"; 
    cin >>APR; 
    cout << "What is your monthly payment? $"; 
    cin >> mon_pay; 

    APR = APR/100; 
    get_input (loan, APR, mon_pay); 

} 

void get_input (double &principal, double &APR, double mon_pay) 
{ 
    double total, add=0; // Total payment 
    int tpay=1; //Total months of payment 

    while (principal > 0) 
    { 
     add = principal * (APR/100); 
     principal = ((principal+add) - mon_pay); 
     tpay++; 
    } 

    total = mon_pay + principal; 
    cout << "Your debt will be paid off after "<< tpay << " months, with a final payment of just $" <<setprecision(3)<<total<<endl; 
    cout <<"Don't get overwhelmed with debt!"<<std::endl; 

} 
+0

考慮添加作業標籤。 – erip 2015-03-03 03:10:52

+0

我剛剛檢查,無法找到家庭作業的標籤。感謝您的建議。你碰巧對我的問題有什麼建議嗎? – 2015-03-03 03:12:55

+0

請參閱我的回答以獲取建議。 – erip 2015-03-03 03:48:12

回答

2

這一行肯定是錯誤的:

while (int tp=1, double p <= double m, double sub--m) 
+0

這應該是一個評論,而不是答案。 – erip 2015-03-03 03:16:20

+0

是的。完全意識到這一點。也許我應該在這裏問一個不同的問題: 創建此循環的最佳方法是什麼?而?做什麼?對於? 我全力以赴瞭解自己的事情,並且我理解數學所涉及的內容,但我需要指出正確的方向以及如何去做。 – 2015-03-03 03:34:04

1

從根本上說,也有很多與此代碼的問題。我建議開始消除所有全局變量。他們會讓你的代碼更易於調試,並且它被認爲是不好的做法一般使用它們。此外,我會爲你的變量選擇更多的描述性標識符 - 它會使邏輯更加深奧。例如,對於變量名稱,m是一個糟糕的選擇。爲什麼不選擇monthly_pay或更清晰的東西?

此外,while循環的參數爲布爾型。你寫的東西沒有意義,我真的不確定如果編譯器現在沒有尖叫,編譯器會做什麼。我的猜測是,從int tp=1始終評估爲真,將會處於無限循環。

最後,學習模塊化代碼是值得的。根據你的代碼,我敢說你是代碼領域的初學者。這是非常好的做法(並且很好地遵循邏輯)來模塊化您的代碼。如果你親自做這個工作,你會遵循什麼邏輯步驟?

  1. 迎接用戶
  2. 獲取輸入
  3. 做一些計算
  4. 輸出給用戶
  5. 告別

如果有更多的細節,預期成果等,我d建議將它們添加到您的問題或被標記爲過於寬泛的風險。

祝你的作業好運。 erip

EDIT

完全忘了功能。

與數學一樣,函數需要參數。

f(x)= x^2 + 2x - 1.這個函數的參數顯然是x。

在編程中,一些函數也需要參數。

比方說,你想模擬this方程...

你可能會考慮做這樣的事情:

#include <math.h> 

double compound_interest(double r, int n, double t, double P) 
{ 
    return P*pow((1+ r/n), n*t); 
} 

所以,如果你想在你的主

//insert header stuff, function declarations, etc. 

int main() 
{ 
    double rate = 0.1, // 10% 
      time = 10.0, // 10 months 
      principle = 125.00, // $125.00 
      accumulated; // This is what we want to know 
    int payment_period = 12; // 12 months 

    accumulated = compound_interest(rate, payment_period, time, principle); 

    cout << "Total accumulated cost is " << accumulated << endl; 

    return 0; 
} 
調用此
+0

小記,我不認爲這會起作用,因爲我不記得'pow'採用的參數類型,但它可以被操縱。 – erip 2015-03-03 03:51:07

+0

嗨那裏 - @erip我很欣賞你花時間試着回答我的問題。是的,我是一名初學者。我35歲,擁有職業生涯和2個大學學位。我正在努力學習這一點,以促進我的職業生涯。我意識到很多人來她爲他們做功課,但不是每個人。我們中的一些人正在合理地學習這一點(在我的情況下,需要額外的幫助來理解!)。你們沒有一個從子宮編碼中出來。每個人都必須學習。向下投票的帖子尋求幫助只是粗魯。幫助或不幫助。儘管如此,它並不會殺死任何人以保持最低限度。 – 2015-03-03 22:57:34

+0

我既不*故意*粗魯,我也不投票。我沒有被嚇倒。我意識到你正在努力學習,這就是爲什麼我全面回答。如果你被冒犯了,我很抱歉。完全不是我的目標。祝你好運。 – erip 2015-03-04 06:25:19