Лабораторная работа 1, вариант 13
.docБЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ
Кафедра программного обеспечения информационных технологий
Факультет НиДО
Специальность ПОИТ
Лабораторная работа № 1
по дисциплине «Основы алгоритмизации и программирования»
часть 1
Вариант № 13
Минск 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 значений функций:
;
.
2) Схема алгоритма
На рис. 1 представлена схема алгоритма данной задачи по ГОСТ 19. 701-90.
3) Текст программы
program lab1;
uses crt;
const n=20; {количество значений функции}
eps1=0.01; {точность 10-2}
eps2=0.001; {точность 10-3}
eps3=0.0001; {точность 10-4 }
a=-0.6; {начальное значение аргумента}
b=0.05; {шаг}
c=-1; {значение, которое будем возводить в степень}
var i,k1,k2,k3:integer; {вспомогательные переменные}
x,f1,f2_1,f2_2,f2_3,step,slag: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; {начальное значение x}
for i:=1 to n do {цикл для вычисления каждого значения x}
begin
f1:=ln(2*cos(x/2)); {вычисляем значение функции f1}
k1:=1; {номер элемента ряда}
step:=1; {начальное значение степени (-1) при k=1}
f2_1:=cos(x); {начальное значение функции f2 при k=1}
repeat {итерационный цикл для точности 10-2}
inc(k1); {увеличиваем k на 1}
step:=step*c; {считаем степень (-1) при k1}
slag:=step*cos(k1*x)/k1; {считаем очередное слагаемое функции}
f2_1:=f2_1+slag; {прибавляем к общей сумме полученное слагаемое}
until abs(slag)<=eps1; {выходим из цикла, когда слагаемое становится меньше точности 10-2}
f2_2:=f2_1;
k2:=k1;
repeat {итерационный цикл для точности 10-3}
inc(k2); {увеличиваем k на 1}
step:=step*c; {считаем степень (-1) при k2}
slag:=step*cos(k2*x)/k2; {считаем очередное слагаемое функции}
f2_2:=f2_2+slag; {прибавляем к общей сумме полученное слагаемое}
until abs(slag)<=eps2; {выходим из цикла, когда слагаемое становится меньше точности 10-3}
f2_3:=f2_2;
k3:=k2;
repeat {итерационный цикл для точности 10-4 }
inc(k3); {увеличиваем k на 1}
step:=step*c; {считаем степень (-1) при k3}
slag:=step*cos(k3*x)/k3; {считаем очередное слагаемое функции}
f2_3:=f2_3+slag; {прибавляем к общей сумме полученное слагаемое}
until abs(slag)<=eps3; {выходим из цикла, когда слагаемое становится меньше точности 10-4 }
writeln('| ',x:5:2,' | ',f1:2:7,' | ',f2_1:2:2,' | ',k1:5,' | ',f2_2:2:3,' | ',k2:5,' | ',f2_3:2:4,' | ',k3:5,' |'); {вывод на экран очередной строки таблицы}
writeln('|_______|___________|______|_______|_______|_______|________|_______|'); {подчеркиваем строку таблицы линией}
x:=x+b; {увеличиваем значение аргумента на шаг}
end;
readkey;
end.
4) Результат работы программы
x |
f1(x) |
e=0.01 |
e=0.001 |
e=0.0001 |
|||
f2(x) |
N |
f2(x) |
N |
f2(x) |
N |
||
-0.60 |
0.6474555 |
0.64 |
13 |
0.652 |
34 |
0.6464 |
144 |
-0.55 |
0.6548482 |
0.65 |
20 |
0.657 |
60 |
0.6544 |
277 |
-0.50 |
0.6615661 |
0.67 |
16 |
0.656 |
22 |
0.6611 |
267 |
-0.45 |
0.6676182 |
0.67 |
24 |
0.667 |
108 |
0.6670 |
178 |
-0.40 |
0.6730124 |
0.70 |
4 |
0.671 |
51 |
0.6724 |
161 |
-0.35 |
0.6777559 |
0.68 |
22 |
0.678 |
94 |
0.6782 |
175 |
-0.30 |
0.6818547 |
0.67 |
16 |
0.681 |
47 |
0.6810 |
89 |
-0.25 |
0.6853143 |
0.69 |
19 |
0.684 |
44 |
0.6855 |
245 |
-0.20 |
0.6881388 |
0.70 |
8 |
0.689 |
55 |
0.6878 |
165 |
-0.15 |
0.6903320 |
0.69 |
10 |
0.691 |
73 |
0.6905 |
157 |
-0.10 |
0.6918967 |
0.69 |
15 |
0.692 |
47 |
0.6916 |
110 |
-0.05 |
0.6928346 |
0.70 |
27 |
0.693 |
31 |
0.6928 |
157 |
0.00 |
0.6931472 |
0.69 |
100 |
0.693 |
1000 |
0.6931 |
10000 |
0.05 |
0.6928346 |
0.70 |
27 |
0.693 |
31 |
0.6928 |
157 |
0.10 |
0.6918967 |
0.69 |
15 |
0.692 |
47 |
0.6916 |
110 |
0.15 |
0.6903320 |
0.69 |
10 |
0.691 |
73 |
0.6905 |
157 |
0.20 |
0.6881388 |
0.70 |
8 |
0.689 |
55 |
0.6878 |
165 |
0.25 |
0.6853143 |
0.69 |
19 |
0.684 |
44 |
0.6855 |
245 |
0.30 |
0.6818547 |
0.67 |
16 |
0.681 |
47 |
0.6810 |
89 |
0.35 |
0.6777559 |
0.68 |
22 |
0.678 |
94 |
0.6782 |
175 |
Да
Да
Рис. 1 Схема алгоритма по ГОСТ 19. 701-90
5) Описание схемы алгоритма
Начало и конец алгоритма отображаем с помощью символа «Терминатор».
Для перехода алгоритма на другую и страницу и удобства отображения используем символы-переносы.
-
Вводятся константы, с помощью символа «Данные».
-
Начальному значению x присваиваем значение a, используем символ «Процесс».
-
Переменной I присваиваем начальное значение 1, используем символ «Процесс».
-
Цикл «For - to - do» для переменной I, используем символ «Условие» (I<=20).
-
В этом цикле выполняем:
-
Считаем f1, присваиваем k начальное значение 1, переменной step (для подсчета степени (-1)) присваиваем начальное значение 1, f2_1 считаем для k=1, используем символ «Процесс»
-
Входим в цикл «repeat». Тело цикла содержит в себе: увеличение k на 1, подсчет очередной степени (-1), подсчет очередного слагаемого, прибавление слагаемого в общей сумме. Тело цикла изображаем с помощью символа «Процесс», а условие, при котором происходит выход из цикла – с помощью символа «Условие». Условие: точность 10-2.
-
Значению f2_2 присваиваем значение f2_1, а значению k2 присваиваем значение k1. Используем символ «Процесс».
-
Входим в цикл «repeat». Тело цикла содержит в себе: увеличение k на 1, подсчет очередной степени (-1), подсчет очередного слагаемого, прибавление слагаемого в общей сумме. Тело цикла изображаем с помощью символа «Процесс», а условие, при котором происходит выход из цикла – с помощью символа «Условие». Условие: точность 10-3.
-
Значению f2_3 присваиваем значение f2_2, а значению k1 присваиваем значение k2. Используем символ «Процесс».
-
Входим в цикл «repeat». Тело цикла содержит в себе: увеличение k на 1, подсчет очередной степени (-1), подсчет очередного слагаемого, прибавление слагаемого в общей сумме. Тело цикла изображаем с помощью символа «Процесс», а условие, при котором происходит выход из цикла – с помощью символа «Условие». Условие: точность 10-4.
-
Вывод очередной строки таблицы. Используем символ «Данные».
-
Увеличиваем x на размер шага, используем символ «Процесс».
-
Увеличиваем I на 1 (используем символ «Процесс») для перехода к началу основного цикла и подсчета следующей строки таблицы.
-
-
Конец алгоритма.