будет уменьшено до значения 65535
будет уменьшено до значения 65535 (так как переменная размером в
слово принимает значения в диапазоне от 0 до 65535), что также >=
0. В этих случаях следует использовать переменные не типа word
или byte, а типа integer или longint.
Игнорирование границ и особые случаи
-----------------------------------------------------------------
Заметим, что в обеих версиях функции FindMax в предыдущем
разделе предполагалось, что Count >= 1. Однако в некоторых случа-
ях значение Count может быть равно 0 (то есть список пуст). Если
вы в такой ситуации вызовите функцию FindMax, она возвратит то,
что оказалось в List[1]. Аналогично, если Count > NLMax, выполне-
ние либо завершиться с ошибкой (если разрешена проверка границ),
либо поиск максимального значения будет выполняться в ячейках па-
мяти, не относящихся к List.
Здесь можно предложить два решения. Одно из них состоит, ко-
нечно, в том, чтобы никогда не вызывать функцию FindMax, если
Count не находится в диапазоне 1..NLMax. Это не пустое замечание.
В серьезном программном обеспечении всегда определяются требова-
ния, которые нужно выполнять при вызове определенной программы, а
затем обеспечивается удовлетворение этих требований при вызове.
TDeb 3.0 #2-3 = 137 =
Другое решение состоит в проверке значения Count и, если оно
не находится в диапазоне 1..NLMax, возврате некоторого предопре-
деленного значения. Например, вы можете переписать тело функции
FindMax следующим образом:
begin
if (Count < 1) or (Count > NLMax) then
Max := -32768
else
begin
Max := List[1];
for I := 2 to Count do
if List[I] > Max then
Max := List[I];