Автор работы: Пользователь скрыл имя, 11 Ноября 2014 в 13:00, лабораторная работа
Разработать программу вычисления суммы элементов массива чисел С1, С2, …, Сn .Исходными данными в этой задаче являются: n – количество суммируемых чисел и С1, С2, …, Сn–массив суммируемых чисел. Заметим, что должно выполняться условие n>1, т.к. алгоритм предусматривает, по крайне мере, одно суммирование. Кроме того, предполагается, что суммируемые числа записаны в ОЗУ подряд, т.е. в ячейки памяти с последовательными адресами. Результатом является сумма S.
Составим программу для вычисления суммы со следующими конкретными параметрами: число элементов массива – 10, элементы массива расположены в ячейках ОЗУ по адресам 040, 041, 042, …, 049. Используемые для решения задачи промежуточные переменные имеют следующий смысл: Аi–адрес числа Сi ,iпринадлежит {1, 2, …, 10 }; ОЗУ (Аi)–число по адресу Аi, S–текущая сумма; k–счетчик цикла, определяющий число повторений тела цикла.
Лабораторная работа №4
Программирование цикла с переадресацией
При решении задач, связанных с обработкой массивов, возникает необходимость изменения исполнительного адреса при повторном выполнении некоторых команд. Эта задача может быть решена путем использования косвенной адресации.
Пример:
Разработать программу вычисления суммы элементов массива чисел С1, С2, …, Сn .Исходными данными в этой задаче являются: n – количество суммируемых чисел и С1, С2, …, Сn–массив суммируемых чисел. Заметим, что должно выполняться условие n>1, т.к. алгоритм предусматривает, по крайне мере, одно суммирование. Кроме того, предполагается, что суммируемые числа записаны в ОЗУ подряд, т.е. в ячейки памяти с последовательными адресами. Результатом является сумма S.
Составим программу для вычисления суммы со следующими конкретными параметрами: число элементов массива – 10, элементы массива расположены в ячейках ОЗУ по адресам 040, 041, 042, …, 049. Используемые для решения задачи промежуточные переменные имеют следующий смысл: Аi–адрес числа Сi ,iпринадлежит {1, 2, …, 10 }; ОЗУ (Аi)–число по адресу Аi, S–текущая сумма; k–счетчик цикла, определяющий число повторений тела цикла.
Распределение памяти таково. Программу разместим в ячейках ОЗУ, начиная с адреса 000, примерная оценка объема программы – 20 команд; промежуточные переменные: Аi – в ячейке ОЗУ с адресом 030, k – по адресу 031, S– по адресу 032.
Текст программы
Адрес |
Команда |
Примечание | |
Мнемокод |
Код | ||
000 |
RD #40 |
Загрузка начального адреса массива 040 | |
001 |
WR 30 |
в ячейку 030 | |
002 |
RD #10 |
Загрузка параметра цикла k=10 | |
003 |
WR 31 |
в ячейку 031 | |
004 |
RD #0 |
Загрузка начального значения суммы S=0 | |
005 |
WR 32 |
в ячейку 032 | |
006 |
M1: RD 32 |
Добавление | |
007 |
ADD @30 |
к текущей сумме | |
008 |
WR 32 |
очередного элемента массива | |
009 |
RD 30 |
Модификация текущего | |
010 |
ADD #1 |
адреса массива | |
011 |
WR 30 |
(переход к следующему адресу) | |
012 |
RD 31 |
Уменьшение счетчика | |
013 |
SUB #1 |
(параметры цикла) | |
014 |
WR 31 |
на 1 | |
015 |
JNZ M1 |
Проверка параметра цикла и переход при k ≠ 0 | |
016 |
RD 32 |
Вывод | |
017 |
OUT |
результата | |
018 |
HLT |
Стоп |
Задание
Таблица
Номер варианта |
Характеристика последовательности чисел С1, С2, …, Сn |
1 |
Количество четных чисел |
2 |
Номер минимального числа |
3 |
Произведение всех чисел |
4 |
Номер первого отрицательного числа |
5 |
Количество чисел, равных С1 |
6 |
Количество отрицательных чисел |
7 |
Максимальное отрицательное число |
8 |
Номер первого положительного числа |
9 |
Минимальное положительное число |
10 |
Номер максимального числа |
11 |
Количество нечетных чисел |
12 |
Количество чисел, меньших С1 |
13 |
Разность сумм четных и нечетных элементов массива |
14 |
Отношение сумм четных и нечетных элементов массива |
Примечание: Под четными (нечетными) элементами массивов понимаются элементы массивов, имеющие четные (нечетные) индексы. Четные числа – элементы массивов, делящиеся без остатка на 2.
Содержание отчета: