Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2010, 13:08   #1
MaxMad
Пользователь
 
Регистрация: 15.05.2010
Сообщений: 10
Восклицание Наследование в делфи.

Имеется вот такое задание:
Создать класс Triangle с полями-сторонами. Определить методы изменения сторон, вычисления углов, вычисления периметра. Создать производный класс RightAngled (прямоугольный), имеющий поле площади. Определить метод вычисления площади.

Часть кода я выполнил но часть не могу понять как сделать. Помогите пожалуйста с методами изменения сторон и проверьте правильно ли сделан метод определения площади в производном классе.
Вот то что я уже сделал:

Сама программа:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Unit2;

type
TForm1 = class(TForm)
LabeledEdit1: TLabeledEdit;
LabeledEdit2: TLabeledEdit;
LabeledEdit3: TLabeledEdit;
ListBox1: TListBox;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;


implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
a,b,c:currency;
TR:TTriangle;
RA:TRightAngled;

begin
ListBox1.Clear;
A:=strtofloat(LabeledEdit1.Text);
B:=strtofloat(LabeledEdit2.Text);
C:=strtofloat(LabeledEdit3.Text);
if (a<=0) and (b<=0) and (c<=0) then MessageDlg('Còîðîíà íå ìîæåò áûòü ìåíüøå íîëÿ èëè ðàâíà íîëþ',mtError,[mbOK],0) else
begin
TR:=TTriangle.Create(a,b,c);
listbox1.Items.Add('P = '+floattostr(TR.PT(TR)));
listbox1.Items.Add('<AC = '+floattostr(TR.AAC(TR))+'*');
listbox1.Items.Add('<AB = '+floattostr(TR.AAB(TR))+'*');
listbox1.Items.Add('<BC = '+floattostr(TR.ABC(TR))+'*');
RA:=TRightAngled.Create(a,b,c);
if (TR.AAC(TR)=90) or (TR.AAB(TR)=90) or (TR.ABC(TR)=90) then
begin
RA.ST(RA);
listbox1.Items.Add('S = '+floattostr(RA.FS));
end;
RA.Destroy;
TR.Destroy;
end;
end;
end.



а вот модуль:

unit Unit2;
interface
uses
SysUtils, Variants, Classes,Math;
type
TTriangle = class
private
FA,FB,FC:currency;
public
function PT(FTriangle:TTriangle):currency;
function AAC(FTriangle:TTriangle):currency;
function AAB(FTriangle:TTriangle):currency;
function ABC(FTriangle:TTriangle):currency;

Constructor Create(A,B,C:currency);
Destructor Destroy;
end;

TRightAngled = class(TTriangle)
private
//
public
FS:currency;
procedure ST(FTriangle:TTriangle);
end;

implementation




function TTriangle.PT(FTriangle:TTriangle):c urrency;
var
R:currency;
begin
R:=FA+FB+FC;
Result:=R;
end;


function TTriangle.AAC(FTriangle:TTriangle): currency;
var
R:currency;
begin
R:=RadToDeg(ArcCos((-sqr(FB)+sqr(FC)+sqr(FA))/(2*FA*FC)));
Result:=R;
end;


function TTriangle.AAB(FTriangle:TTriangle): currency;
var
R:currency;
begin
R:=RadToDeg(ArcCos((-sqr(FC)+sqr(FB)+sqr(FA))/(2*FA*FB)));
Result:=R;
end;


function TTriangle.ABC(FTriangle:TTriangle): currency;
var
R:currency;
begin
R:=RadToDeg(ArcCos((-sqr(FA)+sqr(FC)+sqr(FB))/(2*FB*FC)));
Result:=R;
end;



Procedure TRightAngled.ST(FTriangle:TTriangle );
var
R,P2:currency;
begin
P2:=(FA+FB+FC)/2;
FS:=sqrt(p2*(p2-FA)*(p2-FB)*(p2-FC));
end;




Constructor TTriangle.Create(a,b,c:currency);
begin
inherited Create;
fa:=a;
fb:=b;
fc:=c;
end;

destructor TTriangle.Destroy;
begin
inherited Destroy;
end;



end.

Заранее благодарю.
MaxMad вне форума Ответить с цитированием
Старый 30.05.2010, 13:42   #2
baster128
Форумчанин
 
Аватар для baster128
 
Регистрация: 24.04.2010
Сообщений: 205
Злость

Извини я не очень трезвый сегодня. Но мне кажется, что такие задачи решаются по принципу "от простого к сложному". Очень заморочено условие.
baster128 вне форума Ответить с цитированием
Старый 30.05.2010, 14:03   #3
MaxMad
Пользователь
 
Регистрация: 15.05.2010
Сообщений: 10
По умолчанию

Условие не я писал
MaxMad вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Наследование notHaker Общие вопросы Delphi 5 24.05.2010 18:55
Наследование Сергей089 Помощь студентам 6 07.02.2010 12:04
Наследование на C++ dziga1989 Помощь студентам 5 22.10.2009 11:25
Наследование alex_triton Общие вопросы C/C++ 0 19.10.2009 20:25
Наследование Кирилл13 Общие вопросы C/C++ 1 11.11.2008 14:47