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

Лабораторная работа № 1 ОАиП

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

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

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

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

Факультет ЗВиДО

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

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

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

часть 1

Вариант № 4

Выполнил студент: Голубев А.В.

группа 801021

Зачетная книжка № 801021с-03

Минск 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 значений функций:

;

.

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

Текст программы

Program ANDREY;

Uses winCrt;

Const

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

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

eps3 = 1e-4; { Точность 10-4 }

Var

m{количество значений}, n {количество элементов ряда -1}, k1, k2, k3, i, j, f: longint;

a{начальное значение}, dx{шаг}, x, f1, f2, f2_1, f2_2, f2_3, s: Real;

begin

clrscr;

writeln('Программа вычисления значений функций f1(x) и f2(x)');

writeln;

write('Введите начальное значение a='); read(a);

write('Введите шаг изменения dx='); read(dx);

write('Введите количество значений m='); read(m);

{Рисуется шапка таблицы}

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('----------------------------------------------------------------------------');

for i:=0 to m-1 do

begin

x:=a+dx*i; {значение x}

f1:=(((exp(x)-1/exp(x))/2)+sin(x))/2; { Вычисляется значение функции f1(x)}

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

n:=0; {номер элемента ряда}

s:=x; {Начальное значение степени x}

f:=1; {значение факториала}

f2:=s/f; {Начальное значение функции f2(x)}

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

n:=n+1; {переход к следующему элементу ряда}

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

for j:=4*n-2 to 4*n+1 do f:=f*j; {расчет факториала числа 4n+1}

f2:=f2+s/f; {Считается значение f2(x) и очередного слагаемого}

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

k1:=n+1; f2_1:=f2; {сохранение значений n и f2(x)}

while abs(s/f)>eps2 do {Итерационный цикл для точности 10-3}

begin

n:=n+1; {переход к следующему элементу ряда}

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

for j:=4*n-2 to 4*n+1 do f:=f*j; {расчет факториала числа 4n+1}

f2:=f2+s/f; {Считается значение f2(x) и очередного слагаемого}

end; {Выход из цикла, когда слагаемое становится меньше точности 10-3}

k2:=n+1; f2_2:=f2; {сохранение значений n и f2(x)}

while abs(s/f)>eps3 do {Итерационный цикл для точности 10-2}

begin

n:=n+1; {переход к следующему элементу ряда}

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

for j:=4*n-2 to 4*n+1 do f:=f*j; {расчет факториала числа 4n+1}

f2:=f2+s/f; {Считается значение f2(x) и очередного слагаемого}

end; {Выход из цикла, когда слагаемое становится меньше точности 10-4}

k3:=n+1; f2_3:=f2; {сохранение значений n и f2(x)}

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

writeln('|',x:5:2,'|',f1:14:11,'|',f2_1:14:11,'|', k1:2,

'|',f2_2:14:11,'|',k2:2,'|',f2_3:14:11,'|', k3:2,'|');

end;

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

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

readkey

end.

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

5