тест |
Данные, их типы, структуры и обработка
Пример. Составим алгоритм вычисления значения полинома Pn(x) = а0хn + а1хn–1 + ... + аn для заданного значения x. Метод решения – метод (схема) Горнера. Опишем его. Заметим, что:
1) при n = 0, P0(x) = a0 ;
2) при n = 1, P1(x) = a0x + a1 = P0(x) x + a1 ;
3) при n = 2, P2(х) = a0x2 + a1x + a2 = (a0x + a1)x + a2 = P1(x)x + a2 ;
. . .
n) Pn(x) = a0xn + a1xn–1 + ... + an–1x + an = (a0xn–1 + a1xn–2 + ... + an–1)x + an = Pn–1(x)x + an .
Таким образом, всегда верно рекуррентное соотношение Горнера:
Текущее Р := Предыдущее Р*x + Текущий коэффициент полинома.
Эту схему реализуем в алгоритме (программе) вида:
Program Gorner; Uses Crt; Var a: array [0..100] of real; n, i: integer; p, x: real; Begin ClrScr; WriteLn('Введите порядок полинома :'); { приглашение к вводу входного параметра } ReadLn(n); { ввод первого входного параметра } WriteLn('Введите число x :'); { приглашение к вводу второго входного параметра } ReadLn(x); { ввод второго входного параметра } for i:=0 to n do { цикл схемы Горнера } begin WriteLn('a[',i,']='); { приглашение к вводу очередного коэффициента полинома} ReadLn(a[i]); { ввод очередного коэффициента полинома } end; p:=a[0]; { начальное (для n=0) значение полинома – см. схему Горнера} for i:=1 to n do { цикл накапливания значения полинома по схеме Горнера } p:=p*x+a[i]; { находим полином текущей степени i используя предыдущий } WriteLn('Полученнoe значение p = ', p:3:3); { вывод результата } End.
Пример. Составим алгоритм вычисления суммы и произведения всех элементов a[i,j], i = 1, 2, ..., n ; j = 1, 2, ..., m заданной матрицы. Метод решения: построчно проходя все элементы массива, добавляем к предыдущему значению суммы новый элемент матрицы и умножаем предыдущее значение произведения на этот же элемент. Алгоритм (программа) имеет вид
Program SPM2; Uses Crt; Var a: array [1..100,1..100] of real; n, m, i, j: integer; s, p: real; Begin ClrScr; WriteLn('Введите количество строк:'); { приглашение к вводу входного параметра } ReadLn(n); { ввод первого входного параметра } WriteLn('Введите количество столбцов:'); { приглашение к вводу второго параметра } ReadLn(m); { ввод второго входного параметра } for i:=1 to n do { цикл ввода – перебора строк } for j:=1 to m do { цикл перебора элементов текущей строки } begin WriteLn('a[',i,',',j,']='); { приглашение к вводу очередного элемента массива } ReadLn(a[i,j]); { ввод очередного элемента массива } end; s:=0; { начальное значение суммы – нуль } p:=1; { начальное значение произведения – единица } for i:=1 to n do { цикл перебора строк для суммирования } for j:=1 to m do { цикл перебора элементов строки (столбцов) для суммирования } begin s:=s+a[i,j]; { добавление очередного элемента к текущему значению суммы} p:=p*a[i,j]; { умножение текущего значения произведения на новый элемент } end; WriteLn('Сумма равно : ', s:3:3); { вывод первого результата } WriteLn('Произведение равно : ', p:3:3); { вывод второго результата } End.