Хорошо, я бы изменил пару вещей в вашем коде.Прежде всего,
DO UNTIL x >= 10
INPUT "Enter Number: ", arr(x)
x = x + 1
LOOP
Зачем использовать DO ... LOOP здесь?Я бы выбрал цикл FOR:
FOR x = 1 to 10
INPUT "Enter Number: ", arr(x)
NEXT
Это более обычный, более короткий код и более понятный код.
Во-вторых, ваш второй DO ... LOOP не может выйти.Да, конечно, он выходит, когда x больше или равен 11, но когда это произойдет?В вашем цикле нет переопределения x, поэтому ваш цикл либо бесконечен (если x начинается меньше 11), либо бессмыслен (если x уже 11 или больше).В этом случае x будет равен 10, поэтому ваш код, как вы описали, зависнет.
Анализ, который вы пытаетесь выполнить, к сожалению, слишком сложен в QBasic, но это возможно.Для ясности, в верхней части вашей программы определите TRUE
и FALSE
:
CONST TRUE = 1
CONST FALSE = 0
Затем, когда вы дойдете до места, где вы хотите проанализировать наименьшее значение, сделайте что-то вроде этого:
finished% = TRUE 'I start by defining as TRUE and define as FALSE if I find
'a value which is smaller than the currently tested value.
CurTest% = 1 'This represents the array element which I am currently testing.
'It will change only when the program finds a value smaller than
'the one it is currently testing.
DO
finished% = TRUE
FOR i = CurTest% + 1 TO 10
IF arr(i) < arr(CurTest%) THEN
finished% = FALSE
CurTest% = i
EXIT FOR
END IF
NEXT i
LOOP UNTIL finished% = TRUE
'The loop will only complete once it has gone through a complete FOR...NEXT
'without finding a smaller value.
PRINT "The smallest value is:"; arr(CurTest%)
* Примечание: код не проверен;могут быть причуды / ошибки.
Надеюсь, это поможет!