Как сделать арифметическую прогрессию в C++?
начал изучать C++ в универе, 1 курс, но это не важно. На лабе задали сделать арифметическую и геометрическую прогрессию и сложить суммы всех членов в той и в другой прогрессиях. Запретил использовать циклы и проверку условия if. Код целиком скидывать не прошу, просто натолкните на путь истинный, пожалуйста. Но от кода тоже не откажусь, постараюсь разобраться. Всем мир.
Ответы (1 шт):
Могу предложить три варианта. На примере арифметической прогрессии. В Вашей формулировке не совсем ясно, что имел в виду преподаватель (а может, это он так поставил задачу), так что мы практически пальцем в небо тыкаем.
Самый очевидный и простой вариант, который предложил господин MBo из комментариев - воспользоваться формулой арифметической прогрессии.
int main( )
{
int first = 1; // первый член прогрессии
int step = 1; // разность прогрессии
int number = 10; // количество суммируемых членов
int result = (2 * first + step * (number - 1)) * number / 2;
cout << result << endl;
}
Вариант второй - использовать рекурсию вместо цикла и тернарный оператор ?: вместо if (switch)
int arithmetic(int steps, int previous, int add)
{
steps
? previous += arithmetic(steps - 1, previous + add, add)
: previous
;
return previous;
}
int main( )
{
int first = 1;
int step = 1;
int number = 10;
int result = arithmetic(number - 1, first, step);
cout << result << endl;
}
Вариант третий - совсем без условных переходов (даже в виде хитрого тернарного оператора) - рекурсия с использованием шаблонов. Навряд ли это на первом курсе дают - разделяю мнение господина Wlad в комментариях.
Но раз мы не знаем точного задания, то просто Вам на будущее и для любопытства. Ну и может просто еще кому-то понадобится.
template<int steps>
int arithmetic(int previous, int add)
{
previous += arithmetic<steps - 1>(previous + add, add);
return previous;
}
template< >
int arithmetic<0>(int previous, int add )
{
return previous;
}
int main( )
{
int first = 1;
int step = 1;
int number = 10;
int result = arithmetic<number - 1>(first, step);
cout << result << endl;
}