Начальный курс программирования на языке Форт


ФОРМИРОВАНИЕ ЧИСЕЛ ДВОЙНОЙ ДЛИНЫ БЕЗ ЗНАКА - часть 2


Теперь самое время вставить дефис. В таблице значений кода ASCII (см. часть I - для начинающих) дефис закодирован десятичным числом 45. Слово Форта HOLD (ЗАНЕСТИ) возьмет этот код ASCII и вставит его в строку символов форматируемого числа.

Если в вашей системе имеется слово ASCII, то вы можете заменить в приведенном выше определении непонятное выражение "45 HOLD" на более читабельное: ASCII - HOLD

Слово ASCII {которое мы ввели в первой части данной главы) помещает в стек числовое значение следующего символа из входного потока, в нашем случае - дефис.

Итак, у вас остались три левые цифры. Вы можете воспользоваться выражением «# # #», но проще применить слово #S , которое автоматически приведет остаток вашего числа к требуемому виду.

Последовательность <#...#>> называется выражением форматного вывода числа, поскольку формирует шаблон (справа налево), по которому число должно быть сформатировано.

Теперь представим число двойной длины без знака как календарную дату: 7/15/86. Определение будет выглядеть так: : .ДАТА ( ud -- ) <# # # ASCII / HOLD # # ASCII / HOLD # # #> TYPE SPACE ;

Проследим за тем, как выполняется приведенное выше определение, но будем помнить, что операции обработки чисел в нем расположены в порядке, обратном выводу этих чисел. Выражение # # ASCII / HOLD

(вы можете вместо "ASCII /" использовать 47) выводит две крайние правые цифры (год) и крайний слэш. При следующем вхождении этого выражения выводятся две средние цифры (день) и левый слэш. Наконец, "# #" выводит две крайние цифры (месяц). Вы можете определить: : /nn ( ud -- ud) # # ASCII / HOLD ; : .ДАТА ( ud -- ) <# /nn /nn # # #> ТУРЕ SPACE;

Поскольку вы сами управляете процессом преобразования чисел, можно на самом деле переводить различные числа из одной системы счисления в другую. Это может пригодиться вам при форматном выводе времени (часов и минут). Например, у вас в стеке время записано в секундах, а вы хотите определить слово, которое выражало бы это время в часах, минутах и секундах.


Начало  Назад  Вперед



Книжный магазин