За место 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;