Анализ поставленной задачи
Искомое задание сформулировано следующим образом:
Найти максимальное число из массива произвольной длины и подсчитать количество «0» в этом числе. Начальный и конечный адреса массива расположить в ячейках памяти. Формат чисел следующий:
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
З |
Модуль числа |
где: З – знак числа.
Задача логичным образом делится на две:
1) Определить максимум массива
2) Посчитать число нолей в найденном максимуме
- Первая часть задачи в общем виде выглядит так:
Текущим максимумом назначаем первый элемент массива, затем мы будем перебирать постепенно весь массив и сравнивать с текущим максимумом, если элемент окажется больше, то текущим максимумом становится текущий элемент. Особое внимание обратим на сравнение, сравнивать будем неразрушающим вычитанием, и с этим будет связаны некоторые нюансы. При сравнении двух чисел одного знака результат будет корректным, однако при сравнении двух чисел с разными знаками возможно переполнение разрядной сетки, поэтому перед тем как сравнивать числа, будем проверять их на соответствие знаков, и возможны 3 варианта:
- текущий максимум отрицательный, текущий элемент положительный (в данном случае элемент максимум становится текущим максимумом);
- текущий максимум положительный, текущий элемент отрицательный (в данном случае текущий максимум остается без изменений и осуществляется переход к следующему элементу);
- текущий элемент и текущий максимум одного знака (в данном случае производится неразрушающее вычитание).
Данный цикл будет повторяться до тех пор, пока адрес текущего максимума не совпадет с адресом текущего элемента. И после этого текущий максимум будет абсолютным максимумом масс