Исключить два наименьших по абсолютной величине элемента из массива - QBasic
Формулировка задачи:
Дан массив R из N элементов, исключить два наименьших по абсолютной величине элемента. Результат распечатать в виде:
Исходный массив :
Число элементов :
Два наименьших элемента:
Новый массив :
Решение задачи: «Исключить два наименьших по абсолютной величине элемента из массива»
textual
Листинг программы
DECLARE SUB SDV (a!(), k!, n!)
CLS
RANDOMIZE TIMER
CONST n = 14
DIM R(1 TO n)
FOR i = 1 TO n
R(i) = INT(40 * RND) - 20
PRINT R(i);
NEXT
PRINT : PRINT
PRINT "N ="; n
PRINT
min = ABS(R(1))
ind = 1
FOR i = 1 TO n
M = ABS(R(i))
IF min > M THEN
min = M
ind = i
END IF
NEXT
IF ind <> 1 THEN
min2 = ABS(R(1))
ind2 = 1
ELSE
min2 = ABS(R(2))
ind2 = 2
END IF
FOR i = 1 TO n
IF i <> ind THEN
M = ABS(R(i))
IF min2 > M THEN
min2 = M
ind2 = i
END IF
END IF
NEXT
PRINT "R("; ind; ") ="; R(ind)
PRINT "R("; ind2; ") ="; R(ind2)
PRINT
IF ind < ind2 THEN
CALL SDV(R(), ind2, n)
CALL SDV(R(), ind, n - 1)
ELSE
CALL SDV(R(), ind, n)
CALL SDV(R(), ind2, n - 1)
END IF
R(n) = 0
R(n - 1) = 0
FOR i = 1 TO n - 2
PRINT R(i);
NEXT
END
SUB SDV (a(), k, n)
FOR i = k TO n - 1
a(i) = a(i + 1)
NEXT i
END SUB
Объяснение кода листинга программы
Код выполняет следующие действия:
- Создает массив рандомных чисел от -20 до 20 и выводит его на экран.
- Находит минимальное значение в массиве по модулю и индекс этого значения.
- Если индекс первого минимального значения не равен 1, то ищет второе минимальное значение.
- Выводит на экран два наименьших по модулю значения из массива.
- Если первое минимальное значение больше второго, то меняет их местами с помощью подпрограммы SDV.
- Удаляет из массива первое и второе минимальные значения, заменяя их на 0.
- Выводит на экран оставшиеся значения массива, кроме двух последних, которые заменены на 0.
- Подпрограмма SDV используется для удаления элементов из массива, заменяя их на следующие элементы.