В качестве примера реальной программы, в значительной степени использующей десятичную арифметику, рассмотрим простую программу, служащую для учета заработной платы. Блок-схема этой программы изображена на рис. 16.2. Исходными данными для программы являются учетный номер служащего, его имя, продолжительность рабочей недели в часах и почасовая ставка служащего. Исходные данные набиваются на картах в следующем формате:
колонки 1—9: учетный номер служащего
колонки 11—40: имя служащего
колонки 42—47: продолжительность рабочей недели
колонки 49—53: почасовая ставка
Два последних числа указываются с точностью до двух десятичных знаков. Считается, что оба они являются выровненными по правой границе, содержат по две десятичные цифры после запятой, отделенные одной позицией от цифровой части. Короче говоря, это значит, что количество часов в рабочей неделе может быть задано в формате ddd.dd, а почасовая оплата — в формате dd.dd (предполагается, что зарплата за один час не может превышать 100 долларов). Знак доллара не используется. Программа производит подсчет недельной заработной платы каждого служащего. Ввод исходных данных происходит до тех пор, пока не встретится карта, содержащая 999999999 в поле учетного номера. Считается, что обычная рабочая неделя содержит 40 часов. Переработка оплачивается в половинном размере.
Рис. 16.2. Блок-схема программы формирования платежной ведомости.
На примере данной программы видно, каким образом можно использовать десятичную целочисленную арифметику для работы с дробными числами. В процессе выполнения программы считается, что все денежные величины представлены в центах. После считывания каждого очередного числа его копия помещается в область вывода, а две последние его цифры перемещаются на одну позицию влево. В результате денежные суммы окажутся представленными в центах, а рабочие недели — в сотых долях часа. Затем выполняется упаковка, и далее следуют вычисления. Сама программа изображена на рис.16.3. Заметим, что умножение чисел, например, на 1.5 производится в два этапа: сначала исходное число умножается на 150, а затем делится на 100 (деление осуществляется посредством простого переноса кода знака на две позиции влево). По окончании вычислений полученный результат распаковывается, к нему добавляется необходимая десятичная точка и удаляются пробелы в старших разрядах. После этого выводная строка распечатывается, и процесс повторяется.
Рис. 16.3.
Вы могли заметить, что подготовка десятичных данных для вывода на печать является достаточно утомительным занятием. Удобнее всего в таких случаях пользоваться командами ED (ОТРЕДАКТИРОВАТЬ) и EDMK (ОТРЕДАКТИРОВАТЬ И ОТМЕТИТЬ). Несмотря на то, что формально знакомство с этими командами состоится лишь в гл. 20, вы можете рассмотреть их и сейчас.