Показать сообщение отдельно
  #5  
Старый 12.05.2008, 17:50
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

За место real используй double.
Не совсем понятно зачем именно такой StringGrid. Даже если вводить через него данные, то все-равно нужно либо 2 столбца и 40 строк, либо 40 столбцов и 2 строки.

вообще, когда писал код думал что это некоторая абстрактная задача, т.к. ни Дельфи, ни Паскаль НЕ ПОНИМАЮТ ИДЕНТИФИКАТОРОВ на русском языке.

для начала я бы постановку задачи переписал следующим образом:
Код:
type
  TDblPoint = record
    x : double;
    y : double;
  end;
 
var
  M : Array [1..40] Of TDblPoint;
  d : double;

Тогда мой код надо немного поменять:

Код:
uses math;

var
 i, j : integer;
begin
 d := 0;
 for i := 1 to 39 do
   for j := i+1 to 40 do
     d := max(d,sqrt(sqr(M[i].x-M[j].x) + sqr(M[i].y-M[j].y)));
end;

И вот это вполне скомпилится и должно работать.
Здесь нет задачи значений для точек. Его как раз можно сделать через StringGrid.

Предполягаем, что в StringGrid 3 колонки (1 фиксированная с названиями кординат - х и у) и 41 строка (1 фиксированая с номерами точек). Тогда считывание значений будет выглядеть так:

Код:
var
  i : integer;
begin
  For i := 1 To 40 Do
    Try
       M[i].x := StrToFloat(StringGrid1.Cells[1,i]);
       M[i].y := StrToFloat(StringGrid1.Cells[2,i]);
    Except
       // Если не удалось конвертировать из строки в число.
       M[i].x := 0;
       M[i].y := 0;
    End;
end;
Ответить с цитированием