В вашем коде несколько синтаксических ошибок.Я не проверял, правильная ли ваша быстрая сортировка.Вы можете отладить это.
Типы массивов
Вы путаете несколько разных вещей:
- динамические массивы (например, type
array of double
), - статические массивы (например, тип
array[a..b] of double
) и, возможно, - параметры открытого массива ( параметр
array of double
).
Ваш параметр имеет тип динамического массива (TVector
), но вы передаете статический массив.Они не совместимы.
Чтобы передавать как динамический, так и статический массив, вы можете использовать упомянутые параметры открытого массива (обратите внимание, что они выглядят, но не совпадают с динамическими массивами).
procedure QuickSort(var apod: array of Double; iLo, iHi: Integer);
Подробнее о параметрах открытого массива в моей статье: Параметры открытого массива и массив const .
Var (опорные) параметры
Но есть еще одна проблема: var Параметры должны иметь точный тип (или базовый тип).Конверсия не состоится.Так что ваши a , b , c , apod и af должны содержать Doubles тоже:
var
a, b, c, apod, af: array[1..100000] of Double;
Несвязанные блоки
Тогда свободные блоки begin end
после функции QuickSort не имеют смысла.Это не Паскаль.Скорее сделайте что-то подобное в главном блоке (последний begin ... end.
- обратите внимание на последний .
):
begin
for i := Low(apod) to High(apod) do
apod[i] := (a[i] - ((a[i] * b[i]) / 3000) - ((c[i] * a[i]) / 40));
QuickSort(apod, Low(apod), High(apod));
end.
Но обратите внимание, что приведенный выше код не имеет большого смысла.Вероятно, все значения в apod будут равны 0, поскольку a , b , c и т. Д. Еще не инициализированы (поэтому a[i]
и т. д., вероятно, все 0).
Я не знаю, откуда у вас этот код, но вы можете попытаться понять его, прежде чем начать переводить его на Паскаль.
Lo и Hi
Обратите внимание, что вы должны использовать Low
и High
.Lo
и Hi
- это нечто совершенно иное: они получают младший и старший байт 16-битного слова соответственно.Low
и High
получают границы массивов, наборов и типов.