У вас вопросы?
У нас ответы:) SamZan.net

Пояснительная записка к курсовой работе по дисциплине Информатика

Работа добавлена на сайт samzan.net: 2016-03-13

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 7.3.2025

 

Санкт-Петербургский государственный университет

телекоммуникаций им. проф. М.А.Бонч-Бруевича

Кафедра АПС

Вычисление определенных интегралов

Пояснительная записка к курсовой работе по дисциплине «Информатика»

             

                                                                                                         Работу выполнил студент группы ТСС-12

                                                                                                                          Чураков Александр Сергеевич                                                                     

                                                                                          Работу проверил доцент кафедры АПС

                                                                                                                Волынкин Павел Александрович

Санкт-Петербург, 2012 г.

Оглавление

Задача 3

Обзор методов решения 3

Алгоритм 6

Интерфейс 9

Код программы 9

Руководство пользователя 16

Вывод 16

Список используемой литературы 17

Приложение 1 18

Задача.

Рассчитать определенный интеграл функции с возможностью оперативно менять пределы интегрирования и точность расчета.

Обзор методов решения задачи.

Метод прямоугольников 

Пусть требуется вычислить определенный интеграл , где функция f(x) непрерывна на отрезке [a,b]. Будем полагать, что на [a,b]. Это предположение не изменит формулы, но позволит прибегнуть к геометрической интерпретации результата: интеграл равен площади криволинейной трапеции, ограниченной графиком функции y = f(x), осью ОХ и прямыми x = a, x = b.

Разобьем отрезок [a,b] на n равных частей точками: . Обозначим     – длины частичных отрезков. По условию . Вычислим       – значения функции (ординаты) точек деления. Таким образом, исходная криволинейная трапеция разбита на n полос, которые также являются криволинейными трапециями. Площадь каждой такой трапеции будем считать  приближенно равной площади прямоугольника, основание которого , а высота – правая ордината полосы: . Сумма площадей всех полученных прямоугольников выражает площадь ступенчатой фигуры . С другой стороны, сумма S является интегральной для функции  f(x) на отрезке [a,b], поэтому приближенно равна  интегралу:

.                                                                                    (1)

 Таким образом, площадь криволинейной трапеции аппроксимируется (приближается) площадью ступенчатой фигуры, состоящей из прямоугольников. Формула (1) называется формулой «правых» прямоугольников.

Аналогично, рассматривая в качестве высоты каждого прямоугольника левую ординату, можно получить формулу «левых» прямоугольников:

 

.                                                                                (2)

Стр. 1

 За высоту прямоугольника при разбиении можно взять любую точку на промежутке ,

например, середину этого отрезка. В этом случае формула приближенного вычисления принимает

вид: Величину h = называют шагом аппроксимации.

Ошибка вычисления будет тем меньше, чем больше число n, и для метода прямоугольников она будет иметь оценку , где М – некоторая положительная константа.

Метод трапеций

Найдем среднее арифметическое выражений в формулах (1) и (2):

 

 Каждое слагаемое в данной формуле представляет площадь трапеции с основаниями и , и высотой .  Таким образом, площадь криволинейной трапеции аппроксимируется суммой площадей прямолинейных трапеций, и полученная формула:

                                                                           (3)

 называется формулой трапеций. Формулу трапеций также можно записать в виде:

.                                                                                           (4)

В формуле трапеций на каждом участке разбиения дуга графика функции y = f(x) замещается хордой. Ошибка вычисления оценивается аналогично предыдущему методу.

Метод Симпсона

Еще более точную формулу для вычислений можно получить, если на отдельных участках заменить кривую y=f(x) параболой.

Известно, что через три заданные точки, не лежащие на одной прямой, можно провести параболу единственным образом, поэтому отрезок интегрирования [a,b] надо разбить на n частей таким образом, чтобы полученные точки деления позволяли построить параболы.  Очевидно, что число точек деления должно быть четным: n = 2m. Границами промежутков будут точки , а длина каждого промежутка равна . Пусть . Рассмотрим первые два промежутка деления. Функцию f(x) на отрезке заменим параболой, проходящей через точки . Будем искать уравнение параболы в виде многочлена второй степени.

  .                                                                             (5)

 Неизвестные коэффициенты А, В, С найдем из условий  . Подставим в формулу (5) значение , получим . Поскольку , то , откуда . Аналогично, при , получим и , а при найдем коэффициент . Заменив площадь криволинейной трапеции, ограниченной кривой y = f(x), на площадь криволинейной трапеции, ограниченной параболой, получим приближенную формулу:

 

 Введем замену переменной ,тогда данный интеграл примет вид:

 

Воспользуемся найденными значениями для А, В, С и запишем:

   .  (6)

 Теперь для всего промежутка [a,b] можно указать формулу приближенного вычисления:

  

 или  

  .   (7)

 Формула (7) называется формулой Симпсона.

При разбиении промежутка на одно и то же число частей, формула Симпсона, как правило, дает более точное значение, чем формулы прямоугольников и трапеций. Ошибка вычисления для метода Симпсона имеет оценку , где М – некоторая положительная константа.

Для использования в программе я выбрал метод трапеций, так как он обеспечивает большую точность и не так сложен, как метод Симпсона.

Алгоритм.

Для вычисления определенного интеграла, я разработал алгоритм на основе составной формулы трапеций.

Заданный отрезок AB разбивается на n частей. Для каждой трапеции вычисляется значение по данной формуле, сумма которых дает значение заданного интеграла.

Расчет интеграла.

Задаем значение функции ( func = power(abs(x),1/6)*(3*sin(3*x)*cos(2*x)+2*sin(2*x)*5*cos(3*x)) )

Начало

Принимаем от пользователя значения пределов интегрирования (a, b) и задаем количество участков разбиения (n).

От i = 1

До n-1

Шаг 1

Рассчитываем длину участка разбиения (h, (b-a)/n)

Рассчитываем конечный результат интегрирования

Result = h * ( ( func(a) + func(b) ) / 2 + S))

Конец

Рассчитываем площади трапеций (S; S+F(a+h*i))

Вывод графика.

Задаём начальные значения масштаба и расположение осей(X0,Y0,Kx,Ky)

Начало

             Прорисовка и градуировка осей

       Перемещаем перо на начальную позицию (0,Y0)

От Xg=0

До XgMAX

Шаг 1

  Конец

              Рассчитываем «математический x» ( x = (pXg-pX0) / pKx  )

              Рассчитываем «математический y» ( y = func(x) )

              Рассчитываем «графический y» ( Yg = round( Y0 - y*Ky ) )

              Проводим линию к следующей точке функции по её «графическим» координатам (Xg,Yg)

Расчет погрешности.

Начало

Принимаем от пользователя желаемое значение точности вычисления интеграла (e0)

Увеличиваем количество участков разбиения в 2 раза

Вычисляем значение определенного интеграла при разном количестве участков разбиения (I1 (n), I2 (n*2))

e<e0/100

нет

       

Вычисляем получившееся значение точности (e)

Конец

Выводим значение интеграла

да

Разработка интерфейса.

При разработке интерфейса данной программы использовалась стандартная схема расположения элементов на форме. Большую часть формы, ее левую часть, занимает компонент Image 1, предназначенный для вывода графика функции. В правой части формы расположены компоненты, через которых осуществляется навигация и масштабирование(6 компонентов TButton), а также компоненты для проведения интегрирования функции(3 компонента TEdit и компонент Button 8).

Текст программы.

unit Unit1;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, ExtCtrls, StdCtrls, Unit2, Unit3;

type

 TForm1 = class(TForm)

   Image1: TImage;

   Button2: TButton;

   Button3: TButton;

   Button4: TButton;

   Button5: TButton;

   Button6: TButton;

   Label1: TLabel;

   Edit1: TEdit;

   Edit2: TEdit;

   Button8: TButton;

   Label2: TLabel;

   Label3: TLabel;

   Label4: TLabel;

   Label5: TLabel;

   Button9: TButton;

   Button10: TButton;

   Button11: TButton;

   Button12: TButton;

   Button13: TButton;

   Label6: TLabel;

   Label7: TLabel;

   Label8: TLabel;

   Label9: TLabel;

   Label10: TLabel;

   Label11: TLabel;

   Label12: TLabel;

   Edit4: TEdit;

   Label13: TLabel;

   procedure Button2Click(Sender: TObject);

   procedure Button6Click(Sender: TObject);

   procedure Button5Click(Sender: TObject);

   procedure Button4Click(Sender: TObject);

   procedure Button3Click(Sender: TObject);

   procedure Button8Click(Sender: TObject);

   procedure FormCreate(Sender: TObject);

   procedure Button10Click(Sender: TObject);

   procedure Button11Click(Sender: TObject);

   procedure Button9Click(Sender: TObject);

   procedure Button12Click(Sender: TObject);

   procedure Button13Click(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 Form1: TForm1;

 Kx,Ky:real;

 Xg0,Yg0,X0,Y0:integer;

Const

 XgMAX=600;

 YgMax=400;

implementation

{$R *.dfm}

{Прорисовка графика на Image1 при сосздании формы}

procedure TForm1.FormCreate(Sender: TObject);

var

Xg,Yg:integer;

begin

nP(X0,Y0,Kx,Ky);  // задаёт начальные значения масштаба и расположение осей(Unit3)

osi(X0,Y0);       // прорисовка и градуировка осей

Image1.Canvas.MoveTo(0,Y0);  // начальная позиция пера

for Xg:=0 to XgMAX do    // цикл по перебору аргумента

begin

graph(X0,Kx,Xg,Y0,Ky,Yg); //Рассчёт Yg (Unit3)

Image1.Canvas.LineTo(Xg,Yg);

end;

end;

{функция интегрирования}

Function Integr(pa,pb:real; pn:integer):real;

var a,b,S,h:real;

n,i:integer;

begin

a:=pa;

b:=pb;

n:=pn;

S:=0;

h := (b - a) / n;

for i := 1 to n-1 do

begin

S := S + func(a + h * i);

end;

result := h * (( func(a) + func(b))/ 2 + S);

end;

{процедура рассчёта интеграла и вывода результата}

procedure TForm1.Button8Click(Sender: TObject);

var

a,b,e0,e,I1,I2:real;

n:integer;

sep:boolean;

begin

if DecimalSeparator = '.' then sep:=true else sep:=false;

Case sep of

true : if pos(',',edit1.Text+edit2.Text)<>0 then

 begin

 ShowMessage('Некорректный знак разделителя');

 Exit;

 end;

false : if pos('.',edit1.Text+edit2.Text)<>0 then

 begin

 ShowMessage('Некорректный знак разделителя');

 Exit;

 end;

end;

a:=StrToFloat(edit1.Text);

b:=StrToFloat(edit2.Text);

e0:=strtofloat(edit4.Text);

n:=25;

repeat

n:=n*2;

I1:=integr(a,b,n);

I2:=integr(a,b,n*2);

e:=2*(I2-I1)/(I1+I2);

until

e<=e0/100;

Label12.caption:=floattostr(I1);

end;

{+масштаб по Х}

procedure TForm1.Button2Click(Sender: TObject);

var

Xg,Yg:integer;

Begin

Image1.Canvas.FillRect(Bounds(0,0,600,400));

Kx:=Kx*1.618;

osi(X0,Y0);

Image1.Canvas.MoveTo(0,Y0);

for Xg:=0 to XgMAX do

begin

graph(X0,Kx,Xg,Y0,Ky,Yg);

Image1.Canvas.LineTo(Xg,Yg);

end;

end;

{-масштаб по Х}

procedure TForm1.Button5Click(Sender: TObject);

var

Xg,Yg:integer;

Begin

Image1.Canvas.FillRect(Bounds(0,0,600,400));

Kx:=Kx/1.618;

osi(X0,Y0);

Image1.Canvas.MoveTo(0,Y0);

for Xg:=0 to XgMAX do

begin

graph(X0,Kx,Xg,Y0,Ky,Yg);

Image1.Canvas.LineTo(Xg,Yg);

end;

end;

{+масштаб по Y}

procedure TForm1.Button4Click(Sender: TObject);

var

Xg,Yg:integer;

Begin

Image1.Canvas.FillRect(Bounds(0,0,600,400));

Ky:=Ky*1.618;

osi(X0,Y0);

Image1.Canvas.MoveTo(0,Y0);

for Xg:=0 to XgMAX do

begin

graph(X0,Kx,Xg,Y0,Ky,Yg);

Image1.Canvas.LineTo(Xg,Yg);

end;

end;

{-масштаб по Y}

procedure TForm1.Button3Click(Sender: TObject);

var

Xg,Yg:integer;

Begin

Image1.Canvas.FillRect(Bounds(0,0,600,400));

Ky:=Ky/1.618;

osi(X0,Y0);

Image1.Canvas.MoveTo(0,Y0);

for Xg:=0 to XgMAX do

begin

graph(X0,Kx,Xg,Y0,Ky,Yg);

Image1.Canvas.LineTo(Xg,Yg);

end;

end;

{+отступление оси OY вправо}

procedure TForm1.Button6Click(Sender: TObject);

var

Xg,Yg:integer;

begin

Image1.Canvas.FillRect(Bounds(0,0,600,400));

X0:=X0+200;

osi(X0,Y0);

Image1.Canvas.MoveTo(0,Y0);

for Xg:=0 to XgMAX do

begin

graph(X0,Kx,Xg,Y0,Ky,Yg);

Image1.Canvas.LineTo(Xg,Yg);

end;

end;

{+отступление оси OY влево}

procedure TForm1.Button10Click(Sender: TObject);

var

Xg,Yg:integer;

begin

Image1.Canvas.FillRect(Bounds(0,0,600,400));

X0:=X0-200;

osi(X0,Y0);

Image1.Canvas.MoveTo(0,Y0);

for Xg:=0 to XgMAX do

begin

graph(X0,Kx,Xg,Y0,Ky,Yg);

Image1.Canvas.LineTo(Xg,Yg);

end;

end;

{+отступление оси OX вверх}

procedure TForm1.Button11Click(Sender: TObject);

var

Xg,Yg:integer;

begin

Image1.Canvas.FillRect(Bounds(0,0,600,400));

Y0:=Y0+200;

osi(X0,Y0);

Image1.Canvas.MoveTo(0,Y0);

for Xg:=0 to XgMAX do

begin

graph(X0,Kx,Xg,Y0,Ky,Yg);

Image1.Canvas.LineTo(Xg,Yg);

end;

end;

{+отступление оси OX вниз}

procedure TForm1.Button9Click(Sender: TObject);

var

Xg,Yg:integer;

begin

Image1.Canvas.FillRect(Bounds(0,0,600,400));

Y0:=Y0-200;

osi(X0,Y0);

Image1.Canvas.MoveTo(0,Y0);

for Xg:=0 to XgMAX do

begin

graph(X0,Kx,Xg,Y0,Ky,Yg);

Image1.Canvas.LineTo(Xg,Yg);

end;

end;

{стандартное значение масштаба}

procedure TForm1.Button12Click(Sender: TObject);

var

Xg,Yg:integer;

begin

Image1.Canvas.FillRect(Bounds(0,0,600,400));

nP(X0,Y0,Kx,Ky);

osi(X0,Y0);

Image1.Canvas.MoveTo(0,Y0);

for Xg:=0 to XgMAX do

begin

graph(X0,Kx,Xg,Y0,Ky,Yg);

Image1.Canvas.LineTo(Xg,Yg);

end;

end;

{стандартное расположение осей}

procedure TForm1.Button13Click(Sender: TObject);

var

Xg,Yg:integer;

begin

Image1.Canvas.FillRect(Bounds(0,0,600,400));

nP(X0,Y0,Kx,Ky);

osi(X0,Y0);

Image1.Canvas.MoveTo(0,Y0);

for Xg:=0 to XgMAX do

begin

graph(X0,Kx,Xg,Y0,Ky,Yg);

Image1.Canvas.LineTo(Xg,Yg);

end;

end;

end.

Руководство пользователя.

Данная программа позволяет вычислять определённый интеграл от рассматриваемой функции f(x) с задаваемыми пользователем пределами и точностью расчета, а также предоставляет пользователю график данной функции.

Вывод графика функции происходит автоматически в область формы (1).

Для масштабирования графика следует использовать группу кнопок «Масштабирование» в области формы (2):

две кнопки, расположенные на « горизонтальной оси» (-, +) уменьшают и увеличивают изображение в горизонтальной плоскости;

две кнопки, расположенные на «вертикальной оси» (-, +) уменьшают и увеличивают изображение в вертикальной плоскости;

кнопка «Станд» – возвращает масштаб графика к первоначальному виду.

Для навигации по графику следует использовать группу кнопок «Навигация» в области формы (3):

кнопка «вверх» - смещает график вверх по оси Y;

кнопка «вниз» - смещает график вниз по оси Y;

кнопка «влево» - смещает график влево по оси X;

кнопка «вправо» - смещает график вправо по оси X;

кнопка «Станд» – возвращает график в начальное положение.

Для расчета определенного интеграла данной функции следует провести следующую последовательность действий:

  1. Ввести нижний предел определенного интеграла в «Поле 1»
  2. Ввести верхний предел определенного интеграла в «Поле 2»
  3. Ввести точность расчета определенного интеграла в «Поле 3»
  4. Нажатием кнопки «Расчет» получить результат в последнюю строку области формы (4)

Вывод.

В данном курсовом проекте я научился создавать программу на языке программирования DELPHI. Провел работу по алгоритмизации и оптимизации выбранного мной метода вычисления определенного интеграла. Создал относительно точную программу для вычисления определенного интеграла данной функции с возможностью менять пределы интегрирования и точность расчета.

Список используемой литературы.

  1.  Фленов М.Е. Библия Delphi 3-е издание

«БХВ-Петербург» 2011г.

  1.  Wikimedia Foundation, inc.
  2.  Волынкин П.А. Программирование в среде визуального проектирования Delphi(Lazarus). Учебное пособие по курсовому проектированию.

 Санкт-Петербургский Государственный Университет Телекоммуникаций Им. Проф. М.А. Бонч-Бруевича, кафедра АПС 2007г.

       

Приложение 1

unit Unit1;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, ExtCtrls, StdCtrls, Unit2, Unit3;

type

 TForm1 = class(TForm)

   Image1: TImage;

   Button2: TButton;

   Button3: TButton;

   Button4: TButton;

   Button5: TButton;

   Button6: TButton;

   Label1: TLabel;

   Edit1: TEdit;

   Edit2: TEdit;

   Button8: TButton;

   Label2: TLabel;

   Label3: TLabel;

   Label4: TLabel;

   Label5: TLabel;

   Button9: TButton;

   Button10: TButton;

   Button11: TButton;

   Button12: TButton;

   Button13: TButton;

   Label6: TLabel;

   Label7: TLabel;

   Label8: TLabel;

   Label9: TLabel;

   Label10: TLabel;

   Label11: TLabel;

   Label12: TLabel;

   Edit4: TEdit;

   Label13: TLabel;

   procedure Button2Click(Sender: TObject);

   procedure Button6Click(Sender: TObject);

   procedure Button5Click(Sender: TObject);

   procedure Button4Click(Sender: TObject);

   procedure Button3Click(Sender: TObject);

   procedure Button8Click(Sender: TObject);

   procedure FormCreate(Sender: TObject);

   procedure Button10Click(Sender: TObject);

   procedure Button11Click(Sender: TObject);

   procedure Button9Click(Sender: TObject);

   procedure Button12Click(Sender: TObject);

   procedure Button13Click(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 Form1: TForm1;

 Kx,Ky:real;

 Xg0,Yg0,X0,Y0:integer;

Const

 XgMAX=600;

 YgMax=400;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

var

Xg,Yg:integer;

begin

nP(X0,Y0,Kx,Ky);  

osi(X0,Y0);       

Image1.Canvas.MoveTo(0,Y0);  

for Xg:=0 to XgMAX do    

begin

graph(X0,Kx,Xg,Y0,Ky,Yg);

Image1.Canvas.LineTo(Xg,Yg);

end;

end;

Function Integr(pa,pb:real; pn:integer):real;

var a,b,S,h:real;

n,i:integer;

begin

a:=pa;

b:=pb;

n:=pn;

S:=0;

h := (b - a) / n;

for i := 1 to n-1 do

begin

S := S + func(a + h * i);

end;

result := h * (( func(a) + func(b))/ 2 + S);

end;

procedure TForm1.Button8Click(Sender: TObject);

var

a,b,e0,e,I1,I2:real;

n:integer;

sep:boolean;

begin

if DecimalSeparator = '.' then sep:=true else sep:=false;

Case sep of

true : if pos(',',edit1.Text+edit2.Text)<>0 then

 begin

 ShowMessage('Некорректный знак разделителя');

 Exit;

 end;

false : if pos('.',edit1.Text+edit2.Text)<>0 then

 begin

 ShowMessage('Некорректный знак разделителя');

 Exit;

 end;

end;

a:=StrToFloat(edit1.Text);

b:=StrToFloat(edit2.Text);

e0:=strtofloat(edit4.Text);

n:=25;

repeat

n:=n*2;

I1:=integr(a,b,n);

I2:=integr(a,b,n*2);

e:=2*(I2-I1)/(I1+I2);

until

e<=e0/100;

Label12.caption:=floattostr(I1);

end;

procedure TForm1.Button2Click(Sender: TObject);

var

Xg,Yg:integer;

Begin

Image1.Canvas.FillRect(Bounds(0,0,600,400));

Kx:=Kx*1.618;

osi(X0,Y0);

Image1.Canvas.MoveTo(0,Y0);

for Xg:=0 to XgMAX do

begin

graph(X0,Kx,Xg,Y0,Ky,Yg);

Image1.Canvas.LineTo(Xg,Yg);

end;

end;

procedure TForm1.Button5Click(Sender: TObject);

var

Xg,Yg:integer;

Begin

Image1.Canvas.FillRect(Bounds(0,0,600,400));

Kx:=Kx/1.618;

osi(X0,Y0);

Image1.Canvas.MoveTo(0,Y0);

for Xg:=0 to XgMAX do

begin

graph(X0,Kx,Xg,Y0,Ky,Yg);

Image1.Canvas.LineTo(Xg,Yg);

end;

end;

procedure TForm1.Button4Click(Sender: TObject);

var

Xg,Yg:integer;

Begin

Image1.Canvas.FillRect(Bounds(0,0,600,400));

Ky:=Ky*1.618;

osi(X0,Y0);

Image1.Canvas.MoveTo(0,Y0);

for Xg:=0 to XgMAX do

begin

graph(X0,Kx,Xg,Y0,Ky,Yg);

Image1.Canvas.LineTo(Xg,Yg);

end;

end;

procedure TForm1.Button3Click(Sender: TObject);

var

Xg,Yg:integer;

Begin

Image1.Canvas.FillRect(Bounds(0,0,600,400));

Ky:=Ky/1.618;

osi(X0,Y0);

Image1.Canvas.MoveTo(0,Y0);

for Xg:=0 to XgMAX do

begin

graph(X0,Kx,Xg,Y0,Ky,Yg);

Image1.Canvas.LineTo(Xg,Yg);

end;

end;

procedure TForm1.Button6Click(Sender: TObject);

var

Xg,Yg:integer;

begin

Image1.Canvas.FillRect(Bounds(0,0,600,400));

X0:=X0+200;

osi(X0,Y0);

Image1.Canvas.MoveTo(0,Y0);

for Xg:=0 to XgMAX do

begin

graph(X0,Kx,Xg,Y0,Ky,Yg);

Image1.Canvas.LineTo(Xg,Yg);

end;

end;

procedure TForm1.Button10Click(Sender: TObject);

var

Xg,Yg:integer;

begin

Image1.Canvas.FillRect(Bounds(0,0,600,400));

X0:=X0-200;

osi(X0,Y0);

Image1.Canvas.MoveTo(0,Y0);

for Xg:=0 to XgMAX do

begin

graph(X0,Kx,Xg,Y0,Ky,Yg);

Image1.Canvas.LineTo(Xg,Yg);

end;

end;

procedure TForm1.Button11Click(Sender: TObject);

var

Xg,Yg:integer;

begin

Image1.Canvas.FillRect(Bounds(0,0,600,400));

Y0:=Y0+200;

osi(X0,Y0);

Image1.Canvas.MoveTo(0,Y0);

for Xg:=0 to XgMAX do

begin

graph(X0,Kx,Xg,Y0,Ky,Yg);

Image1.Canvas.LineTo(Xg,Yg);

end;

end;

{+отступление оси OX вниз}

procedure TForm1.Button9Click(Sender: TObject);

var

Xg,Yg:integer;

begin

Image1.Canvas.FillRect(Bounds(0,0,600,400));

Y0:=Y0-200;

osi(X0,Y0);

Image1.Canvas.MoveTo(0,Y0);

for Xg:=0 to XgMAX do

begin

graph(X0,Kx,Xg,Y0,Ky,Yg);

Image1.Canvas.LineTo(Xg,Yg);

end;

end;

procedure TForm1.Button12Click(Sender: TObject);

var

Xg,Yg:integer;

begin

Image1.Canvas.FillRect(Bounds(0,0,600,400));

nP(X0,Y0,Kx,Ky);

osi(X0,Y0);

Image1.Canvas.MoveTo(0,Y0);

for Xg:=0 to XgMAX do

begin

graph(X0,Kx,Xg,Y0,Ky,Yg);

Image1.Canvas.LineTo(Xg,Yg);

end;

end;

procedure TForm1.Button13Click(Sender: TObject);

var

Xg,Yg:integer;

begin

Image1.Canvas.FillRect(Bounds(0,0,600,400));

nP(X0,Y0,Kx,Ky);

osi(X0,Y0);

Image1.Canvas.MoveTo(0,Y0);

for Xg:=0 to XgMAX do

begin

graph(X0,Kx,Xg,Y0,Ky,Yg);

Image1.Canvas.LineTo(Xg,Yg);

end;

end;

end.

unit Unit2;

interface

uses math;

function Func(x:real):real;

implementation

function Func(x:real):real;

Begin

result:=power(abs(x),1/6)*(3*sin(3*x)*cos(2*x)+2*sin(2*x)*5*cos(3*x));

End;

end.

unit Unit3;

interface

Uses Unit2;

procedure graph(pX0:integer; pKx:real; pXg:integer;

               pY0:integer; pKy:real; var pYg:integer);

procedure nP(var pX0,PY0:Integer; var PkX,PkY:real);

procedure osi(pX0,PY0:integer);

implementation

Uses Unit1;

procedure osi(pX0,PY0:integer);

var i,l,m: integer;

begin

Form1.Image1.Canvas.MoveTo(0,pY0);

Form1.Image1.Canvas.LineTo(600,pY0);

Form1.Image1.Canvas.MoveTo(pX0,0);

Form1.Image1.Canvas.LineTo(pX0,400);

m:=XgMAX div 2;

l:=YgMAX div 2;

for i:=1 to 70 do

begin

form1.Image1.Canvas.MoveTo(i*10,l+5);

form1.Image1.Canvas.LineTo(i*10,l-5);

form1.Image1.Canvas.MoveTo(m-5,i*10);

form1.Image1.Canvas.LineTo(m+5,i*10);

end;

end;

procedure graph(pX0:integer; pKx:real; pXg:integer;

               pY0:integer; pKy:real; var pYg:integer);

var

x,y:real;

begin

x:=(pXg-pX0)/pKx;

y:=func(x);               //Рассчёт значения F(x) (Unit2)

pYg:=round(pY0-y*pKy);

end;

procedure nP(var pX0,PY0:Integer; var PkX,PkY:real);

begin

pX0:=300;

pY0:=200;

pKx:=10;

pKy:=10;

end;

end.




1. Организация службы внутреннего контроля на предприятии
2. Лирика Ахматовой, Пастернака, Твардовского (сравнительная характеристика)
3. Тема 6 Основы правового регулирования порядка предупреждения и проведения процедур банкротства предприяти
4. Реферат- Современная экология и ее проблемы
5. темах принимаемая по умолчанию база данных может быть сформирована непосредственно в процессе установки и н
6. Курсовой проект ПРОЕКТИРОВАНИЕ И РАСЧЕТ ТРАССЫ РРЛ Альбом МЕ 72
7. Синтетический и аналитический учет поступления и расчетов с поставщиками.html
8. Альтернативный минимальный налог в США
9. Взаимодействие педагога и ребенка как фактор развития творческой активности дошкольника
10. На всей скорости на мотоцикле несется молодой парень лет двадцати