ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 25.03.2019

Просмотров: 1582

Скачиваний: 14

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

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;


СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

  1. Введение в язык Паскаль. /В.Г. Абрамов, Н.П. Трифонов, Г.Н. Трифонова. Учеб. Пособие. - М.: Наука. Гл. ред. Физ. - мат. лит., 1988.

  2. В.И. Нечаев, О.А. Нечаева, Л.Н. Почуева. Численные методы, Тула, 1999 г.

  3. Основы информатики. Учеб. пособие/В.М. Еганов, Н.М. Качурин, А.Е. Коряков, С.П. Туляков; - Тул.гос.ун-т, Тула, 2000. - 323 с.

  4. Пискунов Н.С. Дифференциальное и интегральное исчисление, Т.1, М.: Наука,

1985.