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

Лабораторная работа№1 часть 1 вариант 5

.doc
Скачиваний:
16
Добавлен:
01.04.2014
Размер:
203.78 Кб
Скачать

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

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

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

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

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

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

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

часть 1

Вариант № 5

Выполнил студент: Бадюля А.В.

группа 901021

Зачетная книжка № 901021-04

Минск 2009

Условие задачи

Вычислить значения функций 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 значений функций:

;

.

С

Да

Нет

Нет

Да

хема алгоритма:

Рис. 1 Схема алгоритма по ГОСТ 19.701 – 9

Программа на языке Паскаль:

PROGRAM LR1;

Uses Crt;

Const

eps1 = 0.01; { Точность 10-2}

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

eps3 = 0.0001; { Точность 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:=sqrt(3)*((x*x)/2)*arctan(x*sqrt(3)/(x+2))+1/4*((x*x+2)*ln(1-x*x*x))-

-1/4*(3*x*x*ln(1-x)); {функция f1}

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

step:=1; {Начальное значение степени Х}

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

k1:= -1;

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

inc(k1);

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

slag:=step/((k1+1)*(3*k1+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; {Наращивается степень}

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

f2_2:=f2_2+slag;

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

f2_3:=f2_2;

k3:=k1;

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

inc(k3);

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

slag:=step/((k3+1)*(3*k3+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.

Результаты работы программы:

Описание схемы алгоритма:

Вначале работы программы задаются значения всех необходимых для работы переменных в соответствии с условием задачи:

a= - 0,6; b= 0,05; N= 20; ε1= 0.01(10-2); ε2= 0.001(10-3); ε3= 0.0001(10-4);

Следом выводится шапка таблицы.

Затем организуем цикл, по значению x начиная с заданного a = - 0.6 увеличивая с каждым шагом на b = 0,05 до достижения нужного количества шагов N = 20.

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

step = 1; f2_1 = 0; k1 = -1;

Далее организуем итерационные циклы по расчету значений функции f2 до достижения требуемых (ранее заданных) точностей ε1; ε2; ε3. На каждом шаге первого цикла считаем степенное значение х step=step*x*x*x и значение функции slag=step/((k1+1)*(3*k1+1)) до достижения точности ε1 abs(slag)<=eps1. После того как достигнута требуемая точность, запоминаем значения k1 и f2_1 и передаем их значения для расчета следующему циклу k2=k1, f2_2=f2_1. Во втором цикле ведем расчеты до достижения точности ε2 abs(slag)<=eps2 и аналогично с первым – запоминаем и передаем значения переменных третьему циклу k3=k2; f2_3=f2_2. В котором ведем расчет до достижения точности ε3 abs(slag)<=eps3. Достигнув требуемых точностей выводим сохраненные расчеты в таблицу:

x; f1; f2_1; f2_2; f2_3; N;

Далее повторяем итерации для следующего значения х.

По окончанию расчета выводятся завершающие таблицу символы.