Основные этапы разработки программы вычисления определенного интеграла функции по методу Симпсона

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

богатую историю развития.

Новую жизнь языку дала фирма Борланд, разработавшая на его базе семейство Паскаль - систем, называемых Турбо Паскалем. Интегрированная среда, обеспечивающая многооконную разработку программной системы, обширный набор встроенных в неё средств компиляции и отладки, доступных для работы через легко осваиваемое меню, - всё это обеспечивает высокую производительность труда программиста, недостижимую при работе со старыми средами.

Выбор языка Pascal не случаен - это учебный язык, с легко просматриваемой алгоритмикой программы; язык типизирован, что позволяет на его основе изучать более сложные языки; язык позволяет научиться хорошему стилю программирования.

 

4. Текст программы решения задачи

 

Program tr_s;

uses crt, graph;m, m1;:char;, b:real; {Границы отрезка}

r, r2:real; {Предыдущее и текущее приближенные значения интеграла}:integer; {Счетчики}, f2:real; {Числитель и Знаменатель}

s1, s2, s3:real; {Степени}

k, o:real; {Некоторые коэффициенты}

{Интегрируемая функция}f (x:real):real;:=k*exp (s1*ln(x)); {k*(x в степени s1)}:=exp (s2*ln (ln(x)/ln(o))); {log o x - это ln(x)/ln(o)}:=f1/f2;;

{Метод трапеций}trap (a, b:real; n:integer):real;

var:real; {Полученная сумма}:real; {Шаг}:integer; {Счетчик}:=(b-a)/(n-1); {Определяется шаг}:=(f(a)+f(b))/2; {Начальное значение суммы}m:=1 to n-2 do s:=s+f (a+m*h); {Суммирование остальных элементов}:=s*h; {Возвращается значение интеграла}

end;

{Метод Симпсона}simp (a, b:real; n:integer):real;:real; {Сумма}:real; {Шаг}:integer; {Счетчик}:integer; {Очередной множитель}

begin:=(b-a)/(n-1); {Рассчитывается шаг}:=f(a)+f(b); {Начальное значение шага}:=4; {Первый множитель - 4}

{Суммирование остальных элементов}

for m:=1 to n-2 do begin:=s+mn*f (a+h*m);(mn=4) then mn:=2 else mn:=4; {Изменение множителя 2<>4}

end;:=s*h/3; {Возвращается вычисленное значение};

 

{Процедура вычисления порядка числа}

procedure norm (a:real);n:real;

begin

{Если число слишком мало - возвращается ноль}

if (a<0.00001) then n:=0begin

{Если число меньше единицы}(a<1) then begin

n:=1;:=a*10;:=n/10;(trunc(a)<>0);else begin

{Если число больше единицы}:=1;

repeat:=a/10;:=n*10;(trunc(a)=0);;;

a:=n;;

 

{Построение графика функции}

procedure out_grp (xmin, xmax, ymin, ymax:real);, mode:integer;, my:real; {Масштабы по осям}, yy:real; {Текущие координаты}

sx:real; {Шаг по оси X}, dlty:integer; {Приращение на графике при смещении графика}:string; {Строка}

{Инициализация графики}

drv:=VGA;:=VGAHi;(drv, mode, );

{Выяснение порядков минимумов и максимумов}

norm(xmax);(ymax);(ymin); ymin:=ymin/10;(xmin); ymin:=ymin/10;(xmin/xmax)>0.01 then dltx:=20 else dltx:=0;(ymin/ymax)>0.01 then dlty:=20 else dlty:=0;

{Расчет масштабов}:=500/(xmax-xmin);:=400/(ymax-ymin);

{Расчет приращения по X}:=(xmax-xmin)/550;

{Вывод системы координат}

settextjustify (1,1);:=xmin;(1);(trunc(40+mx*(xx-xmin)+dltx), 20, trunc (40+mx*(xx-xmin)+dltx), 469);(xx:4:2, s);(15);(trunc(40+mx*(xx-xmin)+dltx), 475, s);:=xx+50*sx;(xx>(xmax+50*sx));:=ymin+(ymax-ymin)/10;(1);(41, trunc (470-my*(yy-ymin) - dlty), 630, trunc (470-my*(yy-ymin) - dlty));(yy:4:2, s);(15);(20, trunc (470-my*(yy-ymin) - dlty), s);:=yy+(ymax-ymin)/10;(yy>(ymax+(ymax-ymin)/10));(40,0,40,480);(0,470,640,470);(40,0,38,10);(40,0,42,10);(640,470,630,472);(640,470,630,468);

{Вывод графика}:=xmin;:=f(xx);(trunc(40+mx*(xx-xmin)+dltx), trunc (470-my*(yy-ymin) - dlty), 7);:=xx+sx;(xx>xmax);(300,10, Press ESC to continue );until (readkey=#27);;;

{Основная программа}

{Ввод границ отрезкa};(ВЫВЕСТИ ИНФОРМАЦИЮ О ПРОГРАММЕ? (y/n));(I); I=y then

begin(Программа вычисляет приближенное значение интеграла иррациональной );(логарифмической функции f(x)=x/log(x), которая может быть изменена, );(путём ввода таких параметров, как коэффициент при х в числителе; );(степень, в которую возводится х в числителе; также основание );(логарифма и его степень, по методу Симпсона);(Затем вводятся границы отрезков: А>B, );(т.к. f(x) непрерывна при всех значениях x, удовлетворяющих условиям A<=x<=B);(Также, исходя из определения логарифма, А и В должны быть положительными, );(а основание логарифма - больше нуля и не равно 1);(________________________________________________________________________________);;: write (Введите коэффициент при х в числителе………………);

{$I-}(k);ioresult<>0 do

begin(НЕВЕРНЫЙ ВВОД!!! ВВОДИТЕ ЧИСЛЕННЫЕ ЗНАЧЕНИЯ!!!);(Введите коэффициент при х в числителе………………);(k);;

{$I+}(Введите степень, в которую необходимо возвести x…….);

{$I-}(s1);ioresult<>0 do

begin(НЕВЕРНЫЙ ВВОД!!! ВВОДИТЕ ЧИСЛЕННЫЕ ЗНАЧЕНИЯ!!!);(Введите степень, в которую необходимо возвести x…….);(s1);

{$I+};(Введите основание логарифма……………………….);

{$I-}(o);(o<=0) or (o=1) do

begin(НЕВЕРНЫЙ ВВОД!!! ОСНОВАНИЕ ЛОГАРИФМА БОЛЬШЕ НУЛЯ И НЕ РАВНО 1);(Введите основание логарифма……………………….);

readln(o);(ioresult<>0) do

begin

writeln (НЕВЕРНЫЙ ВВОД!!! ВВОДИТЕ ЧИСЛЕННЫЕ ЗНАЧЕНИЯ!!!);(Введите основание логарифма……………………….);

readln(o);;

{$I+};

write (Введите степень, в которую необходимо возвести логарифм.);

{$I-}(s2);ioresult<>0 do

begin(НЕВЕРНЫЙ ВВОД!!! ВВОДИТЕ ЧИСЛЕННЫЕ ЗНАЧЕНИЯ!!!);(Введите степень, в которую необходимо возвести логарифм );

readln(s1);;

{$I+}: write ( Введите границы отрезков: );

{$I-}(a, b);ioresult<>0 do

begin(НЕВЕРНЫЙ ВВОД!!! ВВОДИТЕ ЧИСЛЕННЫЕ ЗНАЧЕНИЯ!!!);( Введите границы отрезка: );

readln (a, b);;

{$I+}a=b then

writeln (НЕВЕРНЫЙ ВВОД!!! ВВОДИТЕ РАЗЛИЧНЫЕ ЗНАЧЕНИЯ!!!);

goto m;

end;a<=0 then

begin(НЕВЕРНЫЙ ВВОД!!! ВВОДИТЕ A>0!!!);

goto m;;b<=0 then

begin(НЕВЕРНЫЙ ВВОД!!! ВВОДИТЕ B>0!!!);

goto m;

end;a>b then

begin

writeln (НЕВЕРНЫЙ ВВОД!!! ВВОДИТЕ A<B!!!);

goto m;;(ln(a)=0) or (ln(b)=0) then

begin(ДЕЛЕНИЕ НА НОЛЬ!!! НЕТ РЕШЕНИЙ!!!);(ЗАПУСТИТЬ ПРОГРАММУ СНАЧАЛА? (y/n));

readln(I);;I=y then goto m1;;

{Выводится график функции}

out_grp (a, b, f(b), f(a));

{Вычисляется интеграл по методу трапеций}:=3;:=trap (a, b, n); {Начальное значение}:=r; {Запоминается предыдущее значение}:=n+2; {Увеличивается количество шагов}:=trap (a, b, n); {Рассчитывается новое значение}