Частина тексту файла (без зображень, графіків і формул):
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
Національний університет «Львівська політехніка»
Кафедра АСУ
Звіт
до лабораторної роботи №5
з курсу “Об'єктно орієнтоване програмування”
Варіант 11
Бунь І.П.
Тема Створення власних класів та об'єктів
Мета роботи: Засвоїти основні поняття об'єктно-орієнтованого програмування, навчитися створювати свої об'єкти і будувати програми, засновані на об'єктному підході.
Порядок роботи:
Створити проект для виконання індивідуального завдання.
Оформити звіт для захисту лабораторної роботи за зразком
назва роботи
мета роботи
порядок роботи
короткі теоретичні відомості
алгоритм розв’язку задачі
тексти відповідних модулів проекту
аналіз отриманих результатів та висновки
Завдання.
Написати програму, яка демонструє роботу з класами та об'єктами. Програма повинна містити меню, яке дозволяє виконати перевірку всіх методів класу.
11. Описати клас для представлення раціональних дробів. Забезпечити виконання операцій додавання, віднімання множення та ділення таких чисел. Передбачите перевірку ділення на нуль.
Тексти програм:
//================================================================================//
// Юніт 1
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,Unit2;
type
TForm1 = class(TForm)
Ach: TEdit;
Azn: TEdit;
Bch: TEdit;
Bzn: TEdit;
Oper: TComboBox;
ResCh: TEdit;
ResZn: TEdit;
procedure AchKeyPress(Sender: TObject; var Key: Char);
procedure AznChange(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
A:TDrib;
B:TDrib;
procedure StartCalc;
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.AchKeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9','-',#13,#8]) then Key:=#0
else if (Key='-') and (Length((Sender as Tedit).Text)>0) then Key:=#0;
end;
procedure TForm1.AznChange(Sender: TObject);
begin
StartCalc;
end;
procedure TForm1.StartCalc;
begin
if (Length(Ach.Text)>0) and
(Length(Azn.Text)>0) and
(Length(Bch.Text)>0) and
(Length(Bzn.Text)>0) and
(Ach.Text<>'-' ) and
(Azn.Text<>'-' ) and
(Bch.Text<>'-' ) and
(Bzn.Text<>'-' ) then
begin
A._SetCh(StrtoInt(Ach.Text));
A._SetZn(StrtoInt(Azn.Text));
A._Sprostutu;
B._SetCh(StrtoInt(Bch.Text));
B._SetZn(StrtoInt(Bzn.Text));
B._Sprostutu;
case Oper.ItemIndex of
0: Begin
A._Add(B);
A._Sprostutu;
ResCh.Text:=InttoStr(A._GetCh());
ResZn.Text:=InttoStr(A._GetZn());
end;
1: begin
A._Sub(B);
A._Sprostutu;
ResCh.Text:=InttoStr(A._GetCh());
ResZn.Text:=InttoStr(A._GetZn());
end;
2: begin
A._Mul(B);
A._Sprostutu;
ResCh.Text:=InttoStr(A._GetCh());
ResZn.Text:=InttoStr(A._GetZn());
end;
3: begin
A._Div(B);
A._Sprostutu;
ResCh.Text:=InttoStr(A._GetCh());
ResZn.Text:=InttoStr(A._GetZn());
end;
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
A:=TDrib.Create;
B:=TDrib.Create;
end;
end.
//====================================================================================
// Юніт 2
unit Unit2;
interface
type
TDrib=class
private
Ch:integer;
Zn:integer;
public
constructor Create;
procedure _Sprostutu;
procedure _Set(NewCh,NewZn:integer);
procedure _SetCh(NewCh:integer);
procedure _SetZn(NewZn:integer);
procedure _Add(B:TDrib);
procedure _Sub(B:TDrib);
procedure _Mul(B:TDrib);
procedure _Div(B:TDrib);
function _GetCh():integer;
function _GetZn():integer;
function _Max(a:integer;b:integer):integer;
end;
implementation
{ TDrib }
procedure TDrib._Add(B: TDrib);
var
c,a,buf:integer;
begin
if Self.Zn=B.Zn then
Self.Ch:=Self.Ch+B.Ch
else
begin
a:=Self.Zn;
buf:=B.Zn;
while buf <> 0 do
begin
c := a mod buf;
a := buf;
buf:= c;
end;
buf:=(Self.Zn*B.Zn)div a;
Self.Ch:= (buf div Self.Zn)*Self.Ch;
B.Ch:= (buf div B.Zn)*B.Ch;
Self.Zn:=buf;
B.Zn:=buf;
Self._Add(B);
end;
end;
procedure TDrib._Div(B: TDrib);
var
temp:integer;
begin
temp:=B.Zn;
B.Zn:=B.Ch;
B.Ch:=temp;
Self._Mul(B);
end;
procedure TDrib._Mul(B: TDrib);
begin
Self.Ch:=Self.Ch*B.Ch;
Self.Zn:=Self.Zn*B.Zn;
end;
procedure TDrib._Sprostutu;
var
c,a,b:integer;
begin
if Zn<0 then
begin
Zn:=Zn*-1;
Ch:=Ch*-1;
end;
a:=abs(Ch);
b:=abs(Zn);
while b <> 0 do
begin
c := a mod b;
a := b;
b:=c;
end;
Ch:=Ch div a;
Zn:=Zn div a;
end;
procedure TDrib._Sub(B: TDrib);
var
c,a,buf:integer;
begin
if Self.Zn=B.Zn then
Self.Ch:=Self.Ch-B.Ch
else
begin
a:=abs(Self.Zn);
buf:=abs(B.Zn);
while buf <> 0 do
begin
c := a mod buf;
a := buf;
buf:= c;
end;
buf:=(Self.Zn*B.Zn)div a;
Self.Ch:= (buf div Self.Zn)*Self.Ch;
B.Ch:= (buf div B.Zn)*B.Ch;
Self.Zn:=buf;
B.Zn:=buf;
Self._Sub(B);
end;
end;
constructor TDrib.Create;
begin
end;
procedure TDrib._Set(NewCh,NewZn: integer);
begin
Self.Ch:=NewCh;
Self.Zn:=NewZn;
end;
procedure TDrib._SetCh(NewCh: integer);
begin
Self.Ch:=NewCh;
end;
procedure TDrib._SetZn(NewZn: integer);
begin
Self.Zn:=NewZn;
end;
function TDrib._GetCh: integer;
begin
result:=Self.Ch;
end;
function TDrib._GetZn: integer;
begin
result:=Self.Zn;
end;
function TDrib._Max(a, b: integer): integer;
begin
if abs(a)>abs(b) then result:=abs(a)
else result:=abs(b);
end;
end.
Скріншоти роботи програми
Висновок: На даній лабораторній роботі я практикував створення власних класів у середовищі візуального програмування Делфі . Освоїв синтаксис оголошення та ініціалізації обєктів типу створеного класу, оголошенню методів та полів класу.
Ви не можете залишити коментар. Для цього, будь ласка, увійдіть
або зареєструйтесь.
Ділись своїми роботами та отримуй миттєві бонуси!
Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!