Другие языки программирования и технологии

Решение задачи на языке программирования С++.

Здравствуйте! Я начинающий программист и мне нужна помощь с решением задачи: если стипендию, равную kol, каждые полгода увеличивать на 10%, то через какое время она достигнет величины rez.
Программа запускается, но после ввода rez ничего не происходит. Я несколько раз её переделывала, но всё равно ничего не выходит. Помогите, пожалуйста! Вот код:

C++Выделить код
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include
#include
using namespace std;
int kol, rez, m, ost;
float prc;
int main(){
setlocale(0,"");
cout<< "Введите вашу стипендию на данный момент (в рулях)." << endl;
cin>> kol;
cout<< "Введите ту стипендию, на которую вы рассчитываете учиться в дальнейшем (в рублях)." << endl;
cin>> rez;
m=0;
prc=0,1;
while(kol<=rez){
kol=kol+kol*prc;
m++;
}
ost=m%2;
if(m>0){
cout<< "Вы будете получать стипендию в размере "<< kol<< " рублей примерно через ";
if(ost=5){
m--;
m/=2;
switch(m){
case 1: cout<< "1,5 года."; break;
case 2: cout<< "2,5 года."; break;
case 3: cout<< "3,5 года."; break;
case 4: cout<< "4,5 года."; break;
case 5: cout<< "5,5 лет."; break;
case 6: cout<< "6,5 лет."; break;
case 7: cout<< "7,5 лет."; break;
case 8: cout<< "8,5 лет."; break;
default: cout<< "9,5 лет."; break;
}
}else{
m/=2;
switch(m){
case 1: cout<< "1 год."; break;
case 2: cout<< "2 года."; break;
case 3: cout<< "3 года."; break;
case 4: cout<< "4 года."; break;
case 5: cout<< "5 лет."; break;
case 6: cout<< "6 лет."; break;
case 7: cout<< "7 лет."; break;
case 8: cout<< "8 лет."; break;
default: cout<< "9 лет."; break;
}
}
}else{
cout<< "Вы будете получать стипендию в размере "<< kol<< " рублей через пол года или никогда.";
}
return 0;
}
Переменная m введена для расчёта времени, ost - остаток от деления m на 2 (его я ввела для определения целого года или года с половиной), prc - соответственно процент, на который увеличивается стипендия. Стипендия увеличивается на 10% от последней (например, первые полгода kol=100, затем kol=110, затем kol=121)
prc=0,1; - точка с запятой перепутаны.
kol=kol+kol*prc; - куда проще написать: kol *= 1.1; И kol должна быть double, а не int.

Задача решается вообще без циклов - если ты откроешь школьный учебник математики.

rez = kol * 1.1 ** n (** - в степени), n - номер месяца
1.1 ** n = rez / kol
ln(1.1 ** n) = ln(rez / kol)
n * ln(1.1) = ln(rez / kol)
n = ln(rez / kol) / ln(1.1) - округляем вверх

Кол-во месяцев:

double kol, rez;
cin >> kol >> rez;
cout << ceil(log(rez / kol) / log(1.1));
АЦ
Антон Цветков
72 162
Лучший ответ
Дима Берёзов Какова целесообразность использования логарифмов в данной задаче? Я задавал ранее этот вопрос, но мне ответили, что разницы нет. Хотелось бы услышать реально от тех, кто применяет их на практике...
Олег Прасков Человеческое огромное спасибо Вам! Я уже всю голову сломала. Спасибо ещё раз)))
Пользователь вводит исходную и требуемую сумму. Программа находит первый из периодов, когда исходная сумма вырастет больше или станет равна требуемой.
Решение через рекурсивный вызов анонимного метода.
Если есть вопросы - спрашивай.

#include <iostream>
#include <windows.h>
#include <functional>
#include <iomanip>

using namespace std;

int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
system("color 0A");

double kol,
rez,
delta = 0.1,
step = 0.5;
cout << "Введите стартовый размер стипендии ";
cin >> kol;
cout << "Введите размер стипендии, который нужно достичь ";
cin >> rez;

if (kol > rez)
{
cout << "Вы никогда больше не будете получать " << rez << " рублей" << endl;
}
else if (kol == rez)
{
cout << "Вы уже получаете " << rez << " рублей" << endl;
}
else
{
//pair<Период Сумма>
function<pair<double, double>(pair<double, double>)> f = [&f, delta, step, rez]
(
pair<double, double> value
)
{
value.second *= delta + 1.;
value.first += step;
cout << "Через " << setw(5u) << fixed << setprecision(1u) << value.first
<< " года Вы будете получать "
<< setw(8u) << fixed << setprecision(2u) << value.second << " рублей" << endl;
if (value.second >= rez)
{
return value;
}
return f(value);
};
auto r = f(make_pair(0, kol));
cout << "Вы будете получать стипендию в размере " << fixed << setprecision(2u)
<< r.second << " рублей через " << fixed << setprecision(1u)
<< r.first << " года" << endl;
}

system("pause");
return 0;
}