ИПР1 часть 1, вариант 11
.docБЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ
Кафедра программного обеспечения информационных технологий
Факультет ФНиДО
Специальность ПОИТ
Лабораторная работа № 1
по дисциплине «Основы алгоритмизации и программирования»
часть 1
Вариант № 11
Выполнила:
Минск 2012
1). Задание
Для аргумента , изменяющегося от –0.6 с шагом 0.05 вычислить 20 значений функций:
Функцию f2(x) вычислить для ряда точностей . Для указанных точностей определить количество N элементов ряда, суммируемых для достижения заданной точности. Результаты расчетов свести в следующую таблицу:
|
|
|
|
|
|
|
|
x |
f1(x) |
|
|
|
|||
f2(x) |
N |
f2(x) |
N |
f2(x) |
N |
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
…. |
|
|
|
|
|
|
|
2). Схема алгоритма
На рис. 1 приведен способ графического представления алгоритма.
Рис. 1. Схема алгоритма по ГОСТ 19. 701-90
3). Программа на языке Pascal
Далее приведена программа на языке Pascal, также данная программа хранится в файле IPR1.pas
Program IPR1;
Uses CRT;
Const
eps1=0.01; {точность}
eps2=0.001; {точность}
eps3=0.0001; {точность}
b=0.05; {шаг}
x0=-0.6; {начальное значение X}
N=20; {количество значений функции}
Var
a,k1,k2,k3:integer;
i:integer; {счетчик шагов}
Y,f1,f2,f2_1,f2_2,f2_3,S,x:real;
Begin
ClrScr;
TextColor(0);
TextBackGround(15);
ClrScr;
{Рисуем шапку таблицы}
writeln('__________________________________________________________');
writeln('| | | eps=0.01 | eps=0.001 | eps=0.0001 |');
writeln('| | |____________________________________________|');
writeln('| x | f1(x) | f2(x) | N | f2(x) | N | f2(x) | N |');
writeln('|____|________|_________|_____|__________|____|__________|____|');
x:=x0; {начальное значение X}
For i:=1 to N do
begin
f1:=sin(x)-(x/2)*(1+cos(x))-sin(x)*ln(abs(2*cos(x/2)));{вычисляется
значение функции f1}
{вычисляется значение функции f2}
k1:=0;
f2_1:=0;
repeat {итерационный цикл для точности eps1}
begin
inc(k1);
if ((k1 mod 2)=0) then
a:=1
else a:=-1;
Y:=x*a*sin(k1+1)/(k1*(k1+1)); {считается очередное слагаемое}
f2_1:=f2_1+Y; {считаем значение функции f2_1}
end
until abs(Y)<=eps1; {выход из цикла, когда слагаемое становится
меньше точности eps1}
k2:=k1;
f2_2:=f2_1;
repeat {итерационный цикл для точности eps2}
begin
inc(k2);
if ((k2 mod 2)=0) then
a:=1
else a:=-1;
Y:=x*a*sin(k2+1)/(k2*(k2+1)); {считается очередное слагаемое}
f2_2:=f2_2+Y; {считаем значение функции f2_2}
end
until abs(Y)<=eps2; {выход из цикла, когда слагаемое становится
меньше точности eps2}
k3:=k2;
f2_3:=f2_2;
repeat {итерационный цикл для точности eps3}
begin
inc(k3);
if ((k3 mod 2)=0) then
a:=1
else a:=-1;
Y:=x*a*sin(k3+1)/(k3*(k3+1));{считается очередное слагаемое}
f2_3:=f2_3+Y; {считаем значение функции f2_3}
end
until abs(Y)<=eps3; {выход из цикла, когда слагаемое становится
меньше точности eps3}
{вывод результатов}
writeln('|',x:5:2,'|',f1:12:9,'|',f2_1:9:2,'|',k1:3,'|',f2_2:8:3,'|',
k2:3,'|', f2_3:8:4,'|',k3:3,'|');
x:=x+b {увеличиваем значение Х на величину шага}
end;
{завершение таблицы}
writeln('__________________________________________________________');
readln
end.
4).Итоговая таблица
5).Описание схемы алгоритма
-
Объявляем переменные;
-
Переменной Х присваиваем начальное значение в соответствии с условием задачи;
-
Рисуем шапку таблицы;
-
Начинаем «цикл со счетчиком с шагом 1» от единицы до двадцати. Как только счетчик превысит двадцать, выполнение цикла прекращается и мы переходим к п.30;
-
Вычисляем значение функции f1;
-
Присваиваем начальные значения переменным для вычисления функции f2 (далее – f2_1, f2_2, f2_3) для точностей eps1, eps2, eps3 соответственно: счетчику количества слагаемых k1 (равен «0»), функции f2_1 (равна «0»);
-
Начинаем итерационный цикл для точности eps1;
-
Увеличиваем счетчик количества слагаемых k1 на единицу;
-
Проверяем к1 на четность. Если к1 является четным числом, то множитель а равен «1», иначе – «-1»;
-
Считаем очередное слагаемое;
-
Считаем значение функции f2_1;
-
Проверяем условие итерационного цикла для точности eps1. Пока очередное слагаемое больше eps1, повторяем выполнение пунктов, начиная с п.8. В противном случае переходим к следующему пункту;
-
Присваиваем счетчику числа слагаемых k2 и функции f2_2 значения k1 и f2_1 соответственно, полученные в предыдущем итерационном цикле;
-
Начинаем итерационный цикл для точности eps2;
-
Увеличиваем счетчик количества слагаемых k2 на единицу;
-
Проверяем к2 на четность. Если к2 является четным числом, то множитель а равен «1», иначе – «-1»;
-
Считаем очередное слагаемое;
-
Считаем значение функции f2_2;
-
Проверяем условие итерационного цикла для точности eps2. Пока очередное слагаемое больше eps2, повторяем выполнение пунктов, начиная с п.15. В противном случае переходим к следующему пункту;
-
Присваиваем счетчику числа слагаемых k3 и функции f2_3 значения k2 и f2_2 соответственно, полученные в предыдущем итерационном цикле;
-
Начинаем итерационный цикл для точности eps3;
-
Увеличиваем счетчик количества слагаемых k3 на единицу;
-
Проверяем к3 на четность. Если к3 является четным числом, то множитель а равен «1», иначе – «-1»;
-
Считаем очередное слагаемое;
-
Считаем значение функции f2_3;
-
Проверяем условие итерационного цикла для точности eps3. Пока очередное слагаемое больше eps3, повторяем выполнение пунктов, начиная с п.22. В противном случае переходим к следующему пункту;
-
Выводим результаты в таблице;
-
Вычисляем следующее значение переменной Х;
-
Возвращаемся в п.4;
-
Завершаем таблицу.