Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт мар 28, 2024 12:22

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Ответить
Имя пользователя:
Заголовок:
Текст сообщения:
Введите текст вашего сообщения. Длина сообщения в символах не более: 60000

Размер шрифта:
Цвет шрифта
Настройки:
BBCode ВКЛЮЧЕН
[img] ВЫКЛЮЧЕН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЕН
Смайлики ВЫКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Не преобразовывать адреса URL в ссылки
Вопрос
Теперь гостю придется вводить здесь пароль. Не от своей учетной записи, а ПАРОЛЬ ДЛЯ ГОСТЯ, получить который можно после регистрации на форуме через ЛС.:
Этот вопрос предназначен для выявления и предотвращения автоматических регистраций.
   

Обзор темы - Вывод последовательности чисел.
Автор Сообщение
  Заголовок сообщения:  Re: Вывод последовательности чисел.  Ответить с цитатой
Ethereal писал(а):
Ты бы пояснил, что за версией Форта ты пользуешься, что он вот это

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

Точнее на исходном spf. У меня решение на расширенном spf. Основная цель моих расширений - ввести средства для исключения оперативного инструментального контекста из форта и тем самым поднять планку сложности решаемых задач.
Да, еще замечание по вашему решению. Много лишней работы по перебору ненужных(невыводимых) значений чисел.
Проще ввести понятие переноса и напрямую формировать из предыдущего числа последующее.
Сообщение Добавлено: Вт сен 20, 2011 09:44
  Заголовок сообщения:  Re: Вывод последовательности чисел.  Ответить с цитатой
А то так и просится вырваться ворчалка :
chess писал(а):
По сравнению с моим более сложное из наличия инструментального контекста(из-за манипуляций с параметрами на стеке).
По сравнению с твоим оно на Форте.
Сообщение Добавлено: Вт сен 20, 2011 00:07
  Заголовок сообщения:  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 )
распознает как нечто осмысленное.
Сообщение Добавлено: Пн сен 19, 2011 23:59
  Заголовок сообщения:  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
Сообщение Добавлено: Пн сен 19, 2011 09:25
  Заголовок сообщения:  Re: Вывод последовательности чисел.  Ответить с цитатой
Кстати, мой алго выдает тоже :

0 111 SEQ
0 1 10 11 100 101 110 111 Ok
Сообщение Добавлено: Вс сен 18, 2011 02:22
  Заголовок сообщения:  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
;
Сообщение Добавлено: Сб сен 17, 2011 19:04
  Заголовок сообщения:  Re: Вывод последовательности чисел.  Ответить с цитатой
Лог :

123 456 SEQ
123 124 125 126 133 134 135 136 143 144 145 146 153 154 155 156 223 224 225 226 233 234 235 236 243 244 245 246 253 254 255 256 323 324 325 326 333 334 335 336 343 344 345 346 353 354 355 356 423 424 425 426 433 434 435 436 443 444 445 446 453 454 455 456 Ok
Сообщение Добавлено: Сб сен 17, 2011 18:59
  Заголовок сообщения:  Re: Вывод последовательности чисел.  Ответить с цитатой
Вот, решение интуитивного понимания той задачи, которую chess имел ввиду :

: SEQ ( u1 u2 -- )
2DUP 1+ SWAP
DO
2DUP I
BEGIN
DUP 10 MOD 2OVER 10 MOD >R 10 MOD OVER > R> ROT < OR INVERT
WHILE
10 / ROT 10 / ROT 10 / ROT
DUP 0=
UNTIL
I .
THEN
DROP 2DROP
LOOP
2DROP
;
Сообщение Добавлено: Сб сен 17, 2011 18:41
  Заголовок сообщения:  Re: Вывод последовательности чисел.  Ответить с цитатой
chess писал(а):
Задачка решается корректно и при условии, что любое количество цифр начального и конечного числа совпадают.

Кроме этого начальное число можно задавать в свободном формате.
Все отсутствующие старшие цифры будут восприниматься как нули. И выводится числа будут с ведущими нулями.
Например:
Код:
0
111 seq

лог.
Код:
000 001 010 011 100 101 110 111

ps. Впрочем ведущие нули можно убрать изменив процедуру вывода.
Сообщение Добавлено: Чт сен 15, 2011 12:21
  Заголовок сообщения:  Re: Вывод последовательности чисел.  Ответить с цитатой
Код:
: seq ( n1 n2 -- )
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 ) \ процедура - цифры числа положить в память
e q>s 1+ d!  \ цифры кон. числа положить в память
b q>s DROP   \ цифры нач. числа положить в память
b t d MOVE   \ текущему значению цифр числа в памяти присвоить цифры нач. числа
.t( 0 d 1- DO I t + C@ 1 .0 -1 +LOOP SPACE ) \ процедура - вывод текущего числа
next( 0 is c \ с - перенос                   \ процедура - из цифр текущего числа сформировать цифры следующего текущего числа
d 0 DO I 0= IF t C@ e C@ = IF b C@ t C! 1 is c ELSE t C@ 1+ t C! 0 is c LEAVE THEN
            ELSE c IF I t + C@ I e + C@ =
                      IF I b + C@ I t + C! 1 is c ELSE I t + C@ 1+ I t + C! 0 is c THEN
                   ELSE LEAVE
                   THEN
            THEN
    LOOP )
BEGIN .t next t d e d COMPARE 0= UNTIL .t ;

STARTLOG
123
456 seq

лог
Код:
123 124 125 126 133 134 135 136 143 144 145 146 153 154 155 156 223 224 225 226 233 234 235 236 243 244 245 246 253 254 255 256 323 324 325 326 333 334 335 336 343 344 345 346 353 354 355 356 423 424 425 426 433 434 435 436 443 444 445 446 453 454 455 456
Ok

Ps.
Задачка решается корректно и при условии, что любое количество цифр начального и конечного числа совпадают.
Сообщение Добавлено: Чт сен 15, 2011 09:29
  Заголовок сообщения:  Re: Вывод последовательности чисел.  Ответить с цитатой
chess писал(а):
от цифры в соответствующей позиции меньшего входного числа до цифры в соответствующей позиции большего входного числа.


Вот этого в первоначальном условии просто нет и НЕ ВИДНО абсолютно.
Сообщение Добавлено: Ср сен 14, 2011 20:03
  Заголовок сообщения:  Re: Вывод последовательности чисел.  Ответить с цитатой
chess писал(а):
Я даже не запускал ваше решение. Видно сразу - алгоритм некорректный.
В нем вы не учитываете, что разрядность входных чисел может быть произвольной.

Аа, ну да. Я почему-то решил, что числа строго двузначные.
Сообщение Добавлено: Ср сен 14, 2011 13:38
  Заголовок сообщения:  Re: Вывод последовательности чисел.  Ответить с цитатой
вопрос писал(а):
для чисел произвольной разрядности возможно регшение только в виде строки цифр

В принципе, да. Но для чисел меньше чем 2 в 32-ой можно обойтись и без строки цифр. Это естественное ограничение
для 32-х разрядной форт-системы, поэтому такие решения тоже засчитываются.
Сообщение Добавлено: Ср сен 14, 2011 12:22
  Заголовок сообщения:  Re: Вывод последовательности чисел.  Ответить с цитатой
для чисел произвольной разрядности возможно регшение только в виде строки цифр
Сообщение Добавлено: Ср сен 14, 2011 11:30
  Заголовок сообщения:  Re: Вывод последовательности чисел.  Ответить с цитатой
Хищник писал(а):
А какие из выведенных чисел неверны?

Многие. :)
Я даже не запускал ваше решение. Видно сразу - алгоритм некорректный.
В нем вы не учитываете, что разрядность входных чисел может быть произвольной.
А так, пожалуйста:
Код:
123 234 seq
лог
Код:
123 124 133 134 143 144 153 154 163 164 173 174 183 184 193 194 203 204 213 214 223 224 233 234
Ok
Сообщение Добавлено: Ср сен 14, 2011 08:19

Часовой пояс: UTC + 3 часа [ Летнее время ]


cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB