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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2011, 11:29   #1
Beren42
Пользователь
 
Регистрация: 14.12.2010
Сообщений: 50
По умолчанию Класс вектор через массив свойств в Delphi .

Я создал класс вектор. Теперь я хочу создать свойство Modul , вычисляющее модуль вектора . Но чего-то не выходит. Спрашивается вопрос : А вообще так можно ? . Вот код без этого свойства. Он работает нормально
Код:
unit Unit2;
interface
uses
  SysUtils;
type
  TVector = class         
    private
      FItems: array of Double; 
      function GetItem(Index: Integer): Double; 
 
 
    public
      constructor Create(AItems: array of Double); 
      destructor Destroy; override;  
      property Items[Index: Integer]: Double read GetItem; default; 
  end;
implementation
{ TVector }
constructor TVector.Create(AItems: array of Double); 
var
  i: Integer;
begin
  SetLength(FItems, Length(AItems)); 
  for i := Low(AItems) to High(AItems) do 
    FItems[i] := AItems[i]; 
destructor TVector.Destroy;
begin
  SetLength(FItems, 0); 
  inherited;
end;
function TVector.GetItem(Index: Integer): Double; 
begin
  if Index in [Low(FItems)..High(FItems)] then  
    Result := FItems[Index] // 
  else  иначе
    raise Exception.Create('Index is not Valid!'); 
end;
end.
Вот с свойством Modul :
Код:
private
      FItems: array of real ;
function GetModul[Index: Integer]: real;
        .
        . 
       public
        .
      property Modul[Index: integer]  :real read GetModul ;
       end;
implementation
 
constructor TVector.Create(AItems: array of real);
        .       
        .
  function TVector.GetModul(Index: Integer): real;
begin
  if Index in [Low(FItems)..High(FItems)] then
begin
 for Index := Low(FItems) to High(FItems) do
    Result := Result + FItems[Index] * FItems[Index] ;
 
  Result := Sqrt(Result);
end;
end.
Beren42 вне форума Ответить с цитированием
Старый 06.06.2011, 11:37   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Но чего-то не выходит.
А где то что пишет Delphi
ЗАЧЕМ параметр использовать в качестве переменной цикла.
Код:
  function TVector.GetModul(Index: Integer): real;
begin
  if Index in [Low(FItems)..High(FItems)] then
begin
 for Index := Low(FItems) to High(FItems) do
    Result := Result + FItems[Index] * FItems[Index] ;
 
  Result := Sqrt(Result);
end;
end.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 06.06.2011, 11:52   #3
Beren42
Пользователь
 
Регистрация: 14.12.2010
Сообщений: 50
По умолчанию

А Вы предлагаете без параметра сделать ? Это как ? Delphш ничего не пишет. Я имел в виду, что как мне приметь это свйство
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin

  with Vector do
   begin
      ShowMessage(FloatToSTr( Modul ));  // вот  тут ничего не выходит

    end;

end;

end.
Beren42 вне форума Ответить с цитированием
Старый 06.06.2011, 12:42   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
А Вы предлагаете без параметра сделать ?
Я не предлагаю, я интересуюсь "ЗАЧЕМ".
Цитата:
Я имел в виду, что как мне приметь это свйство
ТАК же как прменяются и остальные свойства. С указанием экземпляра объекта, свойства и параметров необходимых данному свойству.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 06.06.2011, 12:47   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

ТАК же как прменяются и остальные свойства. С указанием экземпляра объекта, свойства и параметров необходимых данному свойству.

Цитата:
Delphш ничего не пишет.
Цитата:
ShowMessage(FloatToSTr( Modul )); // вот тут ничего не выходит
И вот тут ничего не пишет? а как тогда узнал что вот тут ничего не выходит?
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 06.06.2011, 15:49   #6
Beren42
Пользователь
 
Регистрация: 14.12.2010
Сообщений: 50
По умолчанию

Delphi ничего не пишет в самом классе, пишет при
ShowMessage(FloatToSTr( Modul ) ) Как я рассуждаю: Длина вектора -это число и у него нет индекса. Зачем же мне писать после Modul в квадратных скобках индекс ?
Это получается индекс чего ?! Про параметр Вы предлагете так
Код:
 function TVector.GetModul(Index: Integer): real;
var
j:integer
begin
  if j in [Low(FItems)..High(FItems)] then
begin
 for j := Low(FItems) to High(FItems) do
    Result := Result + FItems[j] * FItems[j] ;
   Result := Sqrt(Result);
end;
end.
Просто у меня глобальная идея: создать класс вектор со всеми его операциями (модуль, скалярное произведение и т.д.) через массив свойств. Я начал с модуля. Или это невозможно ?
Beren42 вне форума Ответить с цитированием
Старый 06.06.2011, 16:14   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Как я рассуждаю: Длина вектора -это число и у него нет индекса. Зачем же мне писать после Modul в квадратных скобках индекс ?
а КАК рассуждаешь здесь?
Код:
property Modul[Index: integer]  :real read GetModul ;
Рассуждать надо при написании(объявлении) свойств и методов.
При использовании надо следовать формальным определениям свойств.
Цитата:
Delphi ничего не пишет в самом классе, пишет при
ShowMessage(FloatToSTr( Modul )
только в том случае есть какой-то другой Modul совместимый с float.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 06.06.2011 в 16:19.
evg_m вне форума Ответить с цитированием
Старый 06.06.2011, 16:23   #8
Beren42
Пользователь
 
Регистрация: 14.12.2010
Сообщений: 50
По умолчанию

Так в этом и вопрос. Можно ли сделать свойство модуль через массив свойств ?
Beren42 вне форума Ответить с цитированием
Старый 06.06.2011, 16:28   #9
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Можно ли сделать свойство модуль через массив свойств ?
Что это должно означать.

Цитата:
Delphi ничего не пишет в самом классе, пишет при
ShowMessage(FloatToSTr( Modul )
И что же он пишет?
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 06.06.2011, 16:43   #10
Beren42
Пользователь
 
Регистрация: 14.12.2010
Сообщений: 50
По умолчанию

Это должно означать , что property Modul[Index: integer] :real read GetModul ;
называется массив свойств. Спрашивается вопрос: Через него можно ? Пишет , что надо квадратные скобки. А спрашиваю : Зачем, ведь -это число. А каком индексе в квадратных скобках может идти речь ?!
Beren42 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Класс вектор в Delphi Beren42 Помощь студентам 7 02.06.2011 12:50
класс N-Мерный вектор neon0858 Помощь студентам 0 01.06.2011 00:28
Класс-Контейнер Вектор Zorg2 Помощь студентам 1 10.04.2011 22:32
C++ создать класс Вектор Drakowa Помощь студентам 2 29.03.2011 17:06
С++класс-вектор cati Помощь студентам 4 21.04.2010 21:58