Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Код для формы Form2

Читайте также:
  1. I. Формы
  2. II Формы общения, к вампиризму не относящиеся
  3. III. Реформы середины XVI в.
  4. IV. 14.5. Формы переживания чувств
  5. Quot;ВИДЕНИЕ" (ПРЕДВЕСТНИКИ, ФОРМЫ, ИСКУССТВО КОНЦЕНТРАЦИИ). ОСТАНОВКА МИРА
  6. V семестр 2014-2015 уч. г. очной формы обучения
  7. VII. ФОРМЫ ИТОГОВОГО КОНТРОЛЯ

unit Unit2;

 

{$mode objfpc}{$H+}

 

interface

 

uses

Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,

ComCtrls, Buttons, StdCtrls, Menus;

type

{ TForm2 }

TForm2 = class(TForm)

Button1: TButton;

Button2: TButton;

Button3: TButton;

Button4: TButton;

Button5: TButton;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Edit4: TEdit;

Edit5: TEdit;

Edit6: TEdit;

Edit7: TEdit;

GroupBox1: TGroupBox;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Label7: TLabel;

Label8: TLabel;

Label9: TLabel;

MainMenu1: TMainMenu;

Memo1: TMemo;

MenuItem1: TMenuItem;

MenuItem10: TMenuItem;

MenuItem11: TMenuItem;

MenuItem2: TMenuItem;

MenuItem3: TMenuItem;

MenuItem4: TMenuItem;

MenuItem5: TMenuItem;

MenuItem6: TMenuItem;

MenuItem7: TMenuItem;

MenuItem8: TMenuItem;

MenuItem9: TMenuItem;

SaveDialog1: TSaveDialog;

 

OpenDialog1: TOpenDialog;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure Button5Click(Sender: TObject);

procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);

procedure FormCreate(Sender: TObject);

procedure MenuItem10Click(Sender: TObject);

procedure MenuItem11Click(Sender: TObject);

procedure MenuItem2Click(Sender: TObject);

procedure MenuItem3Click(Sender: TObject);

procedure MenuItem4Click(Sender: TObject);

procedure MenuItem6Click(Sender: TObject);

procedure MenuItem7Click(Sender: TObject);

procedure MenuItem9Click(Sender: TObject);

procedure TrackBar1Change(Sender: TObject);

private

{ private declarations }

public

{ public declarations }

end;

var

Form2: TForm2;

lgr,rgr,e, i0: real;

lgr_viz,rgr_viz,pribl: real;

koren: array [1..100] of real;

prov, viz:boolean;

n: integer;

b,x: array [1..10] of real;

f: textfile;

path: string;

MinX, MaxX: real;

MinY, MaxY: real;

ScrWidth,ScrHeight,w,h: integer;

implementation

uses Unit3,Unit4,Unit5;

{ TForm2 }

Function I(t:real): real; //функция тока

begin

I:=i0*(sin(t)-cos(2*t))/(t+3);

end;

Function dI(t:real): real; //функция тока

begin

dI:=(i0*(cos(t)+2*sin(2*t))/(t+3))-(i0*(sin(t)-cos(2*t))/((t+3)*(t+3)));

end;

function Power(a, b: real): real; {a^b}

Begin

if a=0 then

Power:=0

Else

Begin

if (a > 0) then

Power:=Exp(Ln(a)*b)

Else

Power:=-Exp(Ln(-a)*b);

End;

End;

function solve(x0:real; eps: real): real;

var

x: real;

a: real;

ch: integer;

begin

x:=x0;

a:= I(x)/dI(x);

ch:=0;

while Abs(a)>eps do

begin

ch:=ch+1; //защита от зацикливания - не более 1000 итераций

x:= x-a;

a:= I(x)/dI(x);

If (ch=1000) Then

begin

MessageDlg('Заданная вами точность не достигнута ', mtError, [mbOK], 0);

break;

end;

end;

solve:= x;

end;

procedure grfic(lgr,rgr: real);

var

imgW, imgh, x0,y0, x_centr, y_centr,pvx,pvy: integer;

mx,my,t, x, x1,y, y1, MinY,MaxY, hag,buf:real;

s: string;

{for vizualizacii }

x_1, X_2,y_1,Y_2: integer;

begin

form3.Show;

imgW:= form3.Image1.Width;

imgh:= form3.Image1.Height;

with form3.Image1.Canvas do

begin //

FillRect(Rect(0,0,2*form3.Image1.Width,2*form3.Image1.Height));

Font.Color:=clBlack;

{nachalnie ustanovki}

x0:=Round(0.1* imgW);

y0:=Round(0.1* imgh);

imgW:=Round(imgW*0.8);

imgh:=Round(imgh*0.8);

{poisk max i min po osi y}

t:= (rgr-lgr)/1000;

x:= lgr;

MinY:= I(x);

MaxY:= I(x);

While (x <= rgr) Do

Begin

x:= x+t;

y:= I(x);

if MinY > y then MinY:= y;

if MaxY < y then MaxY:= y;

End;

{mashtabi po x i y}

mx:= imgW/(rgr-lgr);

if (MaxY>0) and (MinY<=0)then my:= imgh/(MaxY-MinY);

if (MaxY>0) and (MinY>0)then my:= imgh/(MaxY);

if (MaxY<=0) and (MinY<0)then my:= imgh/(abs(MinY));

{jpredelenie polojenij centra}

x_centr:=x0;

if (MinY<0) and (MaxY<=0) then y_centr:=round(y0);

if (MinY<=0) and (MaxY>0) then y_centr:=round(y0+ abs(MaxY)*my);

if (MinY>0) and (MaxY>0) then y_centr:=round(y0+imgh);

{stroica grafica}

Pen.Style:=pssolid; Pen.color:=clRed;

x:= lgr;

Y:= I(x);

x1:=lgr;

While (x1 <= rgr-t) Do

Begin

x1:= x1+t;

y1:= I(x1);

MoveTo(Round(x_centr+(x-lgr)*mx), Round(y_centr-y*my));

LineTo(Round(x_centr+(x1-lgr)*mx), Round(y_centr-y1*my));

x:=x1;

y:=y1;

End;

{osi x i y}

Pen.color:=clBlack;

MoveTo(0, y_centr);

LineTo(round(imgW/0.8), y_centr);

MoveTo(x_centr, 0);

LineTo(x_centr, Round(imgh/0.8));

{opredelinie porjdka velichin osi X}

x:=rgr-lgr;

if x>1 then

begin

pvx:=Trunc(ln(x)/(ln(9.99)));

end;

if x<=1 then

begin

pvx:=-Trunc(abs(ln(x)/(ln(9.99))))-1;

end;

if ((x/(power(10,pvx))>5)) then hag:=1;

if x/(power(10,pvx))<=2.5 then hag:=0.25;

if (x/(power(10,pvx))>2.5) and (x/(power(10,pvx))<=5) then hag:=0.5;

{risovca setki osi x}

Pen.Style:=psDot;

x:= lgr;

Font.Color:=clBlue;

While (x <= rgr) Do

Begin

x:=x+hag*power(10,pvx);

MoveTo(Round(x_centr+(x-lgr)*mx),0);

LineTo(Round(x_centr+(x-lgr)*mx), Round(imgh/0.8));

TextOut(round(x_centr+(x-lgr)*mx+9), y_centr+9, floattostr(x/power(10,pvx)));

End;

s:='t' + '*10^' +floattostr(pvx);

TextOut(round(imgW/0.8)-70, y_centr-25, s);

{opredelinie porjdka velichin osi Y}

if abs(MinY)>abs(MaxY) then y:=abs(MinY)

else y:=abs(MaxY);

if y>1 then

begin

pvy:=Trunc(ln(y)/(ln(9.99)));

end;

if y<=1 then

begin

pvy:=-Trunc(abs(ln(y)/(ln(9.99))))-1;

end;

if ((y/(power(10,pvy))>5)) then hag:=1;

if y/(power(10,pvy))<=2.5 then hag:=0.25;

if (y/(power(10,pvy))>2.5) and (y/(power(10,pvy))<=5) then hag:=0.5;

{risovca setki osi Y}

Font.Color:=clRed;

y:= 0;

While (y <= MaxY) Do

Begin

y:=y+hag*power(10,pvy);

MoveTo(0,Round(y_centr-y*my));

LineTo(Round(imgw/0.8), Round(y_centr-y*my));

TextOut(x_centr+10, Round(y_centr-y*my)-10, floattostr(y/power(10,pvy)));

End;

y:= 0;

While (y >= minY) Do

Begin

y:=y-hag*power(10,pvy);

MoveTo(0,Round(y_centr-y*my));

LineTo(Round(imgw/0.8), Round(y_centr-y*my));

TextOut(x_centr+10, Round(y_centr-y*my)-10, floattostr(y/power(10,pvy)));

End;

s:='I' + '*10^' +floattostr(pvy);

TextOut(x_centr+50, 10, s);

Font.Color:=clRed;

TextOut(x_centr+10, y_centr-20, '0'); {nachalo otscheta po osi Y}

s:=floattostr(lgr/power(10,pvx));

Font.Color:=clBlue;

TextOut(round(x_centr+9), y_centr+9, s); {nachalo otscheta po osi X}

if viz=true then

begin

Pen.Style:=pssolid;

Brush.Style:= bsSolid;

Brush.Color:= clGreen;

x1:=pribl;

repeat

X:= x1 - (i(x1) / di(x1));

Pen.Color:=clGreen;

x_1:=x_centr+Round((x1-lgr)*mX);

x_2:=x_centr+Round((x-lgr)*mX);

y_1:=Round(y_centr-i(x1)*my);

y_2:=Round(y_centr-0*my);

MoveTo(x_1,y_1);

lineto(x_2,y_2);

Ellipse(x_centr+Round((x1-lgr)*mX-3),Round(y_centr-i(x1)*my)-3, x_centr+Round((x1-lgr)*mX)+3,Round(y_centr-i(x1)*my)+3);

Pen.Color:=clblue;

x_1:=x_centr+Round((x-lgr)*mX);

x_2:=x_centr+Round((x-lgr)*mX);

y_1:=Round(y_centr-i(x)*my);

y_2:=Round(y_centr-0*my);

MoveTo(x_1,y_1);

lineto(x_2,y_2);

buf:=x1;

x1:=X;

Until (Abs(X - buf)<= e);

Brush.Color:= clWhite;

end;

end;//

end;

procedure vvod;

begin

prov:=true;

lgr:=strtofloat(form2.edit2.Text);

rgr:=strtofloat(form2.edit3.Text);

e:=strtofloat(form2.edit1.Text);

i0:=strtofloat(form2.edit4.Text);

pribl:=strtofloat(form2.edit5.Text);

lgr_viz:=strtofloat(form2.edit6.Text);

rgr_viz:=strtofloat(form2.edit7.Text);

If (Lgr >= Rgr) or (Lgr_viz >= Rgr_viz) Then

begin

MessageDlg('Левая граница не может быть больше правой или равна ей', mtError, [mbOK], 0);

prov:= False;

End;

If (Lgr <0) or (Lgr_viz <0) Then

begin

MessageDlg('Время не может быть отрицательное!', mtError, [mbOK], 0);

prov:= False;

End;

If i0=0 Then

begin

MessageDlg('I0 не должен быть 0!', mtError, [mbOK], 0);

prov:= False;

End;

If (e<=0) Then

begin

MessageDlg('Точность не может быть меньше или = 0', mtError, [mbOK], 0);

prov:= False;

end;

end;

procedure Poisk_smeni;

var j: integer;

t,x: real;

begin

if prov=true then

begin

form2.memo1.Clear;

t:= Abs((rgr-lgr)/100);

x:=lgr;

j:=0;

While (x <= (rgr - t)) Do

Begin

if (i(x)*i(x+t)<0) then

begin

j:=j+1;

if j=1 then form2.memo1.Lines.add('На интервале обнаружены точки смены знака:');

if i(x)<0 then form2.memo1.Lines.add('Смена А "-" на "+" = '+floattostrf(solve(x,e),fffixed,5,5)+ 'sec')

else form2.memo1.Lines.add('Смена Б "+" на "-" = '+floattostrf(solve(x,e),fffixed,5,5)+ 'sec');

end;

x:= x+t;

End;

if j=0 then form2.memo1.Lines.add('Смены знаков не обнаружено!');

end;

end;

procedure TForm2.Button1Click(Sender: TObject);

begin

vvod;

If (prov=true) Then

begin

Button2.Enabled:=true;

Button3.Enabled:=true;

MessageDlg('Введены коректные данные вазможно продолжение работы!', mtInformation, [mbyes], 0);

End;

end;

procedure TForm2.Button2Click(Sender: TObject);

begin

Poisk_smeni;

end;

procedure TForm2.Button3Click(Sender: TObject);

begin

if prov=true then

begin

grfic(lgr,rgr);

end;

end;

procedure TForm2.Button4Click(Sender: TObject);

begin

form4.Show;

end;

procedure TForm2.Button5Click(Sender: TObject);

begin

if prov=true then

begin

viz:=true;

grfic(lgr_viz, rgr_viz);

viz:=false;

end;

end;

procedure TForm2.FormClose(Sender: TObject; var CloseAction: TCloseAction);

begin

Application.MainForm.Close;

end;

procedure TForm2.FormCreate(Sender: TObject);

begin

viz:=false;

end;

procedure TForm2.MenuItem10Click(Sender: TObject);

begin

Form2.Button5.Click;

end;

procedure TForm2.MenuItem11Click(Sender: TObject);

begin

form5.show;

end;

procedure TForm2.MenuItem2Click(Sender: TObject);

var

tx: string; fl: textfile;

begin

{$I-}

path:='zagr.txt';

assignfile(fl, path);

reset(fl);

readln(fl,tx);

edit1.text:=tx;

readln(fl, tx);

edit2.text:=tx;

readln(fl, tx);

edit3.text:=tx;

closefile(fl);

{$I+}

if IOresult<>0 then showmessage('ошибка при открытии файла: Либо поврежден либо отсутствует.');

end;

procedure TForm2.MenuItem3Click(Sender: TObject);

var

tx: string; i: integer; fl: textfile;

begin

if (prov=true) then

begin

{$I-}

assignfile(fl, 'save.txt');

rewrite(fl);

tx:=' ****** Отчет по вычислениям ****** ';

writeln(fl, tx);

tx:='Левая граница= ' + floattostr(lgr);

writeln(fl, tx);

tx:='правая граница = ' + floattostr(rgr);

writeln(fl, tx);

tx:=' Точность = ' + floattostr(e);

writeln(fl, tx);

tx:='I0= ' + floattostr(i0);

writeln(fl, tx);

for i:=1 to n do

begin

tx:='Корень = ' + floattostr(koren[i]);

writeln(fl, tx);

end;

closefile(fl);

{$I+}

if IOresult<>0 then showmessage('файла Либо поврежден либо отсутствует.');

end;

end;

procedure TForm2.MenuItem4Click(Sender: TObject);

begin

Application.MainForm.Close;

end;

procedure TForm2.MenuItem6Click(Sender: TObject);

begin

Form2.Button3.Click;

end;

procedure TForm2.MenuItem7Click(Sender: TObject);

begin

Form2.Button2.Click;

end;

procedure TForm2.MenuItem9Click(Sender: TObject);

begin

Form2.Button4.Click;

end;

 

 

procedure TForm2.TrackBar1Change(Sender: TObject);

begin

end;

initialization

{$I unit4.lrs}

{$I unit2.lrs}

{$I unit3.lrs}

{$I unit5.lrs}

end.


Дата добавления: 2015-08-05; просмотров: 58 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Создание приложения| Определения и характеристики СК

mybiblioteka.su - 2015-2024 год. (0.039 сек.)