Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.10.2011, 20:38   #1
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию Сложный %

Уважаемые, как можно решить задачку по другому (без использования cmath), необходимой найти сложный процент.

Код:
#include <iostream>
#include <cmath>

using namespace std;

int main()
{
	double x = 0, y = 100, z = 0.05;

	int i;
	for (i = 1; i < 10; i++)
	{
		x = y * pow(1.0 + z, i);
		cout << x << endl;
	}

	int c = 0;
	cin >> c;

	return 0;
}
L6go1as вне форума Ответить с цитированием
Старый 26.10.2011, 21:10   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Число x в натуральной степени n равно x, умноженному самому на себя n раз.

Вообще, что такое сложный процент? Это когда, скажем, за месяц начисляется фиксированный процент от суммы вклада. Потом эта начисленная сумма прибавляется к общей сумме вклада, и в следующем месяце база для вычисления процентов становится больше. И так месяц за месяцем, в отличие от простых процентов, которые не прибавляются к сумме (фактически, вычисляясь один раз при снятии вклада).
Вот попробуйте этот процесс сэмулировать. На начало некоторого месяца на счёте была сумма amount, уровень месячных процентов - rate, прошёл месяц. Какая будет сумма на счёте? А если пройдёт ещё месяц?
Abstraction вне форума Ответить с цитированием
Старый 26.10.2011, 21:17   #3
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Единственная функция из cmath - pow, следовательно от неё и нужно избавиться.
Для первой итерации значение будет равно: 1.0 + z
Для второй: квадрат этой суммы
В общем, нужно всего-лишь не с нуля каждый раз высчитывать, а накапливать то, что pow сейчас возвращает.
Код:
double d = 1.0;
for (int i = 1; i < 10; ++i)
{
  d *= 1.0 + z;
  x = y * d;
  cout << x << endl;
}
Как-то вот так.
pu4koff вне форума Ответить с цитированием
Старый 26.10.2011, 21:19   #4
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию

Не, ну я делал по формуле сложного %, а именно s = y * (1 + %)^n, где s - процент, а у - сумма счета. Другое дело, я что схитрил и использовал cmath ... но как представить степень + завязать это на цикле - не очень то понимаю, поэтому ход конем и вуаля, все работает, но ведь интерес то остался )

pu4koff, Ооо, спасибо, а то я себе уже всю голову сломал как степень сделать

Последний раз редактировалось L6go1as; 26.10.2011 в 21:21.
L6go1as вне форума Ответить с цитированием
Старый 26.10.2011, 23:46   #5
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

pu4koff,
А какой вообще смысл в сохранении изначальной суммы вклада?
Код:
for(int month=1; month <= TOTAL_MONTHS; ++month){
    //Прошёл ещё месяц - сумма на счёте увеличилась на процент
    amount*=(1.0 + rate);
    
    std::cout << "Month " << month << " - " << amount << " on my account." << std::endl;
}

Последний раз редактировалось Abstraction; 26.10.2011 в 23:48. Причина: месяцы начиная с 1, так красивее
Abstraction вне форума Ответить с цитированием
Старый 27.10.2011, 10:35   #6
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от Abstraction Посмотреть сообщение
pu4koff,
А какой вообще смысл в сохранении изначальной суммы вклада?
Код:
for(int month=1; month <= TOTAL_MONTHS; ++month){
    //Прошёл ещё месяц - сумма на счёте увеличилась на процент
    amount*=(1.0 + rate);
    
    std::cout << "Month " << month << " - " << amount << " on my account." << std::endl;
}
Никакого. Данная задачка является учебной и человеку её сдавать. Тот код будет понятнее ТС, как мне показалось, т.к. содержит минимум изменений и легче проглядывается ход мысли.
pu4koff вне форума Ответить с цитированием
Старый 27.10.2011, 10:51   #7
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию

pu4koff, не, человеку не сдавать... Человек уже давно все сдал. Сейчас обучение себя родимого С++ больше хобби, чем стремление отчитаться перед преподом - тираном. Ваш код действительно чутка более понятнее, чем уважаемого Abstraction, но ведь по сути это один и тот же код. Просто один записан в стрку, другой в две.
L6go1as вне форума Ответить с цитированием
Старый 27.10.2011, 11:15   #8
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от L6go1as Посмотреть сообщение
pu4koff, не, человеку не сдавать... Человек уже давно все сдал. Сейчас обучение себя родимого С++ больше хобби, чем стремление отчитаться перед преподом - тираном. Ваш код действительно чутка более понятнее, чем уважаемого Abstraction, но ведь по сути это один и тот же код. Просто один записан в стрку, другой в две.
У Abstraction чуть меньше телодвижений совершается и на одну переменную меньше. А так большой разницы нет.
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сложный запрос Deeller БД в Delphi 3 29.04.2011 19:25
Сложный Поиск frantic150 Microsoft Office Excel 1 27.04.2010 06:34
Сложный запрос nikolai_P SQL, базы данных 2 01.04.2010 01:21
Сложный запрос Lianchik Помощь студентам 1 01.03.2010 17:16
Сложный расчет З/П VictorM Microsoft Office Excel 7 08.11.2009 16:51