Задача на цикл, ошибка в теле цикла - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Всем привет! Тут такое задание, необходимо просчитать прибыль к выходу на пенсию.Изначально допустим мы должны 40000 под 3% годовых, каждый месяц вносим 500. Тогда цикл устанавливаем на каждый месяц: сначала мы должны 40000 через месяц учитывая 3% годовых мы должны 40100, но затем выплачиваем 500 и наш долг становится равен 39600. через месяц снова увеличивается долг на 0.03% и снова платеж 500. В итоге ответ должен выйти 587281.54, но у меня входит лишь 300 с лишним тысяч. В чем моя ошибка, может кто подскажет?
void finalfightfunction(){
    double payment = 500;                       //500 - ежемесячный платеж
    double owe_loans = 40000;                       //- 40000 - изначальный долг,позже пойдет в плюс
    double interest_loans = 0.03;           //0,03 - 3% годовых 
    double current_age = 22;                        //22 - наст возраст
    double retire_age = 65;                     //65  пенс возраст
    double amountofmonth = 0;             
    double resultat = 0;
    amountofmonth =  (retire_age - current_age) * 12;                     //количество месяцев до пенсии
    
    owe_loans = -owe_loans;
    
    for(int i = 0;i < amountofmonth ; i++) {
    resultat =  owe_loans + owe_loans * (interest_loans / 12);       //40100
    owe_loans =  resultat + payment;                                //39,694. 68
    }
    printf ("bla bla bla  bla bla bla %lf\n", owe_loans);
    
}

Решение задачи: «Задача на цикл, ошибка в теле цикла»

textual
Листинг программы
#include <stdio.h>
 
int main(int argc, char* argv[])
{
  double owe_loans = -40000;
  double savings = 0;
  double payment = 500;
 
  double interest_loans = 0.03;
  double interest_savings = 0.05;
 
  unsigned current_age = 22;
  unsigned retire_age = 65;
  unsigned amountofmonth = (retire_age - current_age) * 12;
 
  while (amountofmonth > 0 && owe_loans < 0)
  {
    owe_loans += owe_loans * (interest_loans / 12);
    owe_loans += payment;
    --amountofmonth;
  }
 
  savings += owe_loans;
 
  while (amountofmonth > 0)
  {
    savings += savings * (interest_savings / 12);
    savings += payment;
    --amountofmonth;
  }
 
  printf("%.2lf\n", savings);
}

Объяснение кода листинга программы

В этом коде две вложенные петли while.

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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.571 из 5
Похожие ответы