Чтобы было с чего начинать, публикую программу «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.В/О |
November 29 2007, 21:39:56 UTC 4 years ago
November 30 2007, 05:44:10 UTC 4 years ago
Не всегда, кстати, Грааль добывается путём усовершенствований. Прав был Михаил Пухов, когда писал, что главный резерв любой программы это алгоритм.
Иногда сидишь целыми днями, смотришь на программу и думаешь, где бы ещё выиграть байтик по мелочам. Думаешь — вот он Грааль. И тут кто-нибудь (может быть до этого даже не обращал на этого человека внимание) заходит с совершенно неожиданной стороны и предлагает намного меньший код. А иногда сам откладываешь написанное в сторону, заходишь с чистого листа. Потом сравниваешь, и порой действительно получается короче.
November 30 2007, 06:54:22 UTC 4 years ago
November 30 2007, 19:46:58 UTC 4 years ago
Ничего не получается лишь у тех, кто не пытается. Вон, даже у меня получилось. Хотя я совершенно не умею программировать, если верить лжеюзерам. :-)
November 30 2007, 21:07:34 UTC 4 years ago
Кстати, уже несколько дней как я исправила ошибки в программах "Арифметика", только исправление ещё не выложили на сайте Семико. А сейчас пытаюсь делать "Арифметика 2" - улучшенные версии тех же программ. Надо же доводить до ума всё это.
November 30 2007, 21:19:27 UTC 4 years ago
Зря сдалась. Лучше доведи до ума, я посмотрю. Во-первых, выскажу своё «фи» с точным указанием шагов, следовательно чуточку лучше начнёшь программировать. Во-вторых, некоторые идеи могут оказаться ценными для последующего поиска Грааля. Порой сокращение кода идёт с той стороны, с которой и не ожидаешь. Поэтому много программ, реализующих разные подходы, иметь полезно.
Это всё можно делать параллельно с сокращением моего кода. Свою программу я короткой не считаю. Ведь программы для ПМК это не просто программы для ПМК, абы какие. Это ещё и как знак качества, старая школа. Куча народу со всех 15 Республик понимает, о чём я сейчас говорю.
December 2 2007, 10:23:19 UTC 4 years ago
АНТИ-ГРААЛЬ!
Я написАла программу [правда, по слегка другому алгоритму, чем ту, которую недописала и стёрла, но тоже собственной выдумки]. И - о чудо! - моя программа:1) Заработала...
2) Заработала правильно! (тьфу-тьфу-тьфу!)
3) Заняла менее 1 страницы.
Поскольку она самая длинная из всех предложенных, я назвала её "Анти-грааль". Ура! Последнее место в конкурсе на самую короткую программу теперь точно моё ;)))
December 2 2007, 10:26:54 UTC 4 years ago
Re: АНТИ-ГРААЛЬ!
Поздравляю! Сегодня у меня тяжёлый день. После долгой тишины — в один день сразу три программы от участников Похода, плюс обновление «затравочной» версии. Надеюсь, что успею проверить «Анти-грааль» сегодня же. По крайней мере мне это интересно, ждал варианта Чёрной Королевы.
December 2 2007, 10:31:26 UTC 4 years ago
Re: АНТИ-ГРААЛЬ!
Да, а какой смысл было на 60 шаге делать переход на 43-й? Ведь можно просто продолжить там программу с 43-го адреса, и два шага на переход было бы сэкономлено.
Также считывать из программы коды символов, конечно, хорошо. Но таблица это целых 16 шагов! В 16 шагов вполне можно уложить вычисление кода символа. Ещё один резерв, чтобы уложиться в полстраницы. ;-)
December 2 2007, 10:41:38 UTC 4 years ago
Re: АНТИ-ГРААЛЬ!
Ух, а я увидев, что пришёл комментарий, испугалась, что программа неправильно заработала (хоть и тщательно проверила код, но всё равно боюсь!)Спасибо за замечания! На то он и "Анти-грааль", чтобы иметь много лишних шагов :) Когда будет время, я конечно, задумаюсь над его сокращением. Это просто черновик, набросанный минут за 40 - нет времени, нужно делать уроки, заданные в технаре :(
Скоро ведь сессия!
4 years ago
4 years ago
4 years ago
4 years ago
December 3 2007, 06:59:21 UTC 4 years ago
63 шага
Вот и заработано почётное предпоследнее место, перед "Hex-1".Никакого плагиатства! Я ещё даже не разбирала чужие программы, только перепечатала их на свой МК-152, чтобы посмотреть, как работают. Даже Hex1 разобрать времени ещё не нашлось с этим технарём дурацким и другими делами житейскими...
Интересно, что на преобразование Антиграаля в программу, по размеру более-менее сравнимую с программами других участников, ушло целых 4 часа - в 6 раз больше, чем на разработку "Антиграаля"! Так что пойду покамест отдохну...
P.S. А интересно, сколько времени другие участники "похода" потратили на разработку и улучшение своих версий?
4 years ago
November 30 2007, 21:21:34 UTC 4 years ago
December 1 2007, 14:08:13 UTC 4 years ago
Вывод на индикатор МК-152 должен быть гораздо удобнее, т.е. программа сократится.
Думаю, теперь перейти к шестнадцатеричной будет проще.
Добавил новые забавные возможности форматирования текста на сайте :)
December 1 2007, 14:15:12 UTC 4 years ago
Жду 16-ричного победителя! Кстати, не обязательно использовать именно R9025. Можно записывать результат в байтах (R1000…R8167, хоть в обратном порядке), а потом выводить через R9027.
December 2 2007, 01:54:52 UTC 4 years ago
http://arbinada.com/pmk/node/39
47 шагов + нет ошибки при целочисленном делении
December 2 2007, 19:53:31 UTC 4 years ago
Чтож. С указанными исправлениями работает, хотя только в диапазоне от 0 до 16777215 (FFFFFF).
December 2 2007, 22:27:15 UTC 4 years ago
December 2 2007, 22:58:45 UTC 4 years ago
Да, до 1008 спасает. Когда R0 становится 999, то записать-то в десятичный регистр он запишет. Вот только R9027 фиг с два из него что-нибудь толковое в строчку комментария выведет.
December 2 2007, 23:24:33 UTC 4 years ago
December 3 2007, 00:05:53 UTC 4 years ago
Кстати, 01.3 02.2 03.Fx2 даст 1024 и на один шаг короче. :-))))
4 years ago
4 years ago
December 1 2007, 22:26:26 UTC 4 years ago
51 шаг
Вообще то программа была написана еще в четверг, но не было времени ее запоститьВывод через Р9027
00.П1 01.7 02.П0 03.1 04.6 05.П2 06.1 07.0 08.0 09.7 10.П3 11.ПП 12.23 13.ИП3 14.1 15.+ 16.РРП 17.90 18.27 19.К ЭКР 20.С/П 21.БП 22.00 23.Сх 24.КП3 25.ИП1 26.ИП2 27./ 28.К[x] 29.П1 30.FBx 31.K{x} 32.ИП2 33.* 34.K[x] 35.1 36.0 37.+ 38.Fx>=0 39.47 40.6 41.5 42.+ 43.КП3 44.FL0 45.25 46.B/O 47.5 48.8 49.БП 50.42December 1 2007, 22:42:37 UTC 4 years ago
Re: 51 шаг
Прошу прощения, по адресу 37 должно быть 37.-Возможности программы - целые положительные числа до 99999999
December 2 2007, 20:28:49 UTC 4 years ago
Re: 51 шаг
Только до 16777215, зато ноль тоже выводит.December 2 2007, 18:25:17 UTC 4 years ago
Кстати
Куда бы мне новоиспеченную кнопочку втиснуть? :)Код кнопки:
<a href="http://pmk.arbinada.com">
<img src="http://arbinada.com/pmk/system/fil
alt="ПМК - программируемые микрокалькуляторы: МК-152, советские, зарубежные">
</a>
December 2 2007, 19:16:06 UTC 4 years ago
Re: Кстати
Добавлено.