(Условие:создать родительский класс квадрат со стороной и найти его периметр и площадь.А его производный класс пирамида с апофемой. вычислить площадь ее поверхности )
Unit1
- Код: Выделить всё
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,Unit2,Unit3;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Edit1Change(Sender: TObject);
procedure Edit2Change(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Label2Click(Sender: TObject);
procedure Label3Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
Kva:TKvadrat;
Pyr:TPyramida;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
end;
procedure TForm1.Label2Click(Sender: TObject);
begin
end;
procedure TForm1.Label3Click(Sender: TObject);
begin
end;
procedure TForm1.Edit1Change(Sender: TObject);
begin
end;
procedure TForm1.Button1Click(Sender: TObject);
var
k,a:integer;
begin
k:=strtoint(Edit1.Text);
a:=strtoint(Edit2.Text);
Kva:=TKvadrat.Create(k);
Pyr:=TPyramida.Create(a);
showmessage('Ok');
label3.Caption:=Pyr.info;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Edit1.clear;
Edit2.clear;
Label3.Caption:='';
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Kva.free;
Pyr.free;
close
end;
procedure TForm1.Edit2Change(Sender: TObject);
begin
end;
end.
Unit2
- Код: Выделить всё
unit Unit2;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
type
TKvadrat=class(TObject)
private
FStorona: integer;
FPloshad:integer;
FPerimetr:integer;
procedure Get_Storona(st:integer);
public
constructor Create(st:integer);
function info:string;
function perimetr (st,pe:integer):integer;
function ploshad (st,pl:integer):integer;
property Storona :integer read FStorona write Get_Storona;
end;
implementation
constructor TKvadrat.Create(st:integer);
begin
FStorona:=st;
inherited Create;
end;
function TKvadrat.info:string;
begin
result:='Квадрат со стороной:'+intTostr(FStorona)+'см'+' '+'имеет периметр:'+intTostr(FPerimetr)+'см'
+' '+#13#10+'и площадь:'+intTostr(FPloshad)+'см,';
end;
procedure TKvadrat.Get_Storona(st:integer);
begin
if (st>0) and (st<>0) then FStorona:=st
else
FStorona:=2;
FStorona:=st;
end;
function TKvadrat.perimetr(st,pe:integer):integer;
begin
pe:= 4*st;
FPerimetr:=pe;
result:= FPerimetr;
end;
function TKvadrat.ploshad(st,pl:integer):integer;
begin
pl:= st*st;
FPloshad:=pl;
result:=Fploshad;
end;
end.
Unit3
- Код: Выделить всё
unit Unit3;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils,Unit2;
type
TPyramida=class(TKvadrat)
private
FApofema: integer;
FPyramida: real;
procedure Get_Apofema(ap:integer);
public
function info:string;overload;
constructor Create(ap:integer);
function pyramida (pe,pl,ap:integer; py:real):real;
end;
implementation
constructor TPyramida.Create(ap:integer);
begin
inherited Create(ap);
FApofema:= ap;
end;
function TPyramida.info:string;
begin
result:= inherited info+' '+'а пирамида с апофемой:'+ intTostr(FApofema)+'см'+
' '+'и с основанием аналогичного квадрата имеет площадь:'+floatTostr(FPyramida)+'см.';
end;
procedure TPyramida.Get_Apofema(ap:integer);
begin
if (ap>0) and (ap<>0) then FApofema:=ap
else
FApofema:=4;
FApofema:=ap;
ap:=4;
end;
function TPyramida.pyramida (pe,pl,ap:integer; py:real):real;
begin
py:=((1/2)*ap*pe)+pl;
FPyramida:=py;
result:=Fpyramida;
end;
end.