Cтраница 4
Мы получили искомый результат, но выраженный только в минутах. Желательно этот результат представить, так же как и исходные данные в часах и минутах. Для определения количества оставшихся минут тЗ мы прибегнем к операции mod, которая, как известно, находит остаток при целочисленном делении. [46]
Имея эти правила, не надо явно укязывять номера позиций узлов в дс-реве при обращении к ним. Переход от некоторого узла к его предшественнику включает целочисленное деление на два. [47]
Блок / присваивает нижней границе зоны поиска ( ВГ) и верхней границе b исходные значения, равные НГ0 - 1 и ВГо 1, где ЯГ0 и ВГ0 - номера граничных элементов массива. Тем самым выполняются такие действия, как будто существуют фиктивные формуляры с номерами ВГ0 1 и НГ0 - 1, в первом из которых отклонение от условия поиска больше нуля, а во втором - не больше нуля. Блок 2 проверяет, не оказались ли формуляры b и ВГ соседними. Если они еще не оказались соседними, то блок 3 путем целочисленного деления определяет номер формуляра в середине зоны поиска, обозначенный буквой а. Блоки 4, 5, 6 проверяют знак отклонения от условия поиска в середине зоны поиска и в зависимости от результатов проверки заменяют верхнюю или нижнюю границу зоны поиска ВГ формуляром с номером а. Действительно, если в формуляре с номером а отклонение от условия поиска больше нуля, то во всех формулярах с номерами, превышающими а, оно в силу упорядоченности массива заведомо больше нуля, и их поэтому можно исключить из зоны поиска ВГ. [48]
Первые четыре операции выполняются так же, как и в обычной арифметике. Кроме того, знак умножения между сомножителями нельзя опускать, как это часто делается в математике. Запись ab, которая в математике может обозначать произведение двух чисел а и ь, компилятором языка Паскаль будет воспринята как имя переменной, состоящее из двух букв, что приведет к ошибке в работе программы. Заметим, что в языке Паскаль нет стандартной функции возведения числа в степень, поэтому для этой операции пользуются формулой, приведенной в табл. 3.1. Однако в программе выражения с возведением во вторую, третью, четвертую и пятую степени чаще всего записывают в виде умножения самих на себя, столько раз, каков показатель степени. Что же касается целочисленного деления, то оно выполняется как обычное, но затем отбрасывается дробная часть получившегося при делении числа. Операции div и mod выполняются только над переменными и константами целого типа. [49]
При вычислении значения переменной bucketNumber из ключа вытаскивается одна цифра. При делении на shift ключевое значение сдвигается на несколько позиций вправо, а последующее применение операции mod оставляет лишь цифру единиц полученного числа. При первом проходе с величиной сдвига 1 деление не меняет числа, а результатом операции mod служит цифра единиц ключа. При втором проходе значение переменной shift будет уже равно 10, поэтому целочисленное деление и последующее применение операции mod дают цифру десятков. При очередном проходе будет получена следующая цифра числа. [50]