Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Interface. uses SysUtils,Classes;





uses SysUtils,Classes;

Type

TMyEvent= procedure (Sender:TObject;OldP,OldQ:longint) of Object;

 

TDrob= class

Private

fName: string;

fp,fq:longint;

fOnChange:TNotifyEvent;

fOnZero:TMyEvent;

procedure SetP(NewP:longint);

procedure SetQ(NewQ:longint);

 

Public

constructor Create(aName: string);

procedure Swap;

procedure Add(a:TDrob);

function Info: string;

function GetValue:real;

procedure SetValue(NewValue:real);

procedure SetPQ(NewP,NewQ:longint);

property Name: string read fName write fName;

property Value:real read GetValue write SetValue;

property p:longint read fp write SetP;

property q:longint read fq write SetQ;

property OnChange:TNotifyEvent read fOnChange write fOnChange;

property OnZero:TMyEvent read fOnZero write fOnZero;

end;

Implementation

procedure TDrob.SetPQ(NewP, NewQ: longint);

var pp,qq: longint;

Begin

if (NewP<>p) or (NewQ<>q) then

Begin

pp:=p; qq:=q;

if NewQ<>0

Then

begin fp:=NewP; fq:=NewQ; Normalization; end

Else

begin fp:=NewP; fq:=1;

if assigned(fOnZero) then OnZero(Self,pp,qq)

end;

if assigned(fOnChange) then OnChange(Self);

end;

end;

 

constructor TDrob.Create;

Begin

inherited Create;

Name:=aName;

SetPQ(1,1);

end;

 

function TDrob.Info: string;

Begin

Result:='Дробь '+Name+'= '+ IntToStr (p)+'/'+ IntToStr (q)+'='+

FloatToStrF (Value,ffFixed,9,5);

end;

 

procedure TDrob.Swap;

Begin

SetPQ(q,p);

end;

 

procedure TDrob.Add(a: TDrob);

Begin

SetPQ(p*a.q+q*a.p,q*a.q);

end;

 

procedure TDrob.SetP(NewP:longint);

Begin

SetPQ(NewP,q);

end;

 

procedure TDrob.SetQ(NewQ: longint);

Begin

SetPQ(p,NewQ);

end;

 

function TDrob.GetValue: real;

Begin

Result:=p/q;

end;

 

procedure TDrob.SetValue(NewValue: real);

Begin

SetPQ(round(NewValue*10000),10000);

end;

end.

Delphi – дегі демонстрациялық бағдарлама

– Drobs модульі қосылады:

Uses

Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, Drobs;

– екі бөлшекке тағайындалған айнымалылар сипатталынады:

Var

Form1: TForm1;

a,b: TDrob;

– пішінге келесі объектілер орналастырылады:

GroupBox1, GroupBox2 бірінші және екінші бөлшектердің демонстрациясы үшін;
Label1, Edit1 бірінші бөлшектің бөліндісі
Label2, Edit2 бірінші бөлшектің бөлгіші
Label3, Edit3 бірінші бөлшектің мәні
Label4, Edit4 екінші бөлшектің бөліндісі
Label5, Edit5 екінші бөлшектің бөлгіші
Label6, Edit6 екінші бөлшектің мәні
Button1 "Орын ауыстыру"
Button2 "+"
Button3 "INFO" бірінші бөлшек үшін
Button4 "INFO" екінші бөлшек үшін

– үш процедура қосылады – бөлшектерді өңдеу үшін:

  • бірінші бөлшектің өзгеруі:

procedure TForm1.AChange(Sender: TObject);

Begin

GroupBox1.Caption:=a.Name;

Edit1.Text:= IntToStr (a.p);

Edit2.Text:= IntToStr (a.q);

Edit3.Text:= FloatToStrF (a.Value,ffFixed,9,5);

end;

  • екінші бөлшектің өзгеруі:

procedure TForm1.BChange(Sender: TObject);

Begin

GroupBox2.Caption:=b.Name;

Edit4.Text:= IntToStr (b.p);

Edit5.Text:= IntToStr (b.q);

Edit6.Text:= FloatToStrF (b.Value,ffFixed,9,5);

end;

  • екі бөлшек үшін бөлгіштің нольге айналуы:

procedure TForm1.ZeroEvent(Sender: TObject;
OldP,OldQ:longint);

Begin

with sender as TDrob do

if MessageDlg ('Дробь '+Name+
' получила нулевой знаменатель,'+
' который бы заменен единицей.
Восстановить прежнее значение?',
mtWarning,[mbYes,mbNo],0) = mrYes then SetPQ(OldP,OldQ);

end;

– бөлшектерді басқаруға арналған көрнекілік құрауыштардың өңдеу - процедуралары қосылып жазылады:

  • Form1.OnCreate оқиғасының өңделуі (пішінді құру):

a:=TDrob.Create('a');

a.OnChange:=AChange; a.OnChange(a);

a.OnZero:=ZeroEvent;


b:=TDrob.Create('b');

b.OnChange:=BChange; b.OnChange(b);

b.OnZero:=ZeroEvent;

  • бөлінді мен бөлгіштің терезелерінде символдық батырмалардың басылуы
    Edit1, Edit2, Edit4, Edit5 құрауыштары үшін OnKeyPress оқиғасы:

var st: string;

Begin

with Sender as TEdit do

Begin

st:=text;

if Key='-'







Date: 2015-07-01; view: 585; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.01 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию