Forth
http://fforum.winglion.ru/

Вывод последовательности чисел.
http://fforum.winglion.ru/viewtopic.php?f=19&t=2759
Страница 2 из 2

Автор:  Ethereal [ Сб сен 17, 2011 19:04 ]
Заголовок сообщения:  Re: Вывод последовательности чисел.

Даже можно чуток соптимизировать :

: SEQ ( u1 u2 -- )
2DUP 1+ SWAP
DO
2DUP I
BEGIN
DUP 10 MOD 2OVER 10 MOD SWAP 10 MOD SWAP 1+ WITHIN
WHILE
10 / ROT 10 / ROT 10 / ROT
DUP 0=
UNTIL
I .
THEN
DROP 2DROP
LOOP
2DROP
;

Автор:  Ethereal [ Вс сен 18, 2011 02:22 ]
Заголовок сообщения:  Re: Вывод последовательности чисел.

Кстати, мой алго выдает тоже :

0 111 SEQ
0 1 10 11 100 101 110 111 Ok

Автор:  chess [ Пн сен 19, 2011 09:25 ]
Заголовок сообщения:  Re: Вывод последовательности чисел.

Ethereal писал(а):
Кстати, мой алго выдает тоже :

0 111 SEQ
0 1 10 11 100 101 110 111 Ok


Это корректное решение. По сравнению с моим более сложное из наличия инструментального контекста(из-за манипуляций с параметрами на стеке). Не знаю как вы, а я написал его за один раз (не отлаживая) и сразу получил верный результат.
Кстати можно решение модифицировать для числа не из одной цифры в каждой позиции исходных чисел, а из двух цифр в каждой позиции. И на тех же входных числах оно даст другой результат.
Решение, например, ваше чуть изменится:
Код:
: SEQ ( u1 u2 -- )
2DUP 1+ SWAP
DO    2DUP I
      BEGIN
             DUP 100 MOD 2OVER 100 MOD SWAP 100 MOD SWAP 1+ WITHIN
      WHILE
             100 / ROT 100 / ROT 100 / ROT DUP 0=
      UNTIL
      I .
      THEN
      DROP 2DROP
LOOP  2DROP ;

STARTLOG
0 111 SEQ

лог.
Код:
0 1 2 3 4 5 6 7 8 9 10 11 100 101 102 103 104 105 106 107 108 109 110 111
Ok

Автор:  Ethereal [ Пн сен 19, 2011 23:59 ]
Заголовок сообщения:  Re: Вывод последовательности чисел.

Ты бы пояснил, что за версией Форта ты пользуешься, что он вот это
chess писал(а):
0 a! 0 c! \ служебные переменные
10 b] 10 e] 10 t] \ место в памяти для цифр нач. кон. и текущего чисел
q>s( is a is c 10 0 DO c 10 /MOD is c c IF I a + C! ELSE I a + C! I LEAVE THEN LOOP )
распознает как нечто осмысленное.

Автор:  Ethereal [ Вт сен 20, 2011 00:07 ]
Заголовок сообщения:  Re: Вывод последовательности чисел.

А то так и просится вырваться ворчалка :
chess писал(а):
По сравнению с моим более сложное из наличия инструментального контекста(из-за манипуляций с параметрами на стеке).
По сравнению с твоим оно на Форте.

Автор:  chess [ Вт сен 20, 2011 09:44 ]
Заголовок сообщения:  Re: Вывод последовательности чисел.

Ethereal писал(а):
Ты бы пояснил, что за версией Форта ты пользуешься, что он вот это

Исходники под расширение spf я давал(http://chess2007.nm.ru/~chess.zip)
Ethereal писал(а):
По сравнению с твоим оно на Форте.

Точнее на исходном spf. У меня решение на расширенном spf. Основная цель моих расширений - ввести средства для исключения оперативного инструментального контекста из форта и тем самым поднять планку сложности решаемых задач.
Да, еще замечание по вашему решению. Много лишней работы по перебору ненужных(невыводимых) значений чисел.
Проще ввести понятие переноса и напрямую формировать из предыдущего числа последующее.

Страница 2 из 2 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/