Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лаба №1

.docx
Скачиваний:
13
Добавлен:
01.04.2014
Размер:
249.79 Кб
Скачать

БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ

Кафедра программного обеспечения информационных технологий

Факультет ФНиДО

Специальность ПОИТ

Лабораторная работа № 1

по дисциплине «Основы алгоритмизации и программирования»

часть 1

Вариант № 8

Выполнил студент: Батура Анастасия Владимировна

группа 001021

Зачетная книжка № 001021-07

Минск 2010

Задача:

Вычислить значения функций f1(x) и f2(x) для значений аргументов, указанных в вариантах заданий № 1 – 30 по первой работе. Функцию f2(x) вычислить для ряда точностей . Для указанных точностей определить количество N элементов ряда, суммируемых для достижения заданной точности. Результаты расчетов свести в следующую таблицу:

x

f1(x)

f2(x)

N

f2(x)

N

f2(x)

N

….

Для аргумента , изменяющегося от –0.6 с шагом 0.05 вычислить 20 значений функций:

Примечание: Так как получаемое значение функции получается очень маленьким, мной была увеличена точность вычисления f2 на порядок для всех трех точностей.

Листинг:

PROGRAM Lab1;

Uses crt;

Const

eps1 = 0.001; { Точность 10-3}

eps2 = 0.0001; { Точность 10-4 }

eps3 = 0.00001; { Точность 10-5 }

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;

function pow(A,B:Real):Real; {Функция возведения числа А в степень В}

var T:Real;

begin

T := Abs(A);

if A < 0 then pow := (-1)*Exp(B*Ln(T))

else pow := Exp(B*Ln(T));

end;

begin

{Очистка экрана и построение шапки таблицы}

clrscr;

writeln('___________________________________________________________');

writeln('| | | e=0.001 | e=0.0001 | e=0.00001 |');

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:=1/36*(11*pow(x,3)-15*sqr(x)+6*x+6*pow(1-x,3)*ln(1-x)); { Вычисляется значение функции f1}

{ Вычисляется значения функции f2}

step:=pow(x,3); {Начальное значение степени Х}

f2_1:=0; {Начальное значение функции f2_1}

k1:=0;

repeat {Итерационный цикл для точности 10-3}

inc(k1);

step:=step*x; {Наращивается степень}

slag:=step/(k1*(k1+1)*(k1+2)*(k1+3)); {Считается очередное слагаемое}

f2_1:=f2_1+slag; {Считается значение f2_1}

until abs(slag)<=eps1; {Выход из цикла, когда слагаемое становится меньше точности 10-3}

f2_2:=f2_1;

k2:=k1;

repeat {Итерационный цикл для точности 10-4}

inc(k2);

step:=step*x; {Наращивается степень}

slag:=step/(k2*(k2+1)*(k2+2)*(k2+3)); {Считается очередное слагаемое}

f2_2:=f2_2+slag;

until abs(slag)<=eps2; {Выход из цикла, когда слагаемое становится меньше точности 10-4}

f2_3:=f2_2;

k3:=k2;

repeat {итерационный цикл для точности 10-5}

inc(k3);

step:=step*x; {Наращивается степень}

slag:=step/(k3*(k3+1)*(k3+2)*(k3+3)); {Считается очередное слагаемое}

f2_3:=f2_3+slag;

until abs(slag)<=eps3; {Выход из цикла, когда слагаемое становится меньше точности 10-5}

{ Вывод результатов}

writeln('| ', x:5:2,' | ',f1:12:9,'| ',f2_1:5:3,'|',

k1:2,' | ',f2_2:6:4,'|',k2:2,' | ',f2_3:7:5,'|',k3:2,' |');

x:=x+b;

end;

{ завершение таблицы }

write('-----------------------------------------------------------');

repeat until keypressed;

end.

Таблица с результатами расчетов:

Схема алгоритма по ГОСТ 19. 701-9: