МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
Національний університет «Львівська політехніка»
Кафедра АСУ
Звіт
до лабораторної роботи №5
з курсу “Об'єктно орієнтоване програмування”
Варіант 8
Бунь І.П.
Тема Створення власних класів та об'єктів
Мета роботи: Засвоїти основні поняття об'єктно-орієнтованого програмування, навчитися створювати свої об'єкти і будувати програми, засновані на об'єктному підході.
Порядок роботи:
Створити проект для виконання індивідуального завдання.
Оформити звіт для захисту лабораторної роботи за зразком
назва роботи
мета роботи
порядок роботи
короткі теоретичні відомості
алгоритм розв’язку задачі
тексти відповідних модулів проекту
аналіз отриманих результатів та висновки
Завдання.
Написати програму, яка демонструє роботу з класами та об'єктами. Програма повинна містити меню, яке дозволяє виконати перевірку всіх методів класу.
Описати клас поліномів від однієї змінної, що задаються степенем полінома та масивом коефіцієнтів. Передбачити методи для обчислення значення полінома для заданого аргументу, операції додавання, віднімання та множення поліномів з одержанням нового об'єкта-полінома, вивід на екран опису полінома.
Тексти програм:
//================================================================================//
// Юніт 1
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,Polynom, StdCtrls, ExtCtrls;
type
TTestClass = class(TForm)
AStep: TEdit;
Label1: TLabel;
ACoef: TEdit;
Label2: TLabel;
ACreate: TButton;
AResult: TLabel;
Label4: TLabel;
Label5: TLabel;
BResult: TLabel;
BStep: TEdit;
BCoef: TEdit;
BCreate: TButton;
Operations: TComboBox;
DoCulc: TButton;
ResultofCulc: TLabel;
Label3: TLabel;
Shape1: TShape;
Label6: TLabel;
Shape2: TShape;
Shape3: TShape;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
AXequal: TEdit;
Label11: TLabel;
Label12: TLabel;
BXequal: TEdit;
Label13: TLabel;
ThenB: TLabel;
ThenA: TLabel;
procedure FormCreate(Sender: TObject);
procedure StepKeyPress(Sender: TObject; var Key: Char);
procedure CoefKeyPress(Sender: TObject; var Key: Char);
procedure CreateClick(Sender: TObject);
procedure DoCulcClick(Sender: TObject);
procedure DataChange(Sender: TObject);
procedure equalChange(Sender: TObject);
procedure equalKeyPress(Sender: TObject; var Key: Char);
procedure OperationsChange(Sender: TObject);
private
{ Private declarations }
public
function GetCoef(Str:string;_from:word;_to:word):string;
{ Public declarations }
end;
var
TestClass: TTestClass;
A:TPolynom;
B:Tpolynom;
AandBisInit:byte;
implementation
{$R *.dfm}
procedure TTestClass.FormCreate(Sender: TObject);
begin
AandBisInit:=0;
DoCulc.Enabled:=false;
Operations.Enabled:=false;
AXequal.Enabled:=false;
BXequal.Enabled:=false;
A:=TPolynom.Create;
B:=TPolynom.Create;
AResult.Caption:='Ще ні';
BResult.Caption:='Ще ні';
end;
procedure TTestClass.StepKeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['1'..'9',#8]) then key:=#0;
end;
procedure TTestClass.CoefKeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9',',','-',#8]) then key:=#0;
case key of
'-':begin
if (Length((Sender as TEdit).Text)>0) then
if not ((Sender as TEdit).Text[Length((Sender as TEdit).Text)]=',')then key:=#0;
end;
',':begin
if (Length ((Sender as TEdit).Text)=0) then Key:=#0
else if not((Sender as TEdit).Text[Length((Sender as TEdit).Text)] in ['0'..'9']) then key:=#0;
end;
end;
end;
procedure TTestClass.CreateClick(Sender: TObject);
var
i:integer;
count:integer;
cursor:integer;
endofdigit:integer;
pPolynom:^TPolynom;
pCoefEdit:^TEdit;
pResultEdit:^TLabel;
pStepEdit:^TEdit;
pXEdit:^TEdit;
begin
if(Sender as TButton).tag=0 then
begin
pPolynom:=@A;
pStepEdit:=@AStep;
pCoefEdit:=@ACoef;
pResultEdit:=@AResult;
pXEdit:=@AXequal;
end
else
begin
pPolynom:=@B;
pStepEdit:=@BStep;
pCoefEdit:=@BCoef;
pResultEdit:=@BResult;
pXEdit:=@BXequal;
end;
// if then Application.MessageBox('Ви не ввели ви не ввили коефыцыэнти поліному!!!','Помилка')
if (Length(pStepEdit.Text)=0) or (Length(pCoefEdit.Text)=0) then Application.MessageBox('Ви не ввели всі параметри'+#13+'для створення поліному!!!','Помилка')
else
begin
count:=0;
for i:=1 to Length(pCoefEdit.Text) do
if pCoefEdit.Text[i]=',' then count:=count+1;
if pCoefEdit.Text[Length(pCoefEdit.Text)] in ['0'..'9'] then count:=count+1;
if count=0 then Application.MessageBox('Ви не ввели коефіціэнти','Помилка')
else if not (pCoefEdit.Text[Length(pCoefEdit.Text)] in['0'..'9']) then Application.MessageBox('Помилка у останньому коефіцієнті','Помилка')
else if count>StrToInt(pStepEdit.Text) then Application.MessageBox('Ви ввели забагато коефіціэнтів','Помилка')
else if count<StrToInt(pStepEdit.Text) then Application.MessageBox('Ви ввели недостатньо коефіціэнтів','Помилка')
else begin
pPolynom.SetStep(StrtoInt(pStepEdit.Text));
cursor:=1;
endofdigit:=1;
for i:=0 to pPolynom.GetStep-1 do
begin
while ((pCoefEdit.Text[endofdigit]<>',')and (pCoefEdit.Text[endofdigit]<>#0)) do
endofdigit:=endofdigit+1;
pPolynom^[i]:=Strtoint(GetCoef(pCoefEdit.Text,cursor,endofdigit));
cursor:=endofdigit+1;
endofdigit:=cursor;
end;
pResultEdit.Caption:=' '+pPolynom.GetPolyStr;
AandBisInit:=AandBisInit or((Sender as TButton).Tag+1);
if(AandBisInit=3) then
begin
DoCulc.Enabled:=true;
Operations.Enabled:=true;
end;
pXEdit.Enabled:=true;
pXEdit.Text:='';
(Sender as TButton).Enabled:=false;
end;
end;
end;
function TTestClass.GetCoef(Str: string; _from, _to: word): string;
var
i:integer;
begin
SetLength(result,_to-_from);
for i:=1 to _to-_from do
result[i]:=Str[i+_from-1];
end;
procedure TTestClass.DoCulcClick(Sender: TObject);
begin
if AandBisInit=3 then
begin
case Operations.ItemIndex of
-1: Application.MessageBox('Ви не обрали операцію','Помилка');
0: ResultofCulc.Caption:='A+B= '+(A.Add(B)).GetPolyStr;
1: ResultofCulc.Caption:='A-B= '+(A.Sub(B)).GetPolyStr;
2: ResultofCulc.Caption:='A*B= '+(A.Mul(B)).GetPolyStr;
end;
end
end;
procedure TTestClass.DataChange(Sender: TObject);
begin
DoCulc.Enabled:=false;
AandBisInit:=AandBisInit and ((Sender as TEdit).Tag);
if ((Sender as TEdit).Tag)=2 then
begin
ACreate.Enabled:=true;
AXequal.Enabled:=false;
AXequal.Text:='Lock';
ThenA.Caption:='';
AResult.Caption:='У процесі створення';
end
else
begin
BCreate.Enabled:=true;
BXequal.Enabled:=false;
BXequal.Text:='Lock';
ThenB.Caption:='';
BResult.Caption:='У процесі створення';
end;
end;
procedure TTestClass.equalChange(Sender: TObject);
begin
if (Length((Sender as TEdit).Text)>0) and ((Sender as TEdit).Text<>'-')and(Sender as TEdit).Enabled then
if (Sender as TEdit).Tag=0 then ThenA.Caption:=IntToStr(A.Culc(StrtoInt((Sender as TEdit).Text)))
else ThenB.Caption:=IntToStr(B.Culc(StrtoInt((Sender as TEdit).Text)));
end;
procedure TTestClass.equalKeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9',#8,'-']) then key:=#0;
if (Length((Sender as TEdit).Text)>0) and (Key='-') then key:=#0;
end;
procedure TTestClass.OperationsChange(Sender: TObject);
begin
ResultofCulc.Caption:='';
end;
end.
Скріншоти роботи програми
Висновок: На даній лабораторній роботі я практикував створення власних класів у середовищі візуального програмування Делфі . Освоїв синтаксис оголошення та ініціалізації обєктів типу створеного класу, оголошенню методів та полів класу.