Из сборника Введение в информатику. Лабораторные работы. Ч. II / Авт.-сост. А.П.
Шестаков; Перм. ун-т. Пермь, 1999. 71 с.
Массивы
Массив это совокупность величин одинакового типа,
расположенных в памяти ЭВМ последовательно друг за другом.
Для работы с элементами массива достаточно знать адрес первого
элемента и их количество. Номер элемента массива называют его индексом.
Чаще всего при решении задач с массивом его элементы просматриваются
поочередно, с первого до последнего.
Типовые задачи на обработку массивов данных:
поиск элементов с определенными свойствами;
сортировка (расположение в порядке возрастания или убывания);
изменение элементов по определенному правилу;
заполнение массива по определенному правилу.
Пример. Поменять местами первый отрицательный элемент массива (гарантируется, что хотя бы один такой элемент есть) и
его максимальный элемент.
Идея решения. Просматривая массив, необходимо запомнить
адреса первого отрицательного элемента и максимального элемента.
По окончанию просмотра совершить обмен.
План решения
1. i := 2
2. max := 1
3. otr := 0
4. Если a[1]<0, то k:=1, otr:= 1.
5. Сравнить i с n.
6. Если i>n, перейти к п. 11.
7. Если a[i]<0 и otr=0, то k:=i, otr:= 1.
8. Если a[i]>a[max], то max := i.
9. i := i + 1.
10. Перейти к п. 5.
11. vsp := a[k].
12. a[k] := a[max].
13. a[max] := vsp.
14. Стоп.
Распределение памяти
R0
R1
R2
R3
адреса элементов массива
адреса i, otr
адреса k, n
max
Тест. Массив разместим с адреса 0080. Пусть n=8.
Исходный массив Преобразованный массив
Адрес Значение Адрес Значение
0080 0005 0080 0005
0082 0006 0082 0006
0084 FFFE 0084 0100
0086 0066 0086 0066
0088 0012 0088 0012
008A 0100 008A FFFE
008C FFFF 008C FFFF
008E 0020 008E 0020
00A0 i 00A2 otr 00A4 k 00A6 n
Программа
Адрес Команда Действие Замечания
0000 01D5 2 => (R1) i := 2
0002 0002
0004 0103 R0 => R3 адрес максимального элемента
0006 02D1 R1 := R1 + 2 адрес otr
0008 0002
000A 01D5 0 => (R1) otr := 0
000C 0000
000E 04D4 сравнить a[1] с 0 (R0) - 0
0010 0000
0012 2D06 если a[1]>=0, переход на 6 байт
0014 0106 R0 => (R2) адрес первого отрицательного элемента
0016 01D5 1 => (R1) otr := 1
0018 0001
001A 02D2 R2 := R2 + 2 адрес n
001C 0002
001E 03D1 R1 := R1 - 2 адрес i
0020 0002
0022 02D0 R0 := R0 + 2 адрес 2-го элемента массива
0024 0002
0026 0456 сравнить (R1) с (R2) (i с n) (R2) - (R1)
0028 3D32 если <0, переход на 32 байта переход на обмен значений
002A 02D1 R1 := R1 + 2 адрес otr
002C 0002
002E 04D4 сравнить (R0) c 0 (R0) - 0
0030 0000
0032 2D14 если >= 0, переход на 14 байт
0034 04D5 сравнить (R1) c 0 (R1) - 0
0036 0000
0038 4D0E если <>0, переход на E байт
003A 03D2 R2 := R2 - 2 адрес k
003C 0002
003E 0106 R0 => (R2) адрес первого отрицательного элемента
0040 01D5 1 => (R1) otr := 1
0042 0001
0044 02D2 R2 := R2 + 2 адрес n
0046 0002
0048 0447 ср. (R0) с (R3) (a[i] c a[max]) (R3) - (R0)
004A 2D02 если >=0, переход на 2 байта если a[max]>=a[i]
004C 0103 R0 => R3 адрес максимального элемента
004E 03D1 R1 := R1 - 2 адрес i
0050 0002
0052 02D5 (R1) := (R1) + 1 i:= i + 1
0054 0001
0056 02D0 R0 := R0 + 2 адрес i-го элемента
0058 0002
005A 1DCA переход на -36(16) байт на сравнение i с n
005C 03D2 R2 := R2 - 2 адрес k
005E 0002
0060 0162 (R2) => R2
0062 0161 (R2) => R1 vsp := a[k]
0064 0176 (R3) => (R2) a[k] := a[max]
0066 0117 R1 => (R3) a[max] := a[k]
0068 0F00 стоп
Подсчитать число положительных элементов массива и занести
его в массив вместо первого элемента.
Заменить все элементы массива их модулями.
Найти сумму элементов массива и сравнить ее с заданным
числом K. Если сумма меньше K, то все элементы массива
с четными индексами заменить на нули.
Адрес первого неотрицательного элемента массива поместить в регистр R0.
Определить номера всех отрицательных элементов массива
и сформировать из них массив, расположенный сразу после заданного.
В массиве есть положительные и отрицательные элементы.
Найти количество элементов массива, которые больше суммы всех его элементов.
Заменить каждый элемент массива суммой всех последующих.
Вычислить отдельно сумму отрицательных и положительных элементов массива.
Заменить K-й элемент массива адресом максимального по
модулю элемента этого же массива.
Задан массив A. Сформировать массив B, элементами которого являются
разности соседних элементов массива A. Массив B разместить
перед массивом A.
В массиве есть положительные и отрицательные
элементы. Сравнить модуль минимального элемента с максимальным.
При совпадении занести 1 в качестве последнего элемента массива, иначе 0.
Исключить из массива все нулевые элементы, сформировав при этом новый массив.
Из заданного массива сформировать новый, состоящий
только из положительных элементов исходного массива.
Все отрицательные элементы массива заменить нулями.
Количество произведенных замен записать в регистр R3.
Произвести циклический сдвиг массива в сторону возрастания
адресов. Последний элемент при этом сделать первым.
Найти минимальный элемент массива и поставить его на
первое место, если он положителен, и на последнее, если он отрицателен.
Определить, сколько раз в массиве встречаются элементы,
равные данным числам K и L.
Построить массив, элементами которого являются числа
n2, (n-1)2, ..., 12.
Массив заканчивается нулем. Определить количество элементов в массиве.
В массиве есть единственный нулевой элемент. Уплотнить
массив, удалив нулевой элемент.
Число положительных элементов в массиве поместить в R1,
число отрицательных в R2, число нулей в R3.
Даны два массива из одинакового числа элементов.
Произвести обмен минимальными элементами.
Положительные элементы массива увеличить на 1, а отрицательные уменьшить на 1.
Заданы два массива с одинаковым количеством элементов. Переписать тот массив,
сумма элементов которого больше, в другой.
Изменить знак всех элементов массива на противоположные.
Нули заменить на данное число b.
Даны два массива с различным числом элементов. Найти сумму
максимальных элементов этих массивов.
Переписать массив в другое место памяти, изменив
при этом порядок следования элементов на противоположный.
Умножить все элементы массива на одно и то же натуральное число k.
В целочисленном массиве есть нулевые элементы. Создать новый массив
из номеров этих элементов.
Дан массив целых чисел. Выяснить, упорядочены ли по возрастанию его элементы.
Если да, то поместить по адресу 76 1, иначе 0.
Дан массив целых чисел.
Создать новый массив из четных элементов этого массива. Если
таких чисел нет, то поместить 0 по адресу 76, иначе 1.
Дан массив. Указать
наименьшую длину числовой оси, содержащую все элементы этого массива.
Дана последовательность целых положительных чисел. Найти
произведение только тех чисел, которые больше заданного
числа M. Если таких нет, то поместить по адресу 76 число 0, иначе 1.
Дан массив, состоящий из n трехзначных натуральных чисел. Образовать новый массив,
элементами которого будут элементы исходного, начинающиеся на цифру k.
Дан массив. Составить программу нахождения произведения
элементов этого массива.
Дан массив. Найти число нечетных элементов в нем.
Дан массив.Составить программу замены отрицательных элементов
данного массива их квадратами.