Линейный массив: поиск элементов с заданными свойствами, сортировка - QBasic
Формулировка задачи:
Доброго времени суток,
прошу совета, как сократить программу, очень уж громоздко получилось
С одной стороны, и хочется всё как-нибудь в один-два цикла уместить, а не в лобуду, которая получилась, с другой - как ни пробую, теряю содержимое ячеек, а значит, фейлюсь.
Задача простенькая:
дана линейная табличка 4, -9, 45, 7, -67, -3, 29, 15, -4, 3.
Надо напечатать первые 10 элементов, подсчитать их сумму и произведение, кол-во положительных и отрицательных элементов, определить максимальный и минимальный элементы массива.
Надо ещё их потом упорядочить по возрастанию, ну да до этого ещё дойти надо, мне бы получившееся сначала свернуть по-человечески.
Только не ругайте сильно, несколько месяцев к компилятору не подходила
Решение задачи: «Линейный массив: поиск элементов с заданными свойствами, сортировка»
textual
Листинг программы
DATA 4,-9,45,7,-67,-3,29,15,-4,3 FOR i = 0 TO 9 READ a(i): PRINT a(i); NEXT p# = 1: PRINT FOR i = 0 TO 9 k = i: t = a(i) FOR j = i + 1 TO 9 IF a(j) < t THEN k = j: t = a(j) NEXT SWAP a(i), a(k): PRINT a(i); sg = sg - (a(i) >= 0) s = s + a(i): p# = p# * a(i) NEXT PRINT CHR$(10); "max = "; a(9), , "min = "; a(0) PRINT "sum = "; s, , "p = "; p# PRINT "positive = "; sg, "negative = "; 10 - sg
Объяснение кода листинга программы
В этом коде представлен сортировочный алгоритм для линейного массива. Вот список действий, которые он выполняет:
- Массив
aобъявлен размером 10. - В цикле
FORсiот 0 до 9 включительно считываются элементы массиваaи выводятся на экран. - В начале второго цикла
FORпеременнойkприсваивается значениеi, а переменнойt— текущий элемент массиваa(i). - Во внутреннем цикле
FORсjотi + 1до 9 (то есть отi + 1до9) проверяется, есть ли элементa(j)меньше текущего элемента массиваt. Если такой элемент найден, то переменнойkприсваивается индекс этого элемента, а переменнойt— значение этого элемента. - После внутреннего цикла
FORвыполняется обмен элементов массиваaс индексамиiиk. - Выводится отсортированный элемент массива
a(i). - Переменной
sgприсваивается единица, если элементa(i)больше или равен нулю, и ноль в противном случае. - Переменной
sприсваивается сумма всех отсортированных положительных элементов массиваa. - Переменной
p#присваивается произведение всех отсортированных элементов массиваa. - Выводится сообщение с максимальным элементом массива
a(9), минимальным элементом массиваa(0), суммой положительных элементов массиваsи произведением всех элементов массиваp#. - Выводится сообщение с количеством положительных элементов массива
sgи количеством отрицательных элементов10 - sg.