2016-03-13 2 views
0

Мой код компилируется красиво, но математические формулы, которые я использую, не дают правильного результата. Мне нужно рассчитать баланс, аннулировать и проценты на все 3 месяца. Я также обязан проверять ввод пользователя. Для этих целей я использую вложенные циклы. Пожалуйста, дайте мне знать, если вы заметите мою ошибку. Спасибо, милые люди!Код WORKS MAT NOT

cout << "Please enter the starting balance: "; 
cin >> startBalance; 
cout << "Please enter the annual interest rate: "; 
cin >> annualInterest; 

for (int month = 1; month <= 3; month++) { 

     do { 
     cout << setprecision(5); 
     cout << "Please enter the total amount deposited on month " << month << ": "; 
     cin >> balance; 

     if (balance <0) { 
      goodChoice = false; 
      cout << "\n\t***ERROR " << balance << " ***"; 
      cout << "*** Choice must be positive***\n" << endl; 
      } 

      else { 
      goodChoice = true; 
      } 

     startBalance += balance; //need to calculate the balance for all 3 months 

      } while (!goodChoice); 

     do { 
     cout << setprecision(5); 
     cout << "Please enter the total amount withdrawn on " << month << ": "; 
     cin >> withdrawn; 

      if ((withdrawn <0) || (withdrawn > startBalance)) { 
      goodChoice = false; 
      cout << "***ERROR " << withdrawn << " ***"; 
      cout << "*** Choice must be positive or greater than the balance***" << endl; 
      } 

      else { 
      goodChoice = true; 
      } 
      finalWithdrawn += withdrawn; // the total amount of withdrawn 

      finalBalance = startBalance - withdrawn; 

      monthInterest = ((startBalance + finalBalance)/2) * (annualInterest/12); 
      totalInterest += monthInterest; //total interest for all 3 months 
      endBalance = monthInterest + finalBalance; 


     } while (!goodChoice); 
} 

cout << "Total Deposit: " << endBalance << endl; 
cout << "Total Withdrawn: " << finalWithdrawn << endl; 
cout << "Total Interest: " << totalInterest << endl; 
cout << "Final Balance: " << endBalance << endl; 
+1

Просьба указать [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve) и желаемое поведение. Каков ваш вклад? Каков ваш желаемый результат? – MikeCAT

+1

Две вещи: 1. Нам нужно знать объявление ваших переменных; 2. Внизу вы сравниваете «отозванные» и «startBalance» (оба из которых, я полагаю, являются float). Таким образом вы не можете сравнивать поплавки. Подробнее см. Http://stackoverflow.com/questions/17333/most-effective-way-for-float-and-double-comparison. –

+0

1) Я установил все мои переменные в double, bool goodChoice = false. 2) Я говорю, что результат неправильный bc после того, как я подключил цифры. Я получил отрицательные результаты. – sunnysmile24

ответ

0

У вас есть много дополнительных переменных, которые не нужны. Кроме того, ваша процентная ставка может быть в процентах вместо десятичного числа, то есть 10% = 0,1. Кроме того, ваш monthInterest занимает в среднем тогда проценты. Я написал это и, похоже, работает.

#include <iostream> 
#include <iomanip> 

using namespace std; 

int main() 
{ 
    float totalDeposit = 0.0f; 
    float totalWithdrawn = 0.0f; 
    float totalInterest = 0.0f; 
    float totalBalance = 0.0f; 

    float interestRate = 0.0f; 

    setprecision(5); //? 

    cout << "Enter starting balance: "; 
    cin >> totalBalance; 
    cout << "Enter annual interest rate (%): "; 
    cin >> interestRate; 

    // Convert to monthly and non-percent; i.e. 10% = 0.1 = 10/100 
    interestRate = interestRate/100.0f/12.0f; 

    for (int month = 1; month <= 3; month++) 
    { 
     float deposit = -1.0; // Default to an error state 

     while (deposit < 0.0) 
     { 
      cout << "Enter total deposited in month " << month << ": "; 
      cin >> deposit; 

      if (deposit < 0.0f) 
      { 
       cout << "ERROR: Invalid amount" << endl; 
       continue; 
      } 
     } 

     float withdrawn = -1.0f; // Default to an error state 

     while (withdrawn < 0.0f) 
     { 
      cout << "Enter total withdrawn in month " << month << ": "; 
      cin >> withdrawn; 

      if (withdrawn < 0.0f) 
      { 
       cout << "ERROR: Invalid amount" << endl; 
       continue; 
      } 
     } 

     totalDeposit += deposit; 
     totalWithdrawn += withdrawn; 
     totalBalance = totalBalance + deposit - withdrawn; 
     totalBalance += totalBalance * interestRate; 
     totalInterest += totalBalance * interestRate; 
    } 

    cout << "Total Deposit: " << totalDeposit << endl; 
    cout << "Total Withdrawn: " << totalWithdrawn << endl; 
    cout << "Total Interest: " << totalInterest << endl; 
    cout << "Final Balance: " << totalBalance << endl; 

    int wait; // Pause so console window doesn't close. Delete this line. 
    cin >> wait; 

    return 0; 
}