Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Код компилируется, но не выполняется

{Oxygen} Ученик (76), закрыт 1 неделю назад
суть такова:
x = начальное число
y =максимальное число
p = проценты, на которые увеличивается х каждый год

нужно посчитать через сколько лет начальное число станет не менее y рублей.

дан такой код:


 #include  
using namespace std;

int main() {
int x,p,y, years;
years = 0;
cin>>x>>p>>y;
while (x x *= (1 + (p/100));
x = x/100;
years++;
}
cout<return 0;
}
при вводе x = 100, p = 10, y = 200
years должна равняться 8, но ничего не подсчитывается.

Код запускается, но не выполняется. Пожалуйста, укажите мою ошибку..
Лучший ответ
Ламзин Андрей Просветленный (35394) 1 месяц назад
У вас условие x меньше y в цикле, и он все время уменьшается. Не происходит выхода из цикла.
Остальные ответы
Беспрекословный Эксперт Мыслитель (5795) 1 месяц назад
В вашем коде есть логическая ошибка, из-за которой неверно производится расчёт нового значения x. Вы выполняете целочисленное деление, которое приводит к потере точности и неправильному результату в выражении (1 + (p/100)). Поскольку p - целочисленное значение, выражение (p/100) будет давать 0 до тех пор, пока p меньше 100.

Чтобы исправить это, вам нужно использовать вещественные числа для процентов. Используйте тип данных float или double для переменных x, p, y и для вычисления процента. Вот как можно исправить вашу программу:
 #include   
using namespace std;

int main() {
double x, p, y; // Используйте тип данных double для хранения вещественных чисел
int years = 0; // years остается целочисленной переменной, так как количество лет не может быть дробным
cin >> x >> p >> y;
while (x < y) {
x *= (1 + p / 100.0); // Используйте 100.0 для обозначения вещественного литерала
years++;
}
cout << years << endl;
return 0;
}
После этих изменений ваша программа должна корректно вычислять количество лет, необходимых для достижения суммы y при начальном вкладе x и процентной ставке p.
Николай Веселуха Высший разум (361051) 1 месяц назад
 #include   
using namespace std;
int main() {
int x, p, y, years = 0;
cin >> x >> p >> y;
while (x < y) {
x += p * x / 100;
++years;
}
cout << years << endl;
}
{Oxygen}Ученик (76) 1 месяц назад
при вводе однозначного p код также не выполняется. С двухзначным все хорошо
Николай Веселуха Высший разум (361051) {Oxygen}, так и задача не совсем понятная. То ли десятые доли копеек следует не учитывать при зачислении процентов, то ли все копейки следует не учитывать. Мой код все копейки не учитывает. А решений с копейками у вас уже и так полным-полно.
Похожие вопросы