Даны натуральное число [latex]n[/latex], действительный числа [latex]x[/latex], [latex]a_{n}, a_{n-1}, \ldots, a_{0}[/latex]. Вычислить используя схему Горнера, значение [latex]a_{n}{x}^{n} + a_{n-1}{x}^{n-1} + \cdots + a_{0}.[/latex] [latex]a_{n}{x}^{n} + a_{n-1}{x}^{n-1} + \cdots + a_{0} = \left( \ldots \left(a_{n}{x} + a_{n-1}\right)x + \cdots + a_{1}\right)x + a_{0}.[/latex]
[latex]n[/latex] | [latex]x[/latex] | [latex]{a}_{n}[/latex] | [latex]{a}_{n-1}[/latex] | [latex]{a}_{n-2}[/latex] | [latex]{a}_{n-3}[/latex] | [latex]s[/latex] |
3 | 2 | 5 | 4 | 3 | 2 | 64 |
2 | 1 | 3 | 4 | 7 | _ | 14 |
3 | 0 | 3 | 4 | 12 | 8 | 8 |
3 | 5 | 0 | 10 | 12 | 8 | 318 |
1 | 5 | 2 | 1 | _ | _ | 11 |
Начинаем с коэффициента с рядом с [latex]X[/latex]-ом c максимальной степенью, у нас это элемент [latex]{a}_{n}[/latex], мы последовательно умножаем его (коэффициент) на [latex]X[/latex], а потом прибавляем следующий считанный коэффициент и сохраняем полученное значение в переменной.
Это был пример решения для [latex]n=2[/latex], если же [latex]n>2[/latex], то мы должны выполнить алгоритм для [latex]n=2[/latex], после чего [latex]n-2[/latex] раз умножать полученное в переменной значение на [latex]X[/latex] и прибавлять последующий элемент.
Осталось только написать программу: http://ideone.com/ScO3aw.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#include <cstdlib> #include <iostream> using namespace std; int main() { int n, x; cin >> n >> x; int a[n+1]; for (int i = n; i >= 0; --i) { cin >> a[i]; } int s = a[n]; for (int i = 1; i <= n; ++i) { s *= x; s += a[n-i]; } cout << s << endl; } |
По программе претензий почти нет — все верно, кроме размера массива a. Как Вы думаете сколько в нем элементов?
В формуле схемы Горнера опечатка, в скобках должно быть a_n * x.
А вот формулы для R и S я вообще понять не могу, какая-то странная у Вас нотация R(i=0) = … Советую описать стандартную рекуррентную последовательность типа S_0 =… или S_1=… и S_i = как выраж через S_{i-1} / или S_{i+1} = как выраж через S_{i}. Можно S_n=…, S_i выразить через S_{i+1}.
Т.е. в математике лучше чтобы была задана последовательность, но в программе, так как не нужно запоминать последовательность — храним только какой-то текущий элемент, который называем просто S.
Исправлено
Засчитано, 10 баллов, но все же «Это был пример решения для n=2, если же n>2, то мы должны выполнить алгоритм для n=2, после чего n-2 раз умножать полученное в переменной значение на X и прибавлять последующий элемент.» — не очень хороший стиль изложения
Достаточно было немного модифицировать предыдущее предложение и все было бы понятно без этого абзаца, например так:
«Начальным значением переменной s полагаем коэффициент с рядом с X-ом c максимальной степенью, у нас это элемент {a}_{n}, далее мы последовательно умножаем значение s на X, а потом прибавляем следующий считанный коэффициент. » или
«Начинаем вычисление с коэффициента рядом с X-ом c максимальной степенью, у нас это элемент {a}_{n}, далее мы последовательно умножаем текущее значение на X, а потом прибавляем следующий считанный коэффициент, сохраняя полученное значение в переменной s.»
Вам повезло, что Александр Сергеевич не обратил внимание 🙂
Вы использовали массивы, а тема — потоковая обработка. Т.е. массивы здесь не только ненужны, но и запрещены!