Я использую AlgoBuild, чтобы создать программу, сортирующую числа.
Это моя попытка:
AlgoBuild преобразует эту диаграмму в следующий псевдокод:
PROGRAM main
INPUT int D
FOR i = 0; i < D; i = i + 1
INPUT V[i]
END FOR
FOR i = 1; i <= D; i = i + 1
k = i
FOR j = i + 1; j <= D; j = j + 1
IF V[k] > V[j]
k = j
END IF
END FOR
IF i != k
temp = V[i]
V[i] = V[k]
V[k] = temp
END IF
END FOR
FOR i = 0; i < D; i = i + 1
OUTLN V[i]
END FOR
END
При запуске я получил следующую ошибку в операторе IF V[k] > V[j]
:
ЕСЛИ ОШИБКА: Индекс массива вне диапазона IN V[k] > V[j]
Я не ожидал этой ошибки.
Я не могу понять, почему это выходит за пределы допустимого диапазона, если я сделал назначение k
равным j
. В чем моя ошибка?
Я новичок в этом деле и очень спешил, в следующий раз добавлю больше деталей. Спасибо за ответ, кстати
Ваш второй и третий цикл позволяют своим переменным цикла стать равными D
, но вы не определили V[D]
, так что это будет вне диапазона.
Индексы массива начинаются с 0 и далее, поэтому, если у вас есть D
количество значений в массиве V
, первое из них — V[0]
, а последнее — V[D-1]
, а не V[D]
.
Поэтому замените <= D
в средних петлях на < D
, вот так:
i = 0; i < D; i = i + 1
и
j = i + 1; j < D; j = j + 1
С этими двумя исправлениями все работает.
«если я не напишу еще несколько строк, это не заставит меня опубликовать вопрос» - никогда не пишите просто вафли, чтобы удовлетворить фильтр качества. Вместо этого подумайте о том, что на самом деле может предоставить более полезную информацию... например, размер массива и точное сообщение об ошибке, которое вы видите. (Я не знаком с Matlab, но сообщает ли вам ошибка, например, какой из шагов не выполняется?) Я был бы удивлен, если бы к вопросу больше нечего было добавить, что могло бы предоставить полезную информацию.