Unit polimor_;
Interface
Uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
ТForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
GroupBox1: TGroupBox;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
( Private declarations )
public
( Public declarations )
end;
type
// базалық класс
TPerson = class
FName: String; // өрістің аты
Constructor Create(AName: String);
Function Info: String; virtual;
end;
// Студент класы
TStud = class (TPerson)
FGr: Integer; // оқу тобының нөмірі
Constructor Create(AName: String; Gr: Integer);
Function Info: String; override;
end;
// Оқытушы класы
TProf = class(TPerson)
FDep: String; // құжыраның аты
Constructor Create(AName: String; Dep: String);
Function Info: String; override;
end;
const
SZL = 10; // тізімнің өлшемі
var
Forml: TForml
List: array[1..SZL] of TPerson; // тізім
n: Inteqer = 0 // тізімдегі адамдар саны
implementation
($R *.DFM}
constructor TPerson.Create(AName: string);
begin
FName:=AName;
end;
constructor TStud.Create(AName: string; Gr: integer);
begin
inherited Create(AName); // базалық кластың конструкторын шақыру
FGr:=Gr;
end;
constructor TProf.Create(AName: string; Dep: string);
begin
inherited Create(AName); // базалық кластың конструкторын шақыру
FDep:=Dep;
end;
function TPerson.Info: string;
begin
result:=FName;
end;
function TStud.Info: String;
begin
result := FName + ' группа ' + IntToStr(FGr)
end;
function TProf.Info: String;
begin
result := FName + ' кафедра ' + FDep;
end;
// Добавить батырмасына шерту
procedure ТForm1.Button1Click(Sender: TObject);
begin
if n < SZL then
begin
// объектіні класқа қосу
n:=n+1;
if RadioButton1.Checked
then // TStud объектісін құру
List[n]:=TStud.Create(Edit1.Text,StrToInt(Edit2.Text))
else // TProf объектісін құру
if RadioButton2.Checked then List[nl:=TРrоf.Create(Edit1.Text,Edit2.Text);
// енгізу өрісін тазалау
Edit1.Text :=' ';
Edit2.Text :=' ';
Edit1.SetFocus; // Тышқанның меңзері Фамилия өрісінде
end
else ShowMessage('Список заполнен!');
end;
procedure ТForm1.Button2Click(Sender: TObject);
var
i:integer; // индекс
st:string; // тізім
begin
for i:=1 to SZL do
if list[i] <> NIL then st:=st + list[i].info + #13;
ShowMessage(' Список ' + #13 + st);
end;
end.
Добавить (Button1) батырмасын басқанда іске қосылатын TForm1.Button1Click процедурасы TStud немесе TProf класының list[n] объектісін құрады. Құрылып жатқан объектінің класы RadioButton ауыстырып қосу батырмасының күйімен анықталады. Ауыстырып қосу батырмасының студент (RadioButton1) жағдайында орнатылуы TStud класын анықтайды, ал оқытушы (RadioButton2) жағдайы – TProf класын анықтайды.
Список (Button2) батырмасын басқанда іске қосылатын TForm1.Button2Click процедурасы тізімнің әрбір объектісіне (массив элементтеріне) Info әдісін қолдана отырып,барлық тізімді көрсететін жолды қалыптастырады.
Зертханалық жұмыс №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.
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;
2>
Достарыңызбен бөлісу: |