Вверх ↑
Разработчик
Ответов: 26067
Рейтинг: 2121
#1: 2008-02-10 15:34:28 ЛС | профиль | цитата
iarspider писал(а):
А если я буду выкладывать готовый алгоритм
Да не не надо выкладывать готовый алоритм. Например, в певой задаче нужно было просто написать -- необходимо сделать конвертор чисел из Арабской системы счисления в Римскую с контролем правильности ввода, и все, остальное там нафиг не нужно. Куда чел выведет готовый результат, ну никак, на этот самый результат, не повлияет, да и сложно это для среднего пользователя. Результат налицо -- кто решил до конца, хотябы одну, задачу
Ну вот не хотел лезть в судейство, опять бес попутал

------------ Дoбавленo:


Tad, вот, что я нашел

Википедия писал(а):
Существует «сокращённый способ» для записи больших чисел, таких как 1999. Он не рекомендуется, но иногда используется для упрощения. Отличие состоит в том, что для уменьшения цифры слева от неё может писаться любая цифра:
999. Тысяча M, вычтем 1 (I), получим 999 (IM) вместо CMXCIX. Следствие: 1999 — MIM вместо MCMXCIX
95. Сто C, вычтем 5 (V), получим 95 (VC) вместо XCV
1950: тысяча M, вычтем 50 (L), получим 950 (LM). Следствие: 1950 — MLM вместо MCML


Так что, из конвертора IntToRom необходимо выкинуть сокращения, а вот в конверторе RomToInt это можно сделать, чтобы конвертировать любую последовательность Римский чисел.

------------ Дoбавленo:


Tad писал(а):
Тысячу можно было написать и буквой "М" и буквой "I" с горизонтальной линией сверху.
А "XL" с горизонтальной линией сверху - это уже 40 000
Считаю не верным, я не вижу ссылки на источник, а вот, что говорит источник, который доступен для всех http://ru.wikipedia.org/wiki/Римские_цифры

Википедия писал(а):
У других авторов черта сверху могла обозначать увеличение значения цифры в 1000 раз
Я не считаю "других авторов" поводом для подражания и руководством к действию.



------------ Дoбавленo:


Добавил два метода конвертации IntToRom (Standard Algorithm) и RomToInt (Extended Algorithm) в штатный конвертор (доступен на SVN).

[svn]Convertor.pas[/svn]

------------ Дoбавленo:


Ага, а вот и кусок второй задачи -- алгоритм определения соответствия матрицы пятен:



Add(MainForm,6168812,77,119)
{
Left=20
Top=105
Width=296
Height=281
Position=1
link(onCreate,10511176:doEvent1,[])
}
Add(ArrayEnum,11530578,217,140)
{
link(onItem,12950487:doConvert,[])
link(onEndEnum,9387158:doEnum,[(261,153)(261,219)(205,219)(205,286)])
link(Array,533869:Array,[])
}
Add(StrList,10534379,343,140)
{
}
Add(ListBox,533869,203,70)
{
Left=10
Top=35
Width=130
Height=155
TabOrder=-1
Strings=#7:0010000|7:0111000|7:0110000|7:0000010|7:0100010|
}
Add(Convertor,12950487,273,140)
{
Mode=7
link(onResult,10534379:doAdd,[])
}
Add(StrList,1659569,343,280)
{
}
Add(ListBox,2303860,203,203)
{
Left=145
Top=35
Width=130
Height=155
TabOrder=-1
Strings=#7:0001000|7:0011000|7:0110000|7:0110010|7:0100010|
}
Add(ArrayEnum,9387158,217,280)
{
link(onItem,15685451:doConvert,[])
link(onEndEnum,2361031:doEnum,[(303,293)(303,216)])
link(Array,2303860:Array,[])
}
Add(Convertor,15685451,273,280)
{
Mode=7
link(onResult,1659569:doAdd,[])
}
Add(ArrayEnum,2361031,357,210)
{
link(onItem,1185272:doRead,[(401,216)(401,286)(345,286)(345,356)])
link(onEndEnum,12521979:doData,[(411,223)(411,363)])
link(Array,10534379:Array,[])
}
Add(ArrayRW,1185272,357,350)
{
link(onRead,12521979:doOperation1,[])
link(Array,1659569:Array,[])
link(Index,2361031:Index,[])
}
Add(Edit,15479895,518,343)
{
Left=160
Top=195
Width=30
Text=""
}
Add(MultiElementEx,12521979,434,343)
{
@Hint=#11:Coincidence|
link(Op2,2361031:Item,[(440,307)(363,307)])
link(onEventData,15479895:doText,[])
link(onResult,1846163:doText,[(492,356)(492,391)])
}
BEGIN_SDK
Add(EditMultiEx,16634185,21,21)
{
WorkCount=#11:doOperation|12:doOperation1|6:doData|
EventCount=#11:onEventData|8:onResult|
DataCount=#3:Op2|
Width=671
Height=396
link(doOperation,10001985:doClear,[(269,27)(269,97)])
link(doOperation1,5611236:doOperation,[(35,34)(35,97)])
link(doData,1227567:doEvent1,[(245,41)(245,209)])
}
Add(Math,5611236,49,91)
{
OpType=6
ResultType=0
link(onResult,804334:doEvent1,[])
link(Op2,16634185:Op2,[(62,60)(27,60)])
}
Add(Math,5185660,210,105)
{
OpType=4
Op2=1
ResultType=0
link(onResult,16518593:doWork2,[])
}
Add(Math,5747908,210,147)
{
OpType=4
Op2=2
ResultType=0
link(onResult,4825510:doWork2,[])
}
Add(Math,14568447,210,189)
{
OpType=4
Op2=4
ResultType=0
link(onResult,4100386:doWork2,[])
}
Add(Math,10160459,210,231)
{
OpType=4
Op2=8
ResultType=0
link(onResult,9341604:doWork2,[])
}
Add(Math,11286906,210,273)
{
OpType=4
Op2=16
ResultType=0
link(onResult,10303122:doWork2,[])
}
Add(Math,5926633,210,315)
{
OpType=4
Op2=32
ResultType=0
link(onResult,14950443:doWork2,[])
}
Add(Math,15655080,210,357)
{
OpType=4
Op2=64
ResultType=0
link(onResult,14950443:doWork3,[(333,363)])
}
Add(Memory,3959368,441,49)
{
Default=Integer(0)
}
Add(Math,7601361,434,105)
{
Op1=1
ResultType=0
link(onResult,3959368:doValue,[(478,111)(478,83)(429,83)(429,55)])
link(Op2,6201972:Var2,[])
}
Add(HubEx,16518593,329,98)
{
link(onEvent,652442:doCompare,[])
}
Add(HubEx,4825510,329,140)
{
Angle=3
link(onEvent,16518593:doWork3,[])
}
Add(HubEx,4100386,329,182)
{
Angle=3
link(onEvent,4825510:doWork3,[])
}
Add(HubEx,9341604,329,224)
{
Angle=3
link(onEvent,4100386:doWork3,[])
}
Add(HubEx,10303122,329,266)
{
Angle=3
link(onEvent,9341604:doWork3,[])
}
Add(HubEx,14950443,329,308)
{
Angle=3
link(onEvent,10303122:doWork3,[])
}
Add(Hub,804334,112,91)
{
OutCount=11
link(onEvent2,3959368:doClear,[(292,104)(292,62)])
link(onEvent3,5185660:doOperation,[])
link(onEvent4,5747908:doOperation,[(177,118)(177,153)])
link(onEvent5,14568447:doOperation,[(177,125)(177,195)])
link(onEvent6,10160459:doOperation,[(177,132)(177,237)])
link(onEvent7,11286906:doOperation,[(177,139)(177,279)])
link(onEvent8,5926633:doOperation,[(177,146)(177,321)])
link(onEvent9,15655080:doOperation,[(177,153)(177,363)])
link(onEvent10,7872292:doData,[(275,160)(275,167)])
}
Add(If_else,652442,357,105)
{
Type=2
Op2=Integer(0)
link(onTrue,7601361:doOperation,[])
}
Add(GetDataEx,6201972,434,84)
{
link(Data,3959368:Value,[])
}
Add(DoData,7872292,406,161)
{
link(onEventData,9717891:doOperation,[])
link(Data,6201972:Var1,[(412,93)])
}
Add(Memory,10001985,518,84)
{
Default=Integer(0)
}
Add(Math,9717891,511,161)
{
Op1=1
ResultType=0
link(onResult,10001985:doValue,[(555,167)(555,118)(506,118)(506,90)])
link(Op2,14671923:Var2,[])
}
Add(Math,8057683,553,203)
{
OpType=1
Op1=35
ResultType=0
link(onResult,16634185:onEventData,[(639,209)(639,27)])
link(Op2,14671923:Var3,[(566,142)])
}
Add(GetDataEx,14671923,511,133)
{
link(Data,10001985:Value,[])
}
Add(Hub,1227567,469,203)
{
link(onEvent1,8057683:doOperation,[])
link(onEvent2,11146612:doCalc,[(527,216)(527,272)])
}
Add(MathParse,11146612,553,266)
{
MathStr="%1*100 div 35"
link(onResult,16634185:onResult,[(639,272)(639,34)])
link(X1,8057683:Result,[])
}
END_SDK
Add(Hub,10511176,140,133)
{
OutCount=3
link(onEvent1,12521979:doOperation,[(303,139)(303,349)])
link(onEvent2,11530578:doEnum,[])
}
Add(Label,926163,119,21)
{
Left=45
Top=10
Width=55
Height=17
Font=[MS Sans Serif,8,1,0,1]
Caption="One Cow"
}
Add(Label,1363523,203,21)
{
Left=185
Top=10
Width=56
Height=17
Font=[MS Sans Serif,8,1,0,1]
Caption="Tow Cow"
}
Add(Label,13461899,245,21)
{
Left=80
Top=205
Width=74
Height=17
Font=[MS Sans Serif,8,1,0,1]
Caption="Coincidence"
}
Add(Edit,1846163,518,385)
{
Left=160
Top=215
Width=30
Text=""
}
Add(Label,1893345,161,21)
{
Left=195
Top=215
Width=13
Height=17
Font=[MS Sans Serif,8,1,0,1]
Caption="%"
}

карма: 22

0