ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 25.03.2019
Просмотров: 1592
Скачиваний: 14
СОДЕРЖАНИЕ
1.1. Метод левых прямоугольников
2. БЛОК-СХЕМА АЛГОРИТМА ОСНОВНОЙ ПРОГРАММЫ:
2.1. Блок-схема алгоритма подпрограммы левых прямоугольников (LPR)
2.2. Блок-схема алгоритма подпрограммы трапеций (TRAP)
2.3. Блок-схема алгоритма подпрограммы Симпсона (SIMP)
2.4. Блок-схема алгоритма подпрограммы Чебышева (CHEB)
3. ТЕКСТ ПРОГРАММЫ
program kurs;
uses crt,graph;
function f(x:real):real;
begin
f:=0.47*exp(ln(x)*0.746)
end;
procedure LPR(a,b:real; var s1:real; n:integer);
var h:real;
i:integer;
begin
h:=(b-a)/n;
s1:=0;
for i:=0 to n-1 do
s1:=s1+f(a+i*h);
s1:=s1*h;
end;
procedure TRAP(a,b:real; var s2:real; n:integer);
var h:real;
i:integer;
begin
h:=(b-a)/n;
s2:=f(a)+f(b);
for i:=1 to n-1 do s2:=s2+2*f(a+i*h);
s2:=s2*h/2;
end;
procedure SIMP(a,b:real; var s3:real; n:integer);
var h:real;
i:integer;
begin
h:=(b-a)/2/n;
s3:=f(a)+f(b);
for i:=1 to 2*n-1 do
begin
s3:=s3+2*f(a+i*h);
if i mod 2 = 1 then s3:=s3+2*f(a+i*h);
end;
s3:=s3*h/3;
end;
procedure CHEB(a,b:real; var s4:real; n:integer);
var x:array [1..5] of real;
var h,xx,s:real;
i,j:integer;
begin
x[1]:=0.083751;
x[2]:=0.312730;
x[3]:=0.500000;
x[4]:=0.687270;
x[5]:=0.916249;
h:=(b-a)/n;
s4:=0;
s:=0;
for i:=1 to n do
begin
xx:=a+h;
for j:=1 to 5 do
begin
s:=s+f(a+(xx-a)*x[j]);
end;
s4:=s4+s*(xx-a)/5;
s:=0;
a:=xx;
end;
end;
procedure grafik(xn,xk:real);
var gd,gm,xl,xp,yv,yn,xt,yt,y0,xt1,yt1,dxp,dyp,kx,ky,ym,xm,k,i,xmax:integer;
nol,j:integer;
st:string[6];
x,yy,dx,ymin,ymax,dy,mx,my:real;
bord1,bord2,bord3,bord4:integer;
begin
clrscr;
dx:=(xk-xn)/100;
ymin:=f(xn);ymax:=ymin;
for i:= 1 to 100 do begin
yy:=f(xn+dx*i);
if yy<ymin then ymin:=yy;
if yy>ymax then ymax:=yy;
end;
if ymin>0 then ymin:=0;
if ymax<0 then ymax:=0;
gd:=detect;
initgraph(gd,gm,'c:\BP\Bgi');
xm:=getmaxx; ym:=getmaxy;
SetBkColor(0); bar(0,0,xm,ym);
bord1:=60; bord2:=30; bord3:=17; bord4:=60;
kx:=9; ky:=8; k:=50;
xl:=bord1;
xp:=xm-bord3;
yv:=bord2;
yn:=ym-bord4;
dxp:=(xp-xl) div kx;
dyp:=(yn-yv) div ky;
dx:=(xk-xn)/kx;
dy:=(ymax-ymin)/ky;
xl:=xp-dxp*kx;
yn:=yv+dyp*ky;
mx:=(xp-xl)/(xk-xn);
my:=(yn-yv)/(ymax-ymin);
setcolor(1);
rectangle(xl,yv,xp,yn);
outtextxy(200,10,'Grafik function y=7.36*lg(x)+0.047');
settextjustify(2,2);
settextstyle(0,1,1);
for i:=0 to kx do begin
x:=xn+dx*i;
xt:=xl+dxp*i;
str(x:6:4,st);
line(xt,yn-3,xt,yn+3);
outtextxy(xt+4,yn+8,st);
end;
settextstyle(0,0,1);
for i:=0 to ky do begin
yy:=ymin+dy*i;
yt:=yn-dyp*i;
str(yy:6:4,st);
line(xl-3,yt,xl+3,yt);
outtextxy(xl-8,yt-4,st);
end;
if xn*xk<0 then begin
xt:=xl-trunc(xn*mx);
line(xt,yn,xt,yv);
end;
if ymax*ymin<0 then begin
yt:=yn+trunc(ymin*my);
line(xl,yt,xp,yt);
end;
dx:=(xk-xn)/k;
nol:=(-bord2+ym-bord4) div 2+14;
nol:=yn;
y0:=yn-trunc((f(xn)-ymin)*my);
for i:=0 to k do begin
x:=xn+dx*i;
yy:=f(x);
xt:=xl+trunc((x-xn)*mx);
yt:=yn-trunc((yy-ymin)*my);
circle(xt,yt,3);
if i<>0 then begin
line(xt,yt,xt1,yt1);
if i mod 5=0 then begin rectangle(xl+trunc((xn+dx*(i-5)-xn)*mx),y0,xl+trunc((xn+dx*(i)-xn)*mx),nol);
for j:=1 to 4 do
line(xl+trunc((xn+dx*(i-5+j)-xn)*mx),y0,xl+trunc((xn+dx*(i-5+j)-
xn)*mx),nol);
y0:=yt;
end;
end;
xt1:=xt;
yt1:=yt;
end;
readln;
closegraph;
end;
const n1=50;
var xn,xk,eps,pog,s1,s2,s3,s4,s0:real;
n:integer;
ff:text;
begin
clrscr;
write(' Read Xn = ');readln(xn);
write(' Read Xk = ');readln(xk);
write(' Read eps = ');readln(eps);
n:=0;
grafik(xn,xk);
clrscr;
assign(ff,'result.txt');
rewrite(ff);
writeln(ff,'Курсовая работа':43);
writeln(ff,'по курсу Информатика':47);
writeln(ff,'"Приближенное вычисление значения':54);
writeln(ff,'определенного интеграла"':50);
writeln(ff,'Выполнил: студент гр. ИБ Иванов И.И.':60);
writeln(ff,'Вариант 7 y=0.47*x^0.746':52);
writeln(ff,'Xn=':25,xn:3:3,' Xk=',xk:3:3,' Eps=',eps:6:4);
writeln(ff,'Результаты вычислений':47);
writeln(ff,'┌───────────┬───────────────────────────────────────────────┬────────────┐');
writeln(ff,'│ Число │ Методы вычисления │ Точность │');
writeln(ff,'│ ├───────────┬───────────┬───────────┬───────────┤ │');
writeln(ff,'│ разбиений │ Левых │ Трапеции │ Симпсона │ Чебышева │ вычисления │');
writeln(ff,'│ │ прямоуг-в │ │ │ │ │');
writeln(ff,'├───────────┼───────────┼───────────┼───────────┼───────────┼────────────┤');
writeln('Курсовая работа':43);
writeln('по курсу Информатика':47);
writeln('"Приближенное вычисление значения':54);
writeln('определенного интеграла"':50);
writeln('Выполнил: студент гр. ИБ Иванов И.И.':60);
writeln('Вариант 7 y=0.47*x^0.746':52);
writeln('Xn=':25,xn:3:3,' Xk=',xk:3:3,' Eps=',eps:6:4);
writeln('Результаты вычислений':47);
writeln('┌───────────┬───────────────────────────────────────────────┬────────────┐');
writeln('│ Число │ Методы вычисления │ Точность │');
writeln('│ ├───────────┬───────────┬───────────┬───────────┤ │');
writeln('│ разбиений │ Левых │ Трапеции │ Симпсона │ Чебышева │ вычисления │');
writeln('│ │ прямоуг-в │ │ │ │ │');
writeln('├───────────┼───────────┼───────────┼───────────┼───────────┼────────────┤');
s0:=0;
repeat
n:=n+n1;
LPR(xn,xk,s1,n);
TRAP(xn,xk,s2,n);
SIMP(xn,xk,s3,n);
CHEB(xn,xk,s4,n);
pog:=abs(s1-s0);
writeln(ff,'│',n:9,' │',s1:10:5,' │',s2:10:5,' │',s3:10:5,' │',s4:10:5,' │',pog:11:6,' │');
writeln('│',n:9,' │',s1:10:5,' │',s2:10:5,' │',s3:10:5,' │',s4:10:5,' │',pog:11:6,' │');
s0:=s1;
until pog<eps;
writeln(ff,'└───────────┴───────────┴───────────┴───────────┴───────────┴────────────┘');
writeln(ff,' ***Требуемая точность достигнута при ',n,' разбиениях ***');
writeln('└───────────┴───────────┴───────────┴───────────┴───────────┴────────────┘') ;
writeln(' ***Требуемая точность достигнута при ',n,' разбиениях ***');
close(ff);
readln;
end.
4. РЕЗУЛЬТАТ РАБОТЫ ПРОГРАММЫ В ВИДЕ ГРАФИКА
Программа строит график функции с иллюстрацией метода левых прямоугольников.
5. РЕЗУЛЬТАТ РАБОТЫ ПРОГРАММЫ В ВИДЕ ТАБЛИЦЫ
Курсовая работа
по курсу Информатика
"Приближенное вычисление значения
определенного интеграла"
Выполнил: студент гр. ИБ Иванов И.И.
Вариант 7 y=0.47*x^0.746
Xn=0.311 Xk=2.037 Eps=0.0001
Результаты вычислений
------------T-----------------------------------------------T------------¬
¦ Число ¦ Методы вычисления ¦ Точность ¦
¦ +-----------T-----------T-----------T-----------+ ¦
¦ разбиений ¦ Левых ¦ Трапеции ¦ Симпсона ¦ Чебышева ¦ вычисления ¦
¦ ¦ прямоуг-в ¦ ¦ ¦ ¦ ¦
+-----------+-----------+-----------+-----------+-----------+------------+
¦ 50 ¦ 0.88685 ¦ 0.89725 ¦ 0.89726 ¦ 0.89726 ¦ 0.886848 ¦
¦ 100 ¦ 0.89206 ¦ 0.89726 ¦ 0.89726 ¦ 0.89726 ¦ 0.005213 ¦
¦ 150 ¦ 0.89380 ¦ 0.89726 ¦ 0.89726 ¦ 0.89726 ¦ 0.001736 ¦
¦ 200 ¦ 0.89466 ¦ 0.89726 ¦ 0.89726 ¦ 0.89726 ¦ 0.000867 ¦
¦ 250 ¦ 0.89518 ¦ 0.89726 ¦ 0.89726 ¦ 0.89726 ¦ 0.000520 ¦
¦ 300 ¦ 0.89553 ¦ 0.89726 ¦ 0.89726 ¦ 0.89726 ¦ 0.000347 ¦
¦ 350 ¦ 0.89578 ¦ 0.89726 ¦ 0.89726 ¦ 0.89726 ¦ 0.000248 ¦
¦ 400 ¦ 0.89596 ¦ 0.89726 ¦ 0.89726 ¦ 0.89726 ¦ 0.000186 ¦
¦ 450 ¦ 0.89611 ¦ 0.89726 ¦ 0.89726 ¦ 0.89726 ¦ 0.000144 ¦
¦ 500 ¦ 0.89622 ¦ 0.89726 ¦ 0.89726 ¦ 0.89726 ¦ 0.000116 ¦
¦ 550 ¦ 0.89632 ¦ 0.89726 ¦ 0.89726 ¦ 0.89726 ¦ 0.000095 ¦
L-----------+-----------+-----------+-----------+-----------+-------------
***Требуемая точность достигнута при 550 разбиениях ***
6. ТЕОРЕТИЧЕСКАЯ ЧАСТЬ
При создании программы для решения сложной задачи выполняется разделение этой задачи на подзадачи, подзадач – на ещё меньшие подзадачи и т.д., до легко программируемых элементарных задач.
Турбо Паскаль имеет различные средства для деления программ на части. На верхнем уровне деления (больших задач) – модули, на нижнем уровне (элементарных подзадач) – чаще всего процедуры и функции.
Процедуры и функции являются важным средством в большинстве языков программирования. С их помощью можно скомпоновать группу операторов для выполнения некоторого единого действия. Процедуру/функцию можно вызывать из различных мест программы, она может возвращать вычисленные результаты, и ей можно передавать информацию, которую она использует для вычисления. Для того чтобы процедура/функция начала работу, её нужно вызвать (активизировать).
Процедуры и функции состоят из операторов, локальных данных и внутренних процедур и функций. Структура описания процедуры и функции имеет следующий вид:
|
PROCEDURE Имя (Список Формальных Параметров);
LABEL – Описание локальных меток CONST – Описание локальных констант TYPE – Описание локальных типов VAR – Описание локальных переменных PROCEDURE – Описание внутренних процедур FUNCTION - Описание внутренних функций
BEGIN операторы END |
|
FUNCTION Имя (Список Формальных Параметров): Тип результата; LABEL – Описание локальных меток CONST – Описание локальных констант TYPE – Описание локальных типов VAR – Описание локальных переменных PROCEDURE – Описание внутренних процедур FUNCTION - Описание внутренних функций
BEGIN Операторы, среди которых должен быть хотя бы один, который присваивает имени функции значение результата. END |
Отличия в описании функции и процедуры касаются только заголовка и раздела операторов, что отмечено непосредственно в приведённых рисунках.
В
программе используется функция
для вычисления текущего значения
функции, а также процедуры LPR
(метод левых прямоугольников), TRAP
(метод трапеций), SIMP
(метод Симпсона) и CHEB
(метод Чебышева).
Для сохранения результаты работы программы были помещены в дисковый файл.
Для работы с каким-либо дисковым файлом, находящемся на жестком диске компьютера, необходимо первоначально связать его с файловой переменной (логическим файлом), с помощью которой будет осуществляться доступ к этому дисковому файлу. Связывание дискового и логического файлов выполняется процедурой Assign, которая может использоваться только для закрытого файла. Первым параметром этой процедуры является файловая переменная, вторым параметром – строковая константа или идентификатор строковой переменной, значением которых должно быть имя дискового файла, указанное согласно правилам записи идентификаторов в MS-DOS.
Assign (out, ‘out.Dat’);
Перед выполнением каких-либо операций чтения и записи в файлах, эти файлы должны быть открыты.
Открытие файлов выполняется процедурами Reset (для ввода информации из файла) и Rewrite (для вывода информации в файл), а закрытие – процедурой Close.
Rewrite(out);
Операция вывода информации в файл осуществляется с помощью оператора
Write(out,’’);
Writeln(out,’ ‘);
Оператор цикла Repeat позволяет организовать цикл с неизвестным числом повторений. Проверка условия при такой организации цикла осуществляется в конце цикла в операторе Until. Цикл выполняется до тех пор пока не будет выполнено условие указанное в Until. В нашем случае организованы два цикла один в одном. Первый цикл контролирует условие выполнения условия достижения точности вычисления, второй - границы интервала, показан ниже
repeat
s1:=s1+Fun(x)*h;
s2:=s2+(Fun(x)+Fun(x+h))/2 *h;
Zet;
s3:=s3+h*(Fun(z1)+Fun(z2)+Fun(z3))/3;
x:=x+h;
until x>=b;
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ
-
Введение в язык Паскаль. /В.Г. Абрамов, Н.П. Трифонов, Г.Н. Трифонова. Учеб. Пособие. - М.: Наука. Гл. ред. Физ. - мат. лит., 1988.
-
В.И. Нечаев, О.А. Нечаева, Л.Н. Почуева. Численные методы, Тула, 1999 г.
-
Основы информатики. Учеб. пособие/В.М. Еганов, Н.М. Качурин, А.Е. Коряков, С.П. Туляков; - Тул.гос.ун-т, Тула, 2000. - 323 с.
-
Пискунов Н.С. Дифференциальное и интегральное исчисление, Т.1, М.: Наука,
1985.