Целью лабораторной работы является изучение способов обработки одномерных массивов.
Для выполнения этой лабораторной работы следует взять за основу текст программы “Labn3.ASM”. В сегмент данных вписать свои переменные и их значения. В сегмент кодов в процедуру MAIN ввести операторы, выполняющие действия, соответствующие индивидуальному заданию.
Данное задание использует процедуру печати элементов массива PRMASS.
Ниже приведен пример выполнения следующего задания:
Задан массив А из N целых чисел. Найти сумму чисел, больших 2, и образовать массив В из отрицательных чисел массива А, взяв их по модулю.
Контрольный пример:
Пусть массив А – это следующие числа: 2,-3,10,4,-4,5,-20,1,-12.
Тогда сумма должна быть равна 19, а массив В будет состоять из чисел: 3,4,20,12.
Рис.2. Блок-схема к лабораторной работе 3.
Текст программы:
Dseg Segment
; индивидуальные данные - начало
N dw 10
A dw -2,3,4,-8,0,1,6,-15,-20,-24
B dw 10 dup (?)
TextMA db 'Массив А: ',10,13,'$'
TextMB db 'Массив В: ',10,13,'$'
TextSum db 'сумма=$'
; индивидуальные данные - конец
Prob db ' $'
Buffer db 6 dup (?),'$'
NL db 10,13,'$'
Dseg Ends
Stacks segment
dw 128 dup (?)
Stacks ends
Codes segment
Main proc far
Assume CS:codes, DS:dseg, SS:stacks
Mov AX,Dseg
Mov DS,AX
; индивидуальная часть программы - начало
LEA DX,TextMA ;блок 1
CALL PRT ;напечатать 'Mассив А:'
LEA BP,A ;блок 2
Mov CX,N ;загрузить в регистр ВР адрес начала массива А
Заданы массивы А и С, каждый из N чисел. Образовать массив В из остатков деления чисел массива А на числа из массива С (Аi/Bi).
Задан массив А из N чисел. Удалить из этого массива все 0, т.е., если массив А был (1,0,2,0,4), то получим массив А (1,2,4). Более простой вариант решения задачи - образовать новый массив В. Более сложный – произвести сдвиг чисел в массиве А.
Задан массив А из N чисел. Найти в этом массиве первый 0 и забить все оставшиеся числа 0, т.е., если массив А был (2,1,0,4,8,0,5), то должны получить массив А (2,1,0,0,0,0,0).
Задан массив А из N чисел и массив В из М чисел. (М<N). Числа в массиве В могут быть больше или равны 0 и меньше N. Это индексы чисел из массива А. Найти среди чисел массива А, индексы которых указаны в массиве В, максимальное число.
Задан массив А из N чисел и некоторое число В. Убрать из массива А числа, равные В. Более простой вариант – образовать новый массив из чисел массива А. Более сложный – получить новый массив А путем сдвига чисел.
Задан массив А из N чисел. Убрать из массива А все повторяющиеся числа, т.е., если массив А был (2,0,1,2,3,2,0,4), то новый массив А должен быть (2,0,1,3,4). Более простой вариант – образовать новый массив из чисел массива А. Более сложный – получить новый массив А путем сдвига чисел.
Задан массив А из N чисел. Образовать массив В из индексов чисел массива А, делящихся нацело на 2.
Задан массив А из N чисел. N – кратно 3. Это надо проверить. Образовать массив В из сумм каждой тройки чисел массива А.
Задан массив А из N чисел и массив В из M чисел. Известно, что числа в массиве В могут быть положительными и отрицательными, причем сумма модулей этих чисел меньше или равна N. Это надо будет проверить. Найти М сумм чисел из массива А, просуммировав сначала !B0! чисел из массива А, потом !B1! и т.д. Т.е., если массив А был (3,2,10,5,6,7) и массив В (-2,3,1), получим 3 суммы: 5, 11,7. Эти суммы можно просто распечатать или создать из них массив С.
Задан массив А из N чисел. Преобразовать этот массив так, чтобы сначала шли четные числа, а потом – нечетные. Более простой вариант – образовать новый массив В, в котором следуют сначала четные числа из массива А, потом – нечетные. Более сложный вариант – выполнить все действия в массиве А. Алгоритм в этом случае таков: изменяем индекс i от 0 в сторону увеличения и j от N-1 в сторону уменьшения. Изменения ведем до тех пор, пока i<j. Если Аi – нечетное число, то изменяем j до тех пор, пока не найдем первое четное число. Меняем их местами и т.д.
Задан массив А из N чисел. Преобразовать этот массив так, чтобы сначала шли отрицательные числа, а потом – положительные. Более простой вариант – образовать новый массив В, в котором следуют сначала отрицательные числа из массива А, потом – положительные. Более сложный вариант – выполнить все действия в массиве А. Алгоритм в этом случае таков: изменяем индекс i от 0 в сторону увеличения и j от N-1 в сторону уменьшения. Изменения ведем до тех пор, пока i<j. Если Аi –положительное число, то изменяем j до тех пор, пока не найдем первое отрицательное число. Меняем их местами и т.д.
Задан массив А из N чисел и некоторое число В. Найти в массиве А все числа, равные В, подсчитать их количество. Преобразовать массив А, поставив вслед за числом, равным В, второе такое же число.
Задан массив А из N чисел. Убрать из массива А повторяющиеся числа, стоящие рядом, т.е., если массив А был (2,0,0,1,4,4,3,5,5,5), то массив А должен стать (2,0,1,4,3,5). Более простой вариант – получить новый массив. Более сложный – произвести все действия в самом массиве А путем сдвига чисел.
Задан массив А из N чисел. В массиве А рядом могут стоять одинаковые числа. Образовать массив В, подсчитав количество повторяющихся чисел в массиве А, стоящих рядом. Например, массив А был (2,0,0,1,4,4,3,5,5,5), тогда массив В будет (1,2,1,2,1,3).
Задан массив А из N чисел. Убрать из этого массива каждый третий элемент. Более простой вариант – образовать новый массив. Более сложный – произвести все действия в самом массиве А путем сдвига чисел.
Задан массив А из N чисел. N кратно 2. Это надо проверить. Найти сумму первой половины чисел массива А и второй. Если первая сумма меньше второй, то поменять числа из первой и второй половины местами. Порядок следования чисел должен сохраниться. Иначе, оставить массив А без изменения.
Задан массив А из N чисел. Задан массив В из М чисел. Известно, что все числа из массива В положительные, причем любое число больше или равно 0 и меньше N-1, т.е. числа из массива В задают индексы чисел из массива А. Индексы могут повторяться. Найти сумму чисел из массива А, индексы которых заданы в массиве В. Поиск суммы прекращается, если очередное число Аi =0 либо, если исчерпан массив В.
Задан массив А из N чисел. Подсчитать количество чисел, больших среднего арифметического.
Задан массив А из N чисел. Создать массив В, в котором будут находиться все числа, встречающиеся в массиве А только 1 раз.
Задан массив А из N чисел. Создать массив В, в котором будут записаны числа из массива А, и массив С, в котором Сi равно количеству чисел Вi в массиве А. Например, массив А (1,0,0,2,0,3,2,-4,1). Массив В должен быть (1,0,2,3,-4), а массив С (2,3,2,1).
Задан массив А из N чисел. N – четное или нечетное число. Образовать массив В, в котором В0= мах(А0,А1), В1=мах(А2,А3) и т.д.
Задан массив А из N чисел. N – не обязательно число, кратное 3. Убрать из этого массива каждый третий элемент. Более простой вариант – образовать новый массив без каждого третьего числа из массива А. Более сложный – удалять числа из массива А путем сдвига.
Задан массив А из N чисел. Выбрать из этого массива любое число и сделать так, чтобы все числа левее его были его меньше, а правее – больше. Алгоритм: берем любое число из массива А – Аj. Начинаем сравнивать это число со всеми числами, находящимися левее его, причем начинаем сравнение с самым первым числом, потом со вторым и т.д. Если Аi меньше Аj, то меняем их местами. Теперь мы знаем, что все числа, располагающиеся левее Аi,, меньше интересующего нас числа. Начинаем сравнивать число Аj с числами, располагающими правее этого числа, причем сравнение производим с конца. Если какое-то число оказывается меньше Аi, то меняем их местами. Теперь мы знаем, что все числа, находящиеся правее этого числа, больше его. Но ничего не знаем о числах, находящихся левее этого числа до места предыдущего положения этого числа. Вновь повторяем сравнения с числами, располагающимися левее, но не с нулевого элемента, а с элемента, который стоит на месте после предыдущего размещения числа т.д. Например, пусть задан массив А(1,2,3,8,9,12,4,2,6,1,9). Возьмем число 12. Его индекс 5. Начнем сравнивать это число с числами левее его. Все числа меньше 12. Теперь начинаем сравнивать с числами правее его. Число 9 меньше 12. Его индекс 10. Меняем местами 5-ый и 10-ый элементы. Получим массив А(1,2,3,8,9,9,4,2,6,1,12). Начинаем сравнивать число 12, стоящее теперь на 10 месте, с числами левее его, начиная с 6-ого элемента. Все числа меньше 12. Второй пример. Возьмем число 8. Его индекс 3. Все числа левее его, меньше его. Начинаем сравнивать с числами, находящимися правее. Нужно поменять местами число 8 и число 1, находящееся по индексу 9. Получим А(1,2,3,1,9,12,4,2,6,8,9). Опять сравниваем число 8, находящееся теперь по индексу 9, с числами левее его, начиная с числа по индексу 4. Поскольку 9 больше 8, то меняем их местами. Получим: А(1,2,3,1,8,12,4,2,6,9,9). Сравниваем 8, находящееся теперь по индексу 4 с числами правее его, начиная с числа, находящегося по индексу 8. Опять меняем местами. Получим: А(1,2,3,1,6,12,4,2,8,9,9). Опять сравниваем число 8, находящееся по индексу 8, с числами левее его, начиная с числа по индексу 5. Опять меняем их местами. Получим А(1,2,3,1,6,8,4,2,12,9,9). Сравниваем 8, находящееся по индексу5, с числами правее его, начиная с индекса 7 и т.д. до тех пор пока сравнивать слева и справа будет не с чем.
Задан массив А из N чисел. Найти в этом массиве максимум и минимум. Напечатать все числа, находящиеся между первым максимальным (минимальным) числом и последним минимальным (максимальным) числом.