БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ Кафедра программного обеспечения информационных технологий
Факультет ФНиДО Специальность ПОИТ
Лабораторная работа № 1 по дисциплине «Основы алгоритмизации и программирования» часть 1 Вариант № 1
Выполнил студент: Рябченко А.И.
Минск 2013 1). Задание Для аргумента , изменяющегося от –0.6 с шагом 0.05 вычислить 20 значений функций: ;
Функцию f2(x) вычислить для ряда точностей . Для указанных точностей определить количество N элементов ряда, суммируемых для достижения заданной точности. Результаты расчетов свести в таблицу. 2). Схема алгоритма. На рис. 1 представлена схема алгоритма по ГОСТ 19. 701-90. 3). Текст программы. PROGRAM Ex1; Uses Crt; Const eps1 = 0.01; { Точность 10-2} eps2 = 0.01; { Точность 10-3 } eps3 = 0.001; { Точность 10-4 } a = -0.6; { Начальное значение Х} b = 0.05; { Шаг} N = 20; { Количество значений функции } Var k1, k2, k3, i: Integer; {Вспомогательные переменные} f1, f2_1, f2_2, f2_3, step, slag, x: Real;
BEGIN ClrScr; {Рисуется шапка таблицы} writeln('__________________________________________________________'); writeln('| | | e=0.01 | e=0.001 | e=0.0001 |'); writeln('| x | f1(x) |----------|-----------|------------|'); writeln('| | | f2(x)| N | f2(x) | N | f2(x) | N |'); writeln('|_______|_____________|______|___|_______|___|________|___|'); x := a; {Начальное значение Х} for i:=1 to N do begin f1:=(-x/4)+((sqrt(2)*(1+x*x*x*x))/32) *((((ln(sqr(x)+x*sqrt(2)+1)/(sqr(x)-x*sqrt(2)+1)))+(2*Arctan((x*sqrt(2))/(1-sqr(x)))))); { Вычисляется значение функции f1} { Вычисляется значения функции f2} step:=x; {Начальное значение степени Х} f2_1:=0; {Начальное значение функции f2_1} k1:=-1; repeat {Итерационный цикл для точности 10-2} inc(k1); step:=step*x*x*x*x; {Наращивается степень} slag:=step/((4*k1+1)*(4*k1+5)); {Считается очередное слагаемое} if (k1 mod 2=0) THEN slag:=slag*1 else slag:=slag*(-1); f2_1:=f2_1+slag; {Считается значение f2_1} until abs(slag)<=eps1; {Выход из цикла, когда слагаемое становится меньше точности 10-2} f2_2:=f2_1; k2:=k1; repeat {Итерационный цикл для точности 10-3} inc(k2); step:=step*x*x*x*x; {Наращивается степень} slag:=step/((4*k2+1)*(4*k2+5)); {Считается очередное слагаемое} if (k1 mod 2=0) THEN slag:=slag*1 else slag:=slag*(-1); f2_2:=f2_2+slag; until abs(slag)<=eps2; {Выход из цикла, когда слагаемое становится меньше точности 10-3} f2_3:=f2_2; k3:=k2; repeat {итерационный цикл для точности 10-4} inc(k3); step:=step*x*x*x*x; {Наращивается степень} slag:=step/((4*k3+1)*(4*k3+5)); {Считается очередное слагаемое} if (k1 mod 2=0) THEN slag:=slag*1 else slag:=slag*(-1); f2_3:=f2_3+slag; until abs(slag)<=eps3; {Выход из цикла, когда слагаемое становится меньше точности 10-4} { Вывод результатов} writeln('| ', x:5:2,' | ',f1:12:9,'| ',f2_1:5:2,'| ', k1:2,'| ',f2_2:6:3,'| ',k2:2,'| ',f2_3:7:4,'| ', k3:2,'|'); x:=x+b; end; { завершение таблицы } write('-----------------------------------------------------------'); ReadKey END.