Опубликован: 09.11.2006 | Уровень: для всех | Доступ: свободно | ВУЗ: Кабардино-Балкарский государственный университет
Лекция 8:

Данные, их типы, структуры и обработка

< Лекция 7 || Лекция 8: 123 || Лекция 9 >

Пример. Составим алгоритм вычисления значения полинома 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.
< Лекция 7 || Лекция 8: 123 || Лекция 9 >
Ирина Рыбакова
Ирина Рыбакова

Здравствуйте,ясдавала 15 тестов и экзамен. Мне нужно сейчас посмотреть результаты тестов.Как это сдлеать?

Анастасия Тимофеева
Анастасия Тимофеева