Тема: Объекты
Показать сообщение отдельно
  #3  
Старый 06.05.2010, 00:00
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, формулу действительно надо бы смотреть в физике.
Тут другой вопрос. Как сдизайнить классы.
Если пойти по простому, то тебе нужны всего 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 во всех остальных.

ЗЫ. Что-то знакомая задача. Кто-то уже ее спрашивал, кажись.
Ответить с цитированием