Arvi the Hacker (Арви Хэкер) (arvi) wrote in mk_152,
Arvi the Hacker (Арви Хэкер)
arvi
mk_152

Categories:

Первый вариант, для затравки.

Чтобы было с чего начинать, публикую программу «Hex-1» (КС 12097/45) — первую версию вывода шестнадцатеричного числа «в лоб». Конечно же, это ещё далеко не Грааль, вывод реализован простым циклом. Даже двумя (40-41 и 49-50). Но задаёт границу «сверху» в 62 шага и теперь другим есть, от чего отталкиваться.


На входе числа от 0 до 99999999 (восемь десятичных знаков), на выходе числа от 0 до 5f5e0ff. На самом деле программа корректно переводит и отображает числа вплоть до fffffff, просто их сложнее вводить с клавиатуры.



00.ПП   01.05  02.С/П  03.БП  04.00   05.П0   06.6   07.В↑  08.1    09.6
10.FXy  11.П1  12.ИП0  13.ИП1 14.-    15.Fx≥0 16.47  17.Cx  18.П6   19.ИП0

20.ИП1  21.-   22.Fx<0 23.43  24.ИП6  25.1    26.0   27.-   28.Fx≥0 29.33
30.3    31.9   32.+    33.5   34.8    35.+    36.ПП  37.53  38.ПП   39.57
40.Fx=0 41.17  42.В/О  43.П0  44.КИП6 45.БП   46.19  47.ПП  48.57   49.Fx=0
50.12   51.4   52.8    53.PPП 54.90   55.25   56.В/О 57.ИП1 58.1    59.6
60.%    61.9   62.F1/x 63.+   64.K[x] 65.П1   66.В/О

«Сердцем» программы являются шаги 24-37, осуществляющие вывод одной шестнадцатеричной цифры. К тонкостям можно отнести шаги 61-64, введённые из-за ошибок округления на шагах 10 и 60, а также обращающие в ноль R1 после вывода последней шестнадцатеричной цифры. В подпрограмме 53-56 применён приём, называющийся хвостовой рекурсией. С одной стороны она вызывается с шагов 36-37, с другой стороны её оператор В/О также служит для возврата из основной подпрограммы 05-66. Надеюсь, что ваша программа получится значительно меньше, чем этот первый блин.


2 декабря я заменил два цикла математическими формулами, что позволило сократить программу на 4 шага и довести длину подпрограммы до 58 шагов. Встречайте программу «Hex-2» (КС 12789/165). Теперь в программе всего один цикл 35-53, а вывод шестнадцатеричной цифры вынесен в отдельную подпрограмму 07-21. Новая программа прекрасно справляется с числами от 0 до 99999999 (и даже больше), при попытке вывода отрицательного числа выдаёт ошибку "Неверный аргумент":


00.ПП   01.05   02.С/П  03.БП  04.00  05.Fx=0 06.22  07.1   08.0    09.-
10.Fx≥0 11.15   12.3    13.9   14.+   15.5    16.8   17.+   18.PPП  19.90
20.25   21.В/О  22.П0   23.Fln 24.1   25.6    26.ПA  27.Fln 28.ПП   29.55
30.ИПA  31.Fxy  32.1    33.ПП  34.57  35.ИП0  36.В↑  37.ИП1 38.%    39.K[x]

40.П6   41.ИП1  42.x    43.-   44.П0  45.ИП6  46.ПП  47.07  48.ИП1  49.ИПA
50.ПП   51.55   52.Fx=0 53.35  54.В/О 55.%    56.9   57./-/ 58.F10x 59.+
60.K[x] 61.П1   62.В/О

Subscribe
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 25 comments