Мегаобучалка Главная | О нас | Обратная связь


Технические характеристики



2019-12-29 178 Обсуждений (0)
Технические характеристики 0.00 из 5.00 0 оценок




Программа работает в среде операционных систем Windows 9х, NT.

Требования к ПО

Минимальные системные требования

a процессор Intel 486 с рабочей частотой 66 MHz и выше;

b) операционная система Windows 95, 98, NT 4.0, 2000, XP;

с) 16 Мбайт оперативной памяти (или более);

d) 3 Мбайт свободного пространства на жёстком диске.

 


ТЕКСТ ПРОГРАММЫ

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

unit RKt ;

interface

uses

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

StdCtrls, CheckLst, ComCtrls, ExtCtrls,math, Menus;

type

TRKutta = class(TForm)

Label2: TLabel;

Label3: TLabel;

Label5: TLabel;

Label6: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Edit4: TEdit;

Memo1: TMemo;

Memo2: TMemo;

Button1: TButton;

Button2: TButton;

Label4: TLabel;

Label7: TLabel;

Button3: TButton;

Button4: TButton;

Label9: TLabel;

RadioGroup1: TRadioGroup;

Button5: TButton;

Memo3: TMemo;

Button6: TButton;

MainMenu1: TMainMenu;

N1: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

Example1: TMenuItem;

UnExample1: TMenuItem;

N5: TMenuItem;

N7: TMenuItem;

N2: TMenuItem;

N9: TMenuItem;

N8: TMenuItem;

Label1: TLabel;

Memo4: TMemo;

Label8: TLabel;

Label10: TLabel;

Label11: TLabel;

Label12: TLabel;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure RadioGroup1Click(Sender: TObject);

procedure Button5Click(Sender: TObject);

procedure Button6Click(Sender: TObject);

procedure N7Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

RKutta: TRKutta;

x1,x2,yc,xc,y,h:extended;

line_arr:integer; // размерность массивa

f:real; // значение функции при начальных условиях

zx:array of real;

zy:array of real;

implementation

uses RungeKutta, Spravka;

{$R *.DFM}

procedure TRKutta.Button1Click(Sender: TObject);

var k1,k2,k3,k4:extended;

t:integer;

begin

Memo1.Clear;

Memo2.Clear;

memo1.Enabled:=true;

memo2.Enabled:=true;

Memo3.lines.Add(''+floattostr(f));

Button1.Enabled:=False;

//Проверка возможности ввода начальных условий и инициализация переменных

try

// инструкции, которые могут вызвать исключение (ошибку)

x1:=StrToFloat(Edit1.Text); //инициализация(ввод) x1(начало отрезка)

xc:=StrToFloat(Edit1.Text); //передача начальных условий (х0)в графический модуль

x2:=StrToFloat(Edit2.Text); //инициализация(ввод) x2(конец отрезка)

y:=StrToFloat(Edit3.Text); //инициализация(ввод) Y(x1)

yc:=StrToFloat(Edit3.Text); //передача начальных условий (Y0)в графический модуль

h:=StrToFloat(Edit4.Text); //инициализация(ввод) H -величины шага вычислений

//определение размера массивов содержащего значения аргумента и функции

line_arr:=round(abs((x2-x1)/h))+1;

//Установка размера динамических массивов zx, zy

SetLength(zx, line_arr);

SetLength(zy, line_arr);

t:=0; // счётчик

while x1<x2

do

begin

zx[t]:=x1;

zy[t]:=y;

k1:=h*f;

if (y+(k1/2))=0 then begin showmessage ('Деление на 0!'+#13+' Измените h'); break;

end;

k2:=h*((y+(k1/2))-(2*(x1+(h/2)))/(y+(k1/2)));

if (y+(k2/2))=0 then begin showmessage ('Деление на 0!'+#13+' Измените h'); break;

end;

k3:=h*((y+(k2/2))-(2*(x1+(h/2)))/(y+(k2/2)));

if (y+k3)=0 then begin showmessage ('Деление на 0!'+#13+' Измените h');break;

end;

k4:=h*(y+k3-2*(x1+(h/2)))/(y+k3);

x1:=x1+h;

y:=y+(1/6)*(k1+2*k2+2*k3+k4);

t:=t+1;

Memo1.Lines.Add('x['+floattostr(t)+']='+floattostr(x1));

Memo2.Lines.Add('y['+floattostr(t)+']='+floattostr(y));

end;

except

on EConvertError do // невозможно преобразовать строку символов в число

begin

MessageDlg('Некорректные значения переменных',mtError,[mbOk],0);

exit;

end;

end;

{ | Подключение кнопок: |

| - Button3 - 'ГРАФИК': входа в графический модуль |

| - нопки N3 - 'EXAMPLE': образцовых функций | }

if ((y+(k1/2))=0) or ((y+(k2/2))=0) or((y+k3)=0) then

begin

Button3.Enabled:=False;

N3.Enabled:=False;

end

else

begin

Button3.Enabled:=True;

N3.Enabled:=True;

end;end;

//------------------------------------------------------------------------------

procedure TRKutta.Button2Click(Sender: TObject);

begin

memo1.Clear;

MEMO2.Clear;

MEMO3.Clear;

memo4.Clear;

edit1.Clear;

edit2.Clear;

edit3.Clear;

edit4.Clear;

end;

//------------------------------------------------------------------------------

{Процедура вывода окна ГРАФИК}

procedure TRKutta.Button3Click(Sender: TObject);

begin

Button3.enabled:=false;

N3.Enabled:=false;

Form2.ShowModal;

end;

//------------------------------------------------------------------------------

{Процедура выхода из программы}

procedure TRKutta.Button4Click(Sender: TObject);

begin

Close;

end;

//------------------------------------------------------------------------------

{Процедура выбора образцовой функции}

procedure TRKutta.RadioGroup1Click(Sender: TObject);

var x_rg,y_rg:extended;

begin

try

y_rg:=strtofloat(edit3.Text); //ввод Y(x1)

x_rg:=strtofloat(edit1.Text); //ввод X1

{------------------------------------------------------------------------------}

if RadioGroup1.ItemIndex=0 then

begin

if x_rg=0 then

begin

ShowMessage('введите X1 неравное 0');

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end

else

begin

Memo3.clear;

Memo4.Clear;

Memo4.Lines.Add(' -(y+1)/x '); вывод формулы функции в окно "dY"

f:=-(y_rg+1)/x_rg; //вычисление значения dY

Memo3.lines.Add(''+floattostr(f)); //вывод значения dY в окно "dY(x1,y1)"

// сброс радиокнопки (с целью корретного вычисления

// значения dy(x1,y1) при вводе других данных)

Button1.Enabled:=True;

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end;

end;

{------------------------------------------------------------------------------}

if RadioGroup1.ItemIndex=1 then

begin

if y_rg=0 then

begin

ShowMessage('введите Y(x1) неравное 0');

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end

else

begin

Memo4.Clear;

Memo4.Lines.Add('x*(x^2-1)/(x^2+1)*y ');

f:=x_rg*(power(x_rg,2)-1)/(power(x_rg,2)+1)*y_rg;

Memo3.lines.Add(''+floattostr(f));

Button1.Enabled:=True;

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end;

end;

{------------------------------------------------------------------------------}

if RadioGroup1.ItemIndex=2 then

begin

if x_rg=0 then

begin

ShowMessage('введите X1 неравное 0');

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end

else

begin

Memo3.Clear;

Memo4.Clear;

Memo4.Lines.Add('(x*cos(y/x))^2+y)/x ');

f:=x_rg*(POWER(cos(y_rg/x_rg),2)+y_rg)/x_rg;

Memo3.lines.Add(''+floattostr(f));

Button1.Enabled:=True;

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end;

end;

{------------------------------------------------------------------------------}

if RadioGroup1.ItemIndex=3 then

begin

if x_rg=0 then

begin

ShowMessage('введите X1 неравное 0');

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end

else

begin

Memo3.Clear;

Memo4.Clear;

Memo4.Lines.Add('2*x*sin(x)+y*ctg(x) ');

f:=2*x_rg*sin(x_rg)+y_rg*cot(x_rg);

Memo3.lines.Add(''+floattostr(f));

Button1.Enabled:=True;

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end;

end;

{------------------------------------------------------------------------------}

if RadioGroup1.ItemIndex=4 then

begin

Memo3.Clear;

Memo4.Clear;

Memo4.Lines.Add('((e^y)+cos(x) ');

f:=(exp(y_rg))+cos(x_rg);

Memo3.lines.Add(''+floattostr(f));

Button1.Enabled:=True;

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end;

{------------------------------------------------------------------------------}

if RadioGroup1.ItemIndex=5 then

begin

Memo3.Clear;

Memo4.Clear;

Memo4.Lines.Add('e^(x+y) ');

f:=exp(y_rg+x_rg);

Memo3.lines.Add(''+floattostr(f));

Button1.Enabled:=True;

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end;

{------------------------------------------------------------------------------}

if RadioGroup1.ItemIndex=6 then

begin

if ((x_rg<=0) and (y_rg>=0))or((x_rg>=0) and (y_rg<=0)) then

begin

ShowMessage('X1 / Y(X1) не должны быть <=0');

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end

else

begin

Memo4.Clear;

Memo4.Lines.Add('(y/x)ln(y/x) ');

f:=(y_rg/x_rg)*ln(y_rg/x_rg);

Memo3.lines.Add(''+floattostr(f));

Button1.Enabled:=True;

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end;

end;

{------------------------------------------------------------------------------}

if RadioGroup1.ItemIndex=7 then

begin

if x_rg=0 then

begin

ShowMessage('введите X1 неравное 0');

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end

else

begin

Memo4.Clear;

Memo4.Lines.Add(' sin(y/x)+y/x ');

f:=sin(y_rg/x_rg)+y_rg/x_rg;

Memo3.lines.Add(''+floattostr(f));

Button1.Enabled:=True;

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end;

end;

{------------------------------------------------------------------------------}

if RadioGroup1.ItemIndex=8 then

begin

Memo4.Clear;

Memo4.Lines.Add(' 6x-sin(x) ');

f:=6*x_rg-sin(x_rg);

Memo3.lines.Add(''+floattostr(f));

Button1.Enabled:=True;

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end;

{------------------------------------------------------------------------------}

if RadioGroup1.ItemIndex=9 then

begin

Memo4.Clear;

Memo4.Lines.Add(' x+2y ');

f:=x_rg+2*y_rg;

Memo3.lines.Add(''+floattostr(f));

Button1.Enabled:=True;

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end;

{------------------------------------------------------------------------------}

if RadioGroup1.ItemIndex=10 then

begin

Memo4.Clear;

Memo4.Lines.Add(' e^x-y ');

f:=exp(x_rg)-y_rg;

Memo3.lines.Add(''+floattostr(f));

Button1.Enabled:=True;

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end;

{------------------------------------------------------------------------------}

if RadioGroup1.ItemIndex=11 then

begin

if x_rg=0 then

begin

ShowMessage('введите X1 не равное 0');

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end

else

begin

Memo4.Clear;

Memo4.Lines.Add(' y*ctg(x) ');

f:=cot(x_rg)*y_rg;

Memo3.lines.Add(''+floattostr(f));

Button1.Enabled:=True;

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end;

end;

{------------------------------------------------------------------------------}

if RadioGroup1.ItemIndex=12 then

begin

if x_rg=0 then

begin

ShowMessage('введите X1 не равное 0');

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end

else

begin

Memo4.Clear;

Memo4.Lines.Add('(e^x-y)/x ');

f:=(exp(x_rg)-y_rg)/x_rg;

Memo3.lines.Add(''+floattostr(f));

Button1.Enabled:=True;

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end;

end;

{------------------------------------------------------------------------------}

if RadioGroup1.ItemIndex=13 then

begin

if x_rg*y_rg<0 then

begin

ShowMessage('введите X1*Y(X1) >= 0');

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end

else

begin

Memo4.Clear;

Memo4.Lines.Add('(x*y)^(1/2) ');

f:=power(x_rg*y_rg,1/2);

Memo3.lines.Add(''+floattostr(f));

Button1.Enabled:=True;

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end;

end;

{------------------------------------------------------------------------------}

if RadioGroup1.ItemIndex=14 then

begin

Memo4.Clear;

Memo4.Lines.Add(' x+y ');

f:=x_rg+y_rg;

Memo3.lines.Add(''+floattostr(f));

Button1.Enabled:=True;

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end;

{------------------------------------------------------------------------------}

if RadioGroup1.ItemIndex=15 then

begin

Memo4.Clear;

Memo4.Lines.Add(' x*y ');

f:=x_rg*y_rg;

Memo3.lines.Add(''+floattostr(f));

Button1.Enabled:=True;

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end;

{------------------------------------------------------------------------------}

if RadioGroup1.ItemIndex=16 then

begin

Memo4.Clear;

Memo4.Lines.Add('e^(x*y) ');

f:=exp(x_rg*y_rg);

Memo3.lines.Add(''+floattostr(f));

Button1.Enabled:=True;

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end;

{------------------------------------------------------------------------------}

if RadioGroup1.ItemIndex=17 then

begin

Memo4.Clear;

Memo4.Lines.Add('(e^x*y) ');

f:=exp(x_rg)*y_rg;

Memo3.lines.Add(''+floattostr(f));

Button1.Enabled:=True;

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end;

{------------------------------------------------------------------------------}

if RadioGroup1.ItemIndex=18 then

begin

Memo4.Clear;

Memo4.Lines.Add('(x^2)*y ');

f:=power(x_rg,2)*y_rg;

Memo3.lines.Add(''+floattostr(f));

Button1.Enabled:=True;

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end;

{------------------------------------------------------------------------------}

if RadioGroup1.ItemIndex=19 then

begin

Memo4.Clear;

Memo4.Lines.Add('-2*x+(2+x+x^2)*y^2 ');

f:=-2*x_rg+(2+x_rg+power(x_rg,2))*power(y_rg,2);

Memo3.lines.Add(''+floattostr(f));

Button1.Enabled:=True;

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end;

{------------------------------------------------------------------------------}

if RadioGroup1.ItemIndex=20 then

begin

Memo4.Clear;

Memo4.Lines.Add('-x*y+(x+1)*y^2 ');

f:=-x_rg*y_rg+(x_rg+1)*power(y_rg,3);

Memo3.lines.Add(''+floattostr(f));

Button1.Enabled:=True;

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end;

{------------------------------------------------------------------------------}

if RadioGroup1.ItemIndex=21 then

begin

Memo4.Clear;

Memo4.Lines.Add(' x^2*y^2 ');

f:=power(x_rg,2)*power(y_rg,2);

Memo3.lines.Add(''+floattostr(f));

Button1.Enabled:=True;

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end;

{------------------------------------------------------------------------------}

if RadioGroup1.ItemIndex=22 then

begin

Memo4.Clear;

Memo4.Lines.Add(' e^(x-y) ');

f:=exp(x_rg-y_rg);

Memo3.clear;

Memo3.lines.Add(''+floattostr(f));

Button1.Enabled:=True;

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end;

{------------------------------------------------------------------------------}

if RadioGroup1.ItemIndex=23 then

begin

if (x_rg=-y_rg) then

begin

ShowMessage('введите Y(x1)неравное X1');

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end

else

begin

Memo4.Clear;

Memo4.Lines.Add('(x-(y/2))/(x+y) ');

f:=(x_rg-0.5*y_rg)/(x_rg+y_rg);

Memo3.clear;

Memo3.lines.Add(''+floattostr(f));

Button1.Enabled:=True;

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end;

end;

{------------------------------------------------------------------------------}

if RadioGroup1.ItemIndex=24 then

begin

Memo4.Clear;

Memo4.Lines.Add('(x+1)*(y+1) ');

f:=(x_rg+1)*(y_rg+1);

Memo3.lines.Add(''+floattostr(f));

Button1.Enabled:=True;

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end;

{------------------------------------------------------------------------------}

if RadioGroup1.ItemIndex=25 then

begin

Memo4.Clear;

Memo4.Lines.Add('x*e^(y) ');

f:=x_rg*exp(y_rg);

Memo3.lines.Add(''+floattostr(f));

Button1.Enabled:=True;

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end;

{------------------------------------------------------------------------------}

if RadioGroup1.ItemIndex=26 then

begin

if (2*x_rg=-y_rg) then

begin

ShowMessage('введите Y(x1) неравное -2*X1');

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end

else

begin

Memo4.Clear;

Memo4.Lines.Add('(x+1)/(2*x+y) ');

f:=(x_rg+1)/(2*x_rg+y_rg);

Memo3.lines.Add(''+floattostr(f));

Button1.Enabled:=True;

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end;

end;

{------------------------------------------------------------------------------}

if RadioGroup1.ItemIndex=27 then

begin

if (x_rg=0)or(y_rg=0) then

begin

ShowMessage('введите Y(x1) неравное 0');

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end

else

begin

Memo4.Clear;

Memo4.Lines.Add('((x+1)*(y^2))/x*y ');

f:=((x_rg+1)*power(y_rg,2))/x_rg*y_rg;

Memo3.lines.Add(''+floattostr(f));

Button1.Enabled:=True;

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end;

end;

{------------------------------------------------------------------------------}

if RadioGroup1.ItemIndex=28 then

begin

if (x_rg=-y_rg) then

begin

ShowMessage('введите Y(x1) неравное -X1');

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end

else

begin

Memo4.Clear;

Memo4.Lines.Add('(3.4-x*y)/(x+y) ');

f:=(3.4-x_rg*y_rg)/(x_rg+y_rg);

Memo3.lines.Add(''+floattostr(f));

Button1.Enabled:=True;

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end;

end;

{------------------------------------------------------------------------------}

if RadioGroup1.ItemIndex=29 then

begin

if y_rg=0 then

begin

ShowMessage('введите Y(x1) не равное 0');

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end

else

begin

Memo4.Clear;

Memo4.Lines.Add('y-2x/y ');

f:=y_rg-2*x_rg/y_rg;

Memo3.lines.Add(''+floattostr(f));

Button1.Enabled:=True;

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end;

end;

{------------------------------------------------------------------------------}

if RadioGroup1.ItemIndex=30 then

begin

if y_rg=0 then

begin

ShowMessage('введите Y(x1) не равное 0');

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end

else

begin

Memo4.Clear;

Memo4.Lines.Add(' x/y ');

f:=x_rg/y_rg;

Memo3.lines.Add(''+floattostr(f));

Button1.Enabled:=True;

RadioGroup1.Enabled:=False;

RadioGroup1.ItemIndex:=31;

end;

end

{------------------------------------------------------------------------------}

except

on EConvertError do // невозможно преобразовать строку символов в число

begin

MessageDlg('Некорректные значения переменных',mtError,[mbOk],0);

exit;

end;

end;

end;

//------------------------------------------------------------------------------

{Активация ввода образцовых функций}

procedure TRKutta.Button5Click(Sender: TObject);

begin

memo4.clear;

memo3.clear;

RadioGroup1.Enabled:=True; memo1.clear;memo2.Clear;memo3.clear;

memo3.lines.Add(''+floattostr(f));

end;

//------------------------------------------------------------------------------

{Деактивация ввода образцовых функций}

procedure TRKutta.Button6Click(Sender: TObject);

begin

RadioGroup1.Enabled:=False;

Memo3.lines.Add(''+floattostr(f));

end;

//------------------------------------------------------------------------------

{Вывод информации о программе}

procedure TRKutta.N7Click(Sender: TObject);

begin

Form3.ShowModal;

end;

//------------------------------------------------------------------------------

end.

{====================================================}

unit RngeKutta;

interface

uses

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

Dialogs,StdCtrls,Rkt,Menus;

type

TRungeKutta=class(TObject)

constructor CreateGr(var hzx:array of real;var hzy:array of real;var lin_arr:integer);

private

{ Private declarations }

public

{ Public declarations }

x0,y0:integer; //координаты начала координатных осей, 2*x0,2*y0 - высота

// и ширина области вывода координатной сетки

dx,dy:integer; // шаг координатной сетки (в пикселях)

y1,y2,xP,xL:integer;// засечки по оси Y и X

dlx,dly:real; // шаг меток (оцифровки) линий сетки по X и Y

cross:integer; // счетчик неоцифрованных линий сетки

dcross:integer; // количество неоцифрованных линий между оцифрованными

BaseMasht_X,BaseMasht_Y:extended; //МАХ значения элементов в массивах

razm:integer;

uzx:array of real; //Динамический массив координат-X

uzy:array of real; //Динамический массив координат-Y

uxc,uyc:extended; // Оцифровка по осям

mx,my:extended;

function MaxAbsElementArray(arr:array of real;razmer:integer):real;

procedure UstanovkaParametrov();

procedure KoordPloskost;

end;

TForm2 = class(TForm)

MainMenu1: TMainMenu;

N4: TMenuItem;

N5: TMenuItem;

procedure N4Click(Sender: TObject);

procedure N5Click(Sender: TObject);

private

{ Private declarations }

RungeKutta:TRungeKutta; //Объявление переменной - объекта класса

public

{ Public declarations }

end;

var

Form2: TForm2;

implementation

{$R *.dfm}

function TRungeKutta.MaxAbsElementArray(arr:array of real;razmer:integer):real;

var i:integer;

max:real;

begin

i:=1;

max:=arr[1];

while i<>razmer do

begin

i:=i+1;

if abs(arr[i])>max then

begin

max:=abs(arr[i]);

end;

end;

MaxAbsElementArray:=max;

end;

//------------------------------------------------------------------------------

procedure TRungeKutta.UstanovkaParametrov();

begin

//определение max абсолютного значения функции (ордината)

BaseMasht_Y:=MaxAbsElementArray(uzy,razm)+1;

//определение max абсолютного значения аргумента функции (абсцисса)

BaseMasht_X:=MaxAbsElementArray(uzx,razm);

y0:=round(Form2.ClientHeight/2); // оси начинаются в точке (X0,Y0)

x0:=round(Form2.ClientWidth/2);

dcross:=1; // помечать линии сетки X: 1 - каждую;

// 2 - через одну;

// 3 - через две;

dlx:=round(BaseMasht_X)/10; // вес меток оси X

dly:=round(BaseMasht_Y)/10; // вес меток оси Y ,

dx:=round(x0/10); // шаг координатной сетки в пикселях

dy:=round(y0/10); // шаг координатной сетки в пикселях

mx:=round(x0/round(BaseMasht_X)+1);//вычисление масштаба по оси X

my:=round(y0/round(BaseMasht_Y)+1);//вычисление масштаба по оси Y

end;

//------------------------------------------------------------------------------

procedure TRungeKutta.KoordPloskost;

begin

uxc:=0;

uyc:=0;

with form2.Canvas do

begin

cross:=dcross;

//------------------------------------------------------------------------------

//Нанесение засечек и оцифровка координатных осей I,II квадрантов

// засечки и оцифровка по оси X

xP:=x0;

xL:=x0;

repeat

MoveTo(xP,y0-2);LineTo(xP,y0+2); // засечка

MoveTo(xL,y0-2);LineTo(xL,y0+2); // засечка

cross:=cross-1;

if cross = 0 then //оцифровка

begin

TextOut(xP-8,y0+3,FloatToStr(uxc));

TextOut(xL-8,y0+3,FloatToStr(-uxc));

cross:=dcross;

uxc:=uxc+dlx;

end;

Pen.Style:=psDot;

MoveTo(xP,2*y0);LineTo(xP,-2*y0); // линия сетки

MoveTo(xL,2*y0);LineTo(xL,-2*y0);

Pen.Style:=psSolid;

xP:=xP+dx;

xL:=xL-dx;

until (xP>2*x0);

//------------------------------------------------------------------------------

//Нанесение засечек и оцифровка координатных осей III, IV квадрантов

// засечки, и оцифровка по оси Y

y1:=y0-dy;

y2:=y0+dy;

repeat

MoveTo(x0-2,y1);LineTo(x0+2,y1); // засечка

MoveTo(x0-2,y2);LineTo(x0+2,y2);

uyc:=uyc+dly;

TextOut(x0-20,y1,FloatToStr(uyc)); // оцифровка

TextOut(x0-20,y2,FloatToStr(-uyc));

Pen.Style:=psDot;

MoveTo(10,y1);LineTo(2*x0-10,y1); // линия сетки

MoveTo(10,y2);LineTo(2*x0-10,y2);

Pen.Style:=psSolid;

y2:=y2+dy;

y1:=y1-dy;

until (y2>2*y0);

//------------------------------------------------------------------------------

MoveTo(x0,2*y0); LineTo(x0,0); // ось Y

MoveTo(0,y0); LineTo(2*x0,y0); // ось X

end;

end;

//-----------------------------------------------------------------------------

//создание объекта (график функции, координатная сетка, координатные оси)

constructor TRungeKutta.CreateGr(var hzx:array of real;var hzy:array of real;var lin_arr:integer);

var n:integer;

begin

SetLength(uzx,lin_arr); //Установка размера массива uzx

SetLength(uzy,lin_arr); //Установка размера массива uzy

razm:= lin_arr;

for n:=0 to lin_arr do

begin

uzx[n]:=hzx[n]; //инициализация массива uzx

uzy[n]:=hzy[n]; //инициализация массива uzy

end;

UstanovkaParametrov;

KoordPloskost;

for n:=0 to (lin_arr-1) do

begin

form2.canvas.Pixels[(x0+ROUND(uzx[n]*mx)),(y0-round((uzy[n]*my)))]:=clRed;

end;

end;

//------------------------------------------------------------------------------

{Процедура N4Click выводит график функции в установленном масштабе в окне 'График' }

procedure TForm2.N4Click(Sender: TObject);

begin

form2.Canvas.FillRect(Rect(0,0,ClientWidth,ClientHeight));

TRungeKutta.CreateGr(zx,zy,line_arr);

end;

//------------------------------------------------------------------------------

{Процедура N5Click закрывает окно вывода графика функции - результата решния ДУ }

procedure TForm2.N5Click(Sender: TObject);

begin

close;

end;

end.

{====================================================}

Unit Spravka;

interface

uses

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

Dialogs, ExtCtrls, StdCtrls;

type

TForm3 = class(TForm)

Panel1: TPanel;

Label1: TLabel;

Button1: TButton;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Label7: TLabel;

Label8: TLabel;

Label9: TLabel;

Label10: TLabel;

Label6: TLabel;

Label11: TLabel;

Label12: TLabel;

Label13: TLabel;

Label14: TLabel;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form3: TForm3;

implementation

{$R *.dfm}

//------------------------------------------------------------------------------

{Ввывод информации о программе}

procedure TForm3.Button1Click(Sender: TObject);

begin

Caption := 'OK';

ModalResult := mrOK;

OnClick := Button1Click;

end;

end.

{===============================================}

 


7. РЕШЕНИЕ ДИФФЕРЕНЦИАЛЬНОГО УРАВНЕНИЯ Y = Y −2 X / Y МЕТОДОМ РУНГЕ – КУТТА В СРЕДЕ EXCEL

дифференциальное уравнение программирование

2. Решение дифференциального уравнения Y = Y −2 X / Y программой «РЕШЕНИЕ ОДУ» показано на рис. 5 и рис. 6.(стр. 22 - 23 )


ВЫВОД

Программа «Решение ОДУ» решает заданные дифференциальные уравнения первой степени с достаточно высокой степенью точности.



2019-12-29 178 Обсуждений (0)
Технические характеристики 0.00 из 5.00 0 оценок









Обсуждение в статье: Технические характеристики

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ...



©2015-2020 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (178)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.007 сек.)