Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт дек 13, 2018 09:57

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Вывод последовательности чисел.
СообщениеДобавлено: Вт сен 13, 2011 14:07 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2120
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 40 раз.
Даны два произвольных десятичных целых числа одинаковой разрядности, таких, что все цифры первого меньше соответствующих цифр второго.
Как пример 12 и 35. 1 меньше 3 и 2 меньше 5. Вывести последовательность чисел начиная с меньшего до большего.
Например в случае 12 35 выведется последовательность 12 13 14 15 22 23 24 25 32 33 34 35.
Решение дать в виде:
Код:
: seq ( n1 n2 -- ) .. ;

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Вывод последовательности чисел.
СообщениеДобавлено: Вт сен 13, 2011 18:18 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Решение:
Код:
: seq 2DROP 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . ;


Так как в условии не указано зависимости выходной последовательности от входных чисел, последние удаляем к черту и выдаем первую попавшуюся последовательность, какая в голову пришла.

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Вывод последовательности чисел.
СообщениеДобавлено: Вт сен 13, 2011 21:00 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6454
Благодарил (а): 14 раз.
Поблагодарили: 101 раз.
Код:
: seq
  DUP 10 / 1 + 2 PICK 10 / DO
    DUP 10 MOD 1 + 2 PICK 10 MOD DO
      J 10 * I + .
    LOOP
  LOOP
  2DROP 
;


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Вывод последовательности чисел.
СообщениеДобавлено: Вт сен 13, 2011 21:21 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2120
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 40 раз.
WingLion писал(а):
Так как в условии не указано зависимости выходной последовательности от входных чисел

Зависимость указана примером, однозначно описывающим, что надо вывести взависимости
от входных данных. Или вам все-таки реально непонятно? :o
Ну ладно, тогда будет больше писанины, однозначность появится, а понятность вряд-ли:
Даны два входных десятичных числа, в каждом из которых одинаковое количество цифр.
Цифры первого числа в каждой позиции меньше цифр второго числа в соответствующих позициях. Вывести все числа начиная с меньшего входного числа до большего входного числа, при условии что цифры в каждой позиции выводимых чисел принимают значения от цифры в соответствующей позиции меньшего входного числа до цифры в соответствующей позиции большего входного числа. Числа в выводимой последовательности идут нарастающим порядком, то есть каждое последующее больше предыдущего.

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Вывод последовательности чисел.
СообщениеДобавлено: Вт сен 13, 2011 22:39 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2120
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 40 раз.
Хищник писал(а):
: seq
DUP 10 / 1 + 2 PICK 10 / DO
DUP 10 MOD 1 + 2 PICK 10 MOD DO
J 10 * I + .
LOOP
LOOP
2DROP
;

решение неверное.

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Вывод последовательности чисел.
СообщениеДобавлено: Вт сен 13, 2011 23:34 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6454
Благодарил (а): 14 раз.
Поблагодарили: 101 раз.
chess писал(а):
решение неверное.

А какие из выведенных чисел неверны?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Вывод последовательности чисел.
СообщениеДобавлено: Ср сен 14, 2011 08:19 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2120
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 40 раз.
Хищник писал(а):
А какие из выведенных чисел неверны?

Многие. :)
Я даже не запускал ваше решение. Видно сразу - алгоритм некорректный.
В нем вы не учитываете, что разрядность входных чисел может быть произвольной.
А так, пожалуйста:
Код:
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

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Вывод последовательности чисел.
СообщениеДобавлено: Ср сен 14, 2011 11:30 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
для чисел произвольной разрядности возможно регшение только в виде строки цифр


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Вывод последовательности чисел.
СообщениеДобавлено: Ср сен 14, 2011 12:22 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2120
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 40 раз.
вопрос писал(а):
для чисел произвольной разрядности возможно регшение только в виде строки цифр

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

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Вывод последовательности чисел.
СообщениеДобавлено: Ср сен 14, 2011 13:38 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6454
Благодарил (а): 14 раз.
Поблагодарили: 101 раз.
chess писал(а):
Я даже не запускал ваше решение. Видно сразу - алгоритм некорректный.
В нем вы не учитываете, что разрядность входных чисел может быть произвольной.

Аа, ну да. Я почему-то решил, что числа строго двузначные.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Вывод последовательности чисел.
СообщениеДобавлено: Ср сен 14, 2011 20:03 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
chess писал(а):
от цифры в соответствующей позиции меньшего входного числа до цифры в соответствующей позиции большего входного числа.


Вот этого в первоначальном условии просто нет и НЕ ВИДНО абсолютно.

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Вывод последовательности чисел.
СообщениеДобавлено: Чт сен 15, 2011 09:29 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2120
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 40 раз.
Код:
: 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.
Задачка решается корректно и при условии, что любое количество цифр начального и конечного числа совпадают.

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Вывод последовательности чисел.
СообщениеДобавлено: Чт сен 15, 2011 12:21 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2120
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 40 раз.
chess писал(а):
Задачка решается корректно и при условии, что любое количество цифр начального и конечного числа совпадают.

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

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

ps. Впрочем ведущие нули можно убрать изменив процедуру вывода.

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Вывод последовательности чисел.
СообщениеДобавлено: Сб сен 17, 2011 18:41 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 521
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 22 раз.
Вот, решение интуитивного понимания той задачи, которую 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
;


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Вывод последовательности чисел.
СообщениеДобавлено: Сб сен 17, 2011 18:59 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 521
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 22 раз.
Лог :

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу 1, 2  След.

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


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

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