ПОӘК 042-18-11 20. 84/01-2013 №1 баспа 26. 08. 2013 ж


Практикалық жұмыс №5 "Қаситтер мен әдістер"



бет17/22
Дата12.03.2018
өлшемі3,6 Mb.
#38774
1   ...   14   15   16   17   18   19   20   21   22

Практикалық жұмыс №5 "Қаситтер мен әдістер"



Кластың сипатталынуы "Қос мәнді теріс емес бүтін сан" (TN2).

Қасиет – аты, мәні, тақтық, бірінші сан, екінші сан.

Әдістер:

процедуры: мәнді орнату (SetN2), сандарды ауыстыру (Swap);

функциялар: басқа санға қарағанда кіші (LessThen), ақпарат (Info);

конструктор (Create).

Листинг 2.2 «TN2» класын жүзеге асыратын бағдарламаның демонстрациясы

program Class_TN2;

{$APPTYPE CONSOLE} {Компилятор директивасыбағдарламаның жұмыс істеу режимінің тапсырмасы.}



{MS-DOS режиміне тәріздес мәтіндік режимнің эмуляторы құрылады}

uses SysUtils;

type

TN2 = class

fName: String;

fVal: integer;



constructor Create(aName: String);

procedure Swap;

function Info: String;

function LessThen(aNum: TN2): Boolean;
procedure SetVal(Value:Integer);

function GetOdd:string;

function GetD1:byte;

procedure SetD1(Value:byte);

function GetD2:byte;

procedure SetD2(Value:byte);
property Name:string read fName;

property Odd:string read GetOdd;

property Val:integer read fVal write SetVal;

property D1:byte read GetD1 write SetD1;

property D2:byte read GetD2 write SetD2;

end;

constructor TN2.Create(aName: String);

begin

fName:=aName;

fVal:=1;

end;

procedure TN2.Swap;

begin

SetVal(D2*10+D1);



end;

function TN2.Info: String;

begin

Result:='Naturalnoe dvuznachnoe '+odd+


' chislo '+Name+'='+IntToStr(Val)+#10#13+' first number='
+IntToStr(D1)+' second number='+IntToStr(D2);

end;

procedure TN2.SetVal(Value: Integer);

begin

if (Value>=0) and (Value<=99) then fVal:=Value;

end;

function TN2.LessThen(aNum: TN2): boolean;

begin

Result:= Val

end;

function TN2.GetOdd: string;

begin

if (val mod 2=1) then Result:='nechetnoe'

else Result:='chetnoe';

end;

function TN2.GetD1: byte;

begin

Result:=Val div 10;



end;

procedure TN2.SetD1(Value: byte);

begin

if Value in [0..9] then SetVal(Value*10+D2)

end;

function TN2.GetD2: byte;

begin

Result:=Val mod 10;



end;

procedure TN2.SetD2(Value: byte);

begin

if Value in [0..9] then SetVal(D1*10+Value)

end;
var a,b : TN2;
begin

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



b:= TN2.Create(' b '); { Бағдарламаның орындалуының нәтижесі

b.Val:= 23; {

Writeln(a.Info); {
Writeln(b.Info); {

b.swap; {

a.D1:= 5; {

a.D2:= 8; {



Writeln(a.Info); {
Writeln(b.Info); {

a.Free; {

b.Free; {

Readln; {

end.

Өз бетінше орындауға арналған тапсырма

Кластың сипатталынуы "Жазықтықтағы нүкте" (TDot).

Қасиеттер – аты, декарттық координаталар, полярлық координаталар,
жазықтықтың нөмірі (егер оське тиісті болса, онда 0-ге тең), оське тиісті ме?

Әдістер:

процедуралар: басқа нүктеге дейінгі ара қашықтық (RoFrom), векторға көшу (dx,dy) (MoveRel); координаталар басына қарағанда симметриялық бейнелеу (SimmZero), x=y осіне қарағанда симметриялық бейнелеу (SimmXY);

функциялар: ақпарат (Info);

конструктор (Create).


Практикалық жұмыс №6 "Оқиғалар"


Кластың сипатталынуы "Кәдімгі бөлшек" (TDrob).

Қасиеттері – аты, мәні, бөлінді және бөлгіш.

Әдістер:

процедуралар: бөлшекті орынымен ауыстыру (Swap), басқа бөлшектің мәнін қосу (Add);

функциялар: ақпарат (Info);

конструктор (Create).



Оқиғалар:

– бөлшек өзгерді (OnChange), стандарттық;

– бөлгіш нөлге тең (OnZero), параметрлері – ескі мән.

2.3 листингі «TDrobs» класының жариялануынан тұратын DROBS модульі



unit Drobs; 

interface 

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='-'

then begin

if st[1]='-' then Delete(st,1,1)

else st:='-'+st;

Text:=st;



end;

if not (Key in ['0'..'9',#8]) then Key:=#0;

if Key=#8 then if Length(st)<2 then Key:=#0;

end;

end

  • бөлінді мен бөлгіштің өзгеруі

Edit1.OnChange: a.p:=StrToInt(Edit1.Text);
Edit2.OnChange: a.q:=StrToInt(Edit2.Text);
Edit4.OnChange: b.p:=StrToInt(Edit4.Text);
Edit5.OnChange: b.q:=StrToInt(Edit5.Text);

  • бөлшектің мәнінің өзгеруі ( батырмасын басқанда)

Edit3.OnKeyPress: if Key=#13 then
a.Value:=StrToFloat(edit3.Text);
Edit6.OnKeyPress
: if Key=#13 then
b.Value:=StrToFloat(edit6.Text);

  • "Обмен" батырмасының басылуы

Button1.OnClick: a.Swap;

  • "+" батырмасын басу

Button2.OnClick: a.Add(b);

Button3.OnMouseMove: Button3.Hint:=a.info;

  • екінші бөлшектің "INFO" батырмасының үстінен тышқанды жылжыту

Button4.OnMouseMove: Button4.Hint:=b.info; 

Өз бетінше орындауға тапсырма

берілген (TDrob) класына қосу керек:



Қасиеттер:

Simple, қарапайымдылық (числитель меньше знаменателя), оқуға;

Changable, өзгертуге рұқсат етіледі, оқу мен жазуға арналған.

Әдістер:

процедуралар: басқа бөлшекпен"" (Sub), "*" (Mult), "/" (Div) амалдары; басқа бөлшектің ақпараттық өрістерінің көшірмесін жасайтын - Assign(d:TDrob) процедурасы;

Compare(d:TDrob) функциясы, ағымды бөлшекті басқа бөлшекпен салыстырады (Self=d, Self>d, Self
Оқиға:

OnChanging (бөлшек өзгереді), өңдеу – процедурасының интерфейсіде (аналогия бойынша с var Accept: Boolean OnDragOver оқиғасы үшін) буль айнымалысы орналасады, ол жаңа мәннің корректілігін анықтайды: (үнсіздік TRUE, FALSE жағдайында алдыңғы мән қайта қалпына келеді). Берілген мүмкіншілкті қолдана отырып бір бөлшекке модульі бойынша 100-ден аспайтын мән қабылдауға, ал екіншісіне жұп бөлгіш қабылдауға рұқсат етілмейді.




Достарыңызбен бөлісу:
1   ...   14   15   16   17   18   19   20   21   22




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет