Forth
http://fforum.winglion.ru/

o! задачка! преобразование числа в римскую цифру.
http://fforum.winglion.ru/viewtopic.php?f=19&t=2526
Страница 1 из 1

Автор:  WingLion [ Вт мар 16, 2010 21:55 ]
Заголовок сообщения:  o! задачка! преобразование числа в римскую цифру.

Написать слово, которое из числа на стеке печатает его "римской цифрой".
Ограничение - число не более 65536 (16 разрядов).
Где искать правила преобразования - сам не знаю.

Автор:  chess [ Вт мар 16, 2010 22:05 ]
Заголовок сообщения: 

WingLion писал(а):
Ограничение - число не более 65536 (16 разрядов).
Где искать правила преобразования - сам не знаю.

I - 1
V - 5
X - 10
L - 50
C - 100
D - 500
M = 1000

Сначала пишутся тысячи и сотни, а затем - десятки и единицы. Есть и некоторые правила.Если большая цифра стоит перед меньшей, то они складываются (принцип сложения), если же меньшая - перед большей, то меньшая вычитается из большей (принцип вычитания).

Одна черта сверху означает умножение всего числа на 1000. Но в типографи черта сверху применяется редко из-за сложности набора.

Примеры

Число 26 = XXVI
Число 1987 = MCMLXXXVII

Чтобы лучше запомнить буквы в римских цифрах в русском языке существует правило мнемоники, которое звучит так:
Мы Дарим Сочные Лимоны, Хватит Всем Их.

Автор:  WingLion [ Вт мар 16, 2010 22:14 ]
Заголовок сообщения: 

интел всех переплюнула, пентиум 2010 года сделала в середине 90-х годов и назвала без ложной скромности Pentium-MMX

Автор:  forther [ Вт мар 16, 2010 22:52 ]
Заголовок сообщения: 

жалко, что в интернете ответ отыскивается за пару кликов.

Автор:  in4 [ Ср мар 17, 2010 01:42 ]
Заголовок сообщения: 

доп. информация: Броуди, Способ мышления - Форт, глава 4.
Заодно и поучиться можно... ;)

Автор:  Jelsay [ Ср мар 17, 2010 07:20 ]
Заголовок сообщения: 

: 1 ." I" ;
: 2 ." II" ;
: 3 ." III" ;
: 4 ." IV" ;
: 5 ." V" ;
...
..
...
: 65536 ."..........

надо беречь ресурсы мозга за счёт коипьютерных "мозгов".

Автор:  WingLion [ Ср мар 17, 2010 07:59 ]
Заголовок сообщения: 

a с неоднозначностью что делать?
90=XC или 90=LXL ?

49=IL или 49=XLIX ?

и т.д. и т.п.

Автор:  chess [ Ср мар 17, 2010 08:44 ]
Заголовок сообщения: 

WingLion писал(а):
a с неоднозначностью что делать?
90=XC или 90=LXL ?

49=IL или 49=XLIX ?

и т.д. и т.п.

Выбирайте более короткий вариант.

Автор:  mOleg [ Ср мар 17, 2010 10:34 ]
Заголовок сообщения: 

провакационное решение (детям не показывать!)
<pre>
\ получаем количество циферек (вот до чего доводит нежелание создавать нормальную позиционную систему!)
: ?# ( u n char --> u )
>L BEGIN DDUP 1 - > WHILE
TUCK - SWAP
L@ KEEP
REPEAT L> DDROP ;

\ ленивый вариант!!!
: >rome ( u --> )
<| 1000 [CHAR] M ?#
500 [CHAR] D ?#
100 [CHAR] C ?#
50 [CHAR] L ?#
10 [CHAR] X ?#
5 [CHAR] V ?#
1 [CHAR] I ?#
DROP |> TYPE ;
</pre>

вообще, интересно, что Римляне догадались систему сделать позиционной (мое решение нет), только подошли к решению своеобразно.
Но тут у меня есть подозрение, что так они боролись с "пузырями", то есть с банкирами. Попробуй написать милиард в римской системе!.. Вот пользовалсь бы США римской системой - не пришлось бы выдумывать "зеленые ростки" ;)

Автор:  chess [ Ср мар 17, 2010 14:46 ]
Заголовок сообщения: 

Печатает "правильные" римские числа, но так как символа подчеркивания сверху я сделать не могу, то
начиная с числа 4000 "правильности" не достичь.

Код:
0 VALUE SMD

: SYM. \ SM --
  S" IVXLCDM" DROP SMD + + C@ EMIT ;

: DIG.  \ DIG SM --
  TO SMD 5 /MOD OVER 4 =
  IF 0 SYM. IF 2 SYM. ELSE 1 SYM.  THEN DROP
  ELSE  IF 1 SYM. THEN 0 ?DO 0 SYM. LOOP THEN ;

: ROME. \ N --
  1000 /MOD 6 DIG. 100 /MOD 4 DIG. 10 /MOD 2 DIG. 0 DIG. ;

3949 ROME.

log
Код:
MMMCMXLIX
Ok

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