Сортировка с помощью AlgoBuild. Почему я получаю сообщение об ошибке «Индекс выходит за пределы диапазона»?

Я использую 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. В чем моя ошибка?

«если я не напишу еще несколько строк, это не заставит меня опубликовать вопрос» - никогда не пишите просто вафли, чтобы удовлетворить фильтр качества. Вместо этого подумайте о том, что на самом деле может предоставить более полезную информацию... например, размер массива и точное сообщение об ошибке, которое вы видите. (Я не знаком с Matlab, но сообщает ли вам ошибка, например, какой из шагов не выполняется?) Я был бы удивлен, если бы к вопросу больше нечего было добавить, что могло бы предоставить полезную информацию.

Jon Skeet 08.07.2024 19:30

Я новичок в этом деле и очень спешил, в следующий раз добавлю больше деталей. Спасибо за ответ, кстати

giuamato50 09.07.2024 02:23
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
0
2
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваш второй и третий цикл позволяют своим переменным цикла стать равными 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

С этими двумя исправлениями все работает.

Другие вопросы по теме