Лабораторная работа № 1 ОАиП
.docБЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ
Кафедра программного обеспечения информационных технологий
Факультет ЗВиДО
Специальность ПОИТ
Лабораторная работа № 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.
Результаты работы программы