C ++ Использование «if else» и счетчик переменных для итераций цикла должны привести к нулевому балансу - PullRequest
0 голосов
/ 22 февраля 2011

Я использую «if else» и переменную count для итераций цикла, что должно привести к нулевому балансу. Я написал свой код для следующей проблемы, но я не могу получить окончательные результаты. Какой итоговый баланс должен показывать нулевой баланс. Я хотел бы знать, как это исправить. Пожалуйста, смотрите проблему и код ниже. Заранее спасибо.

ПРОБЛЕМА Вы только что приобрели стерео система, которая стоит 2000 долларов на следующий кредитный план: нет вниз платеж, процентная ставка 18% за год (и, следовательно, 1,5% в месяц) и ежемесячные платежи $ 75.

Ежемесячный платеж в размере 75 долларов США используется для платить проценты и все, что осталось более используется для оплаты части оставшийся долг. Следовательно, первый месяц Вы платите 1,5% от 2000 долларов США в виде процентов. Это 30 долларов в процентах. Итак остальные 45 долларов вычитаются из вашего долг, который оставляет вам долг $ 1955,00. В следующем месяце вы платите проценты 1,5% от $ 1955,00, что 29,32 доллара, а вы вычитаете 75 - 29,32 доллара что составляет $ 45,67 от суммы, которую вы должны.

Пусть ваша программа распечатает месяц, сумма уплаченных процентов, а также сумма уплаченного долга и долг, который остается в хорошей таблице форма. Не забудьте включить строку в таблица за последний месяц, который вы платить. Ваш оставшийся долг должен быть ноль для этой линии! Не забудьте распечатать деньги на 2 знака после запятой, а показано ниже.

Sample output: 
Thank you for purchasing your new stereo system.
The following is your payment plan for the cost of $2000.00
with 1.50% interest and payments of $75.00 a month.

Month   Interest Paid   Debt Paid       Total Payment   Balance
1            30.00              45.00              75.00                 1955.00
2            29.32              45.67              75.00                 1909.33
3            28.64              46.36              75.00                 1862.96
4            27.94              47.06              75.00                 1815.91
5            27.24              47.76              75.00                 1768.15
6            26.52              48.48              75.00                 1719.67
7            25.80              49.20              75.00                 1670.47
8            25.06              49.94              75.00                 1620.52
9            24.31              50.69              75.00                 1569.83
10          23.55              51.45              75.00                 1518.38
11          22.78              52.22              75.00                 1466.15
12          21.99              53.01              75.00                 1413.15
13          21.20              53.80              75.00                 1359.34
14          20.39              54.61              75.00                 1304.73
15          19.57              55.43              75.00                 1249.30
16          18.74              56.26              75.00                 1193.04
17          17.90              57.10              75.00                 1135.94
18          17.04              57.96              75.00                 1077.98
19          16.17              58.83              75.00                 1019.15
20          15.29              59.71              75.00                 959.43
21          14.39              60.61              75.00                 898.83
22          13.48              61.52              75.00                 837.31
23          12.56              62.44              75.00                 774.87
24          11.62              63.38              75.00                 711.49
25          10.67              64.33              75.00                 647.16
26          9.71                65.29              75.00                 581.87
27          8.73                66.27              75.00                 515.60
28          7.73                67.27              75.00                 448.33
29          6.73                68.27              75.00                 380.06
30          5.70                69.30              75.00                 310.76
31          4.66                70.34              75.00                 240.42
32          3.61                71.39              75.00                 169.03
33          2.54                72.46              75.00                 96.56
34          1.45                73.55              75.00                 23.01
35          0.35                23.01              23.36                 0.00

Обратите внимание, что последний платеж составляет $ 23,36,

Подсказки: используйте переменную для подсчета количества итераций цикла и, следовательно, количества месяцев, пока задолженность не станет равной нулю.

Будьте осторожны, последний платеж может быть менее $ 75. Также не забывайте проценты за последний платеж. Если вы должны 75 долларов, ваш ежемесячный платеж в размере 75 долларов не окупится, но приблизится.

Удостоверьтесь, что вы внимательно смотрите на ваш конечный результат, чтобы убедиться, что он правильный!

МОЙ КОД

#include<iostream>
#include<string>
using namespace std;

int main()
{
    float balance;
    float interest;
    cout.setf(ios::fixed);
    cout.setf(ios::showpoint);
    cout.precision(2);

    double loan, monthlypay, IntRat;
    double e = 0;
    double a, b, c, d;
    double Interestpay;
    double i;

    cout << "Enter the amount of the loan: $";
    cin >> loan;
    cout << "Enter the interst per year:";
    cin >> Interestpay;
    cout << "Enter the monthly pay: $";
    cin >> monthlypay;

    c = loan;

    cout << endl;
    cout << endl;
    cout << endl;
    for ( i=1; c>0; i++)


    {
        IntRat = Interestpay/100/12;

        a = IntRat*c;

        b = monthlypay-a;

        cout << "Month: "<<i<<endl;
        cout << "Principle Interest:" <<a<<endl;
        cout << "Principle Remaining: $" <<b<<endl;

        c = c-b;
        cout << "You still have a balance of: $" <<c<<endl;
        cout << endl;
        d=e+a;
        e=d;

    }

    i=i-1;
    if (c >=b)
           c = c -b;

    else if (c>0.1)
           c=c*1;
           c = 0;


        cout << "Your last payment is " <<  c << endl;

        cout << "\nThe total month is:" <<i<<endl;
        cout << "The total Interest paid is:" <<d<<endl;
        cout << "You have a credit of:" <<c<<endl;

    return 0;

}

Ответы [ 2 ]

7 голосов
/ 22 февраля 2011

Как правило, не рекомендуется использовать типы с плавающей запятой для представления денежных сумм. Обычно лучше использовать «фиксированную точку». Простой способ сделать это, например, используйте целочисленный тип, такой как int, и просто увеличивайте масштаб.

Вместо того, чтобы делать

double monthlyPayment = 75.0;

использование

int montlyPayment = 7500;

Тогда вам нужно разделить на 10 2 , если вы, например, умножьте две суммы валют вместе, и так далее, но выполнение этого способа часто может сделать вычисления более точными (если вы не выходите за пределы диапазона, но для этого простого примера я думаю, что вы будете в безопасности).

Если вам нужна большая точность, масштабируйте ее на большее значение, например 10000, но имейте в виду, что это уменьшает диапазон.

4 голосов
/ 22 февраля 2011

Вкратце, возможно, вы имеете в виду:

i=i-1;
if (c >=b)
{
       c = c -b;
}else if (c>0.1)
{
       c=c*1;
       c = 0;
}

В вашем коде c = 0; выполняется независимо от условия if.Если это не так, пожалуйста, исправьте свой код.

Если вы имеете в виду то, что я публикую в этом ответе, вы понимаете, что c будет 0?Если ваш код соответствует вашим ожиданиям, вы понимаете, что независимо от того, что c будет 0?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...