![]() |
|
#3
|
|||
|
|||
![]() Ну, формулу действительно надо бы смотреть в физике.
Тут другой вопрос. Как сдизайнить классы. Если пойти по простому, то тебе нужны всего 2 класса (т.к. испарять пар как-то не имеет смысла). Хотя, только если возвращать тоже класс. Ну попробуем прикинуть: Код:
type TBase = class protected function GetE(TT, Ro : Integer) : Integer; public m : Integer; // масса T : Integer; // нач. темп. function HeatIt : Integer; virtual; abstract; end; TFog = class(TBase) function HeatIt : Integer; override; end; TWater = class(TFog) function HeatIt : Integer; override; end; TIce = class(TWater) function HeatIt : Integer; override; end; ... function TBase.GetE(TT, Ro : Integer) : Integer; begin // Здесь расчет кол-ва энергии, необходимой для перехода в сл. // агрегатное состояние. Ro - теплоемкость, TT - температура перехода. Result := ...; end; function TFog.HeatIt : Integer; begin // Пар испарить нельзя, он уже пар. Result := 0; end; function TWater.HeatIt : Integer; begin Result := inherited + GetE(100,1000); // Ro = 1000 взято с потолка. глянь в справочнике end; function TIce.HeatIt : Integer; begin Result := inherited + GetE(0,10000); // Ro = 10000 взято с потолка. глянь в справочнике end; Создаешь класс, соответствующий исходному веществу и вызываешь метод HeatIt. Т.е. тебе надо реализовать базовую функцию расчета кол-ва тепла и указать нужные значения Ro во всех остальных. ЗЫ. Что-то знакомая задача. Кто-то уже ее спрашивал, кажись. |