Вверх ↑
Разработчик
Ответов: 26163
Рейтинг: 2127
#1: 2008-02-09 23:58:07 ЛС | профиль | цитата
А вот окончательный релиз конвертора DecimalToRoman/RomanToDecimal в двух вариантах (компоненты HiAsm и IC)



Add(MainForm,280613,167,87)
{
Left=20
Top=105
Width=221
Height=177
Caption="DecimalToRoman"
Position=1
}
Add(IntegerArray,5682974,307,87)
{
IntArray=['M'=1000,'IM'=999,'CM'=900,'D'=500,'ID'=499,'CD'=400,'C'=100,'IC'=99,'XC'=90,'L'=50,'IL'=49,'Xl'=40,'X'=10,'IX'=9,'V'=5,'IV'=4,'I'=1]
FileFormat=1
}
Add(Memory,237103,657,325)
{
Default=String()
}
Add(Hub,12748134,167,311)
{
OutCount=3
link(onEvent1,15352514:doWork,[])
link(onEvent2,13350876:doEnum,[])
link(onEvent3,6302184:doWork,[])
}
Add(StrCat,3358455,580,325)
{
link(onStrCat,237103:doValue,[])
link(Str1,237103:Value,[(586,313)(624,313)(624,369)(663,369)])
link(Str2,13350876:Item,[(593,322)(299,322)])
}
Add(Memory,1401807,419,234)
{
}
Add(Repeat,13396544,419,318)
{
Type=4
link(onRepeat,16756407:doOperation,[])
link(Op1,7377394:Var2,[])
link(Op2,876903:Var2,[])
}
Add(Math,16756407,475,318)
{
OpType=1
ResultType=0
link(onResult,16357683:doEvent1,[])
link(Op1,7377394:Var3,[(481,278)])
link(Op2,876903:Var3,[(488,292)])
}
Add(ArrayRW,8141205,356,318)
{
Point(Count)
link(onRead,13396544:doRepeat,[])
link(Array,8250339:getVar,[])
link(Index,13350876:Index,[(369,306)(337,306)(337,362)(306,362)])
}
Add(Edit,6388985,363,87)
{
Left=20
Top=10
Width=85
Text=""
DataType=1
link(onChange,4489149:doWork,[])
}
Add(Edit,2067103,580,388)
{
Left=110
Top=10
Width=85
Text=""
link(Str,3358455:Result,[])
}
Add(Button,1396319,307,31)
{
Left=80
Top=115
Caption="Convert"
link(onClick,1708955:doEvent1,[])
}
Add(StrList,6645552,230,73)
{
Strings=#1:M|2:IM|2:CM|1:D|2:ID|2:CD|1:C|2:IC|2:XC|1:L|2:IL|2:XL|1:X|2:IX|1:V|2:IV|1:I|
}
Add(ArrayEnum,13350876,293,318)
{
link(onItem,8141205:doRead,[])
link(onEndEnum,2067103:doText,[(346,331)(346,394)])
link(Array,15473903:getVar,[])
}
Add(GetDataEx,7377394,412,269)
{
link(Data,1401807:Value,[])
}
Add(LineBreakEx,7356317,356,234)
{
Caption="Dec"
Type=1
link(OnEvent,1401807:doValue,[])
}
Add(LineBreakEx,8502049,580,283)
{
Caption="Dec"
}
Add(Hub,16357683,524,318)
{
link(onEvent1,8502049:doWork,[(568,324)(568,289)])
link(onEvent2,3358455:doStrCat,[])
}
Add(InlineCode,4243737,678,220)
{
WorkPoints=#7:Convert|
EventPoints=#6:Result|
DataPoints=#6:Number|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|24: Number :THI_event;|24: Result :THI_event;|53: procedure Convert(var _Data:TData; Index:word);|5: end;|0:|14:implementation|0:|30:procedure THiAsmClass.Convert;|138:const Romans: Array[1..17] of String = ( 'I', 'IV', 'V', 'IX', 'X', 'XL','IL' ,'L', 'XC', 'IC', 'C', 'CD', 'ID', 'D', 'CM', 'IM', 'M' );|115: Arabics: Array[1..17] of Integer = ( 1, 4, 5, 9, 10, 40, 49, 50, 90, 99, 100, 400, 499, 500, 900, 999, 1000);|15:var i: Integer;|16: str: String;|21: Decimal: integer;|5:begin|42: Decimal := ReadInteger(_Data, Number);|14: str := '';|27: for i := 17 downto 1 do|47: while ( Decimal >= Arabics[i] ) do begin|42: Decimal := Decimal - Arabics[i];|33: str := str + Romans[i];|11: end;|29: _hi_onEvent(Result, str);|4:end;|0:|4:end.|
link(Result,1824510:doText,[])
link(Number,8132991:getVar,[])
}
Add(Edit,1824510,748,220)
{
Left=110
Top=35
Width=85
Text=""
}
Add(InlineCode,3594571,685,479)
{
WorkPoints=#7:Convert|
EventPoints=#6:Result|
DataPoints=#6:Number|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|24: Number :THI_event;|24: Result :THI_event;|53: procedure Convert(var _Data:TData; Index:word);|5: end;|0:|14:implementation|0:|30:procedure THiAsmClass.Convert;|138:const Romans: Array[1..17] of String = ( 'I', 'IV', 'V', 'IX', 'X', 'XL','IL' ,'L', 'XC', 'IC', 'C', 'CD', 'ID', 'D', 'CM', 'IM', 'M' );|115: Arabics: Array[1..17] of Integer = ( 1, 4, 5, 9, 10, 40, 49, 50, 90, 99, 100, 400, 499, 500, 900, 999, 1000);|17:var i,p: Integer;|16: str: String;|21: Decimal: integer;|5:begin|37: str := ReadString(_Data, Number);|17: Decimal := 0;|12: i := 17;|11: p := 1;|35: while p <= Length(str) do begin|66: while Copy(str, p, Length(Romans[i])) <> Romans[i] do begin|17: Dec(i);|29: if i = 0 then exit;|11: end;|39: Decimal := Decimal + Arabics[i];|34: p := p + Length(Romans[i]);|8: end;|33: _hi_onEvent(Result, Decimal);|4:end;|0:|4:end.|
link(Result,14239851:doText,[])
link(Number,14016710:getVar,[])
}
Add(Edit,14239851,748,479)
{
Left=110
Top=60
Width=85
Text=""
}
Add(LineBreakEx,14016710,685,451)
{
Caption="StrRom"
Type=2
}
Add(Length,7484826,258,570)
{
link(onLength,8230647:doRepeat,[])
link(Str,14307849:getVar,[])
}
Add(Repeat,8230647,314,570)
{
Type=3
link(onRepeat,1538578:doEnum,[])
link(Op1,11781999:Var2,[])
link(Op2,7484826:Result,[(327,558)(295,558)(295,614)(264,614)])
}
Add(Memory,9395163,314,486)
{
Default=Integer(1)
}
Add(Hub,12759300,167,556)
{
OutCount=5
link(onEvent1,9395163:doClear,[(257,562)(257,499)])
link(onEvent2,8487285:doWork,[])
link(onEvent3,7484826:doLength,[])
link(onEvent4,10987321:doText,[(229,583)(229,660)])
link(onEvent5,13896192:doWork,[(207,590)(207,632)])
}
Add(Edit,10987321,769,654)
{
Left=110
Top=85
Width=85
Text=""
link(Str,13054264:Var2,[])
}
Add(Copy,16245248,475,570)
{
link(onCopy,14355915:doCompare,[])
link(Str,2328923:getVar,[])
link(Position,9731661:Var2,[])
}
Add(Length,5631301,419,570)
{
link(onLength,16245248:doCopy,[])
}
Add(ArrayEnum,1538578,370,570)
{
link(onItem,5631301:doLength,[])
link(Array,5023251:getVar,[])
}
Add(LineBreakEx,1666871,643,521)
{
Caption="Arabic"
Type=2
}
Add(Hub,15513633,580,570)
{
OutCount=3
link(onEvent1,1538578:doStop,[(625,576)(625,632)(358,632)(358,583)])
link(onEvent2,14514076:doRead,[])
link(onEvent3,1116868:doOperation,[(631,590)(631,632)])
}
Add(If_else,14355915,531,570)
{
link(onTrue,15513633:doEvent1,[])
link(Op2,1538578:Item,[(544,558)(460,558)(460,614)(376,614)])
}
Add(Memory,5910536,769,577)
{
Default=Integer(0)
}
Add(LineBreakEx,2328923,475,521)
{
Caption="StrRom"
Type=2
}
Add(ArrayRW,14514076,643,577)
{
link(onRead,10078912:doOperation,[])
link(Array,1666871:getVar,[])
link(Index,1538578:Index,[(656,565)(520,565)(520,614)(383,614)])
}
Add(LineBreakEx,5023251,370,521)
{
Caption="Roman"
Type=2
}
Add(Math,10078912,713,577)
{
ResultType=0
link(onResult,5910536:doValue,[])
link(Op2,13054264:Var1,[(726,565)(748,565)(748,635)])
}
Add(Math,1116868,664,626)
{
ResultType=0
link(onResult,10253534:doWork,[])
link(Op1,9731661:Var3,[(670,544)])
link(Op2,5631301:Result,[(677,614)(425,614)])
}
Add(GetDataEx,11781999,307,535)
{
link(Data,9395163:Value,[])
}
Add(GetDataEx,9731661,475,535)
{
Angle=3
link(Data,11781999:Var3,[])
}
Add(LineBreakEx,606743,601,220)
{
Caption="Rom_02"
Type=1
link(OnEvent,4243737:Convert,[])
}
Add(LineBreakEx,14307849,258,521)
{
Caption="StrRom"
Type=2
}
Add(LineBreakEx,10253534,713,626)
{
Caption="_1"
}
Add(LineBreakEx,8119094,265,486)
{
Caption="_1"
Type=1
link(OnEvent,9395163:doValue,[])
}
Add(LineBreakEx,6356703,244,136)
{
Caption="Roman"
Type=3
link(_Data,6645552:Array,[])
}
Add(LineBreakEx,15473903,293,283)
{
Caption="Roman"
Type=2
}
Add(LineBreakEx,5333485,307,136)
{
Caption="Arabic"
Type=3
link(_Data,5682974:Array,[])
}
Add(LineBreakEx,8250339,356,283)
{
Caption="Arabic"
Type=2
}
Add(LineBreakEx,6302184,223,325)
{
Caption="Rom_02"
}
Add(LineBreakEx,3859516,720,521)
{
Caption="_5"
Type=2
}
Add(LineBreakEx,10524378,48,556)
{
Caption="RomToDec"
Type=1
link(OnEvent,12759300:doEvent1,[])
}
Add(LineBreakEx,1041828,412,38)
{
Caption="RomToDec"
}
Add(LineBreakEx,12122834,748,262)
{
Caption="StrRom"
Type=3
link(_Data,1824510:Text,[])
}
Add(LineBreakEx,10752741,713,612)
{
Caption="_2"
Type=1
link(OnEvent,5910536:doClear,[(757,618)(757,590)])
}
Add(LineBreakEx,8487285,216,563)
{
Caption="_2"
}
Add(LineBreakEx,15352514,223,311)
{
Caption="_9"
}
Add(LineBreakEx,5476782,580,367)
{
Caption="_9"
Type=1
link(OnEvent,237103:doClear,[(634,373)(634,338)])
}
Add(LineBreakEx,8045646,363,136)
{
Caption="StrDec"
Type=3
link(_Data,6388985:Text,[])
}
Add(LineBreakEx,8132991,678,192)
{
Caption="StrDec"
Type=2
}
Add(LineBreakEx,13244240,608,479)
{
Caption="Dec_02"
Type=1
link(OnEvent,3594571:Convert,[])
}
Add(LineBreakEx,13896192,216,626)
{
Caption="Dec_02"
}
Add(LineBreakEx,4489149,412,87)
{
Caption="Dec"
}
Add(GetDataEx,876903,419,283)
{
Angle=3
link(Data,8141205:Item,[(395,292)(395,362)(362,362)])
}
Add(InfoTip,8355087,139,178)
{
Info=#0:|14:DecimalToRoman|
Font=[MS Sans Serif,10,1,8388608,1]
Frame=3
Width=680
Height=256
}
Add(InfoTip,871259,139,444)
{
Info=#0:|14:RomanToDecimal|
Font=[MS Sans Serif,10,1,128,1]
Frame=3
Width=680
Height=270
}
Add(Hub,1708955,356,31)
{
link(onEvent1,9762113:doWork,[(400,37)(400,30)])
link(onEvent2,1041828:doWork,[])
}
Add(LineBreakEx,4575409,48,311)
{
Caption="DecToRom"
Type=1
link(OnEvent,12748134:doEvent1,[])
}
Add(LineBreakEx,9762113,412,24)
{
Caption="DecToRom"
}
Add(GetDataEx,13054264,762,626)
{
link(Data,5910536:Value,[])
}


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


iarspider писал(а):
"XCIX" - верная запись для 99, "IC" - нет
Не понял, это что, Tad ошибся, что ли? Он то, должен лучше знать.
------------ Дoбавленo:

iarspider писал(а):
Кто-нить решил 3ю задачу?
Ты бы матрицы коров выложил для чистоты эксперимента, их что самому выдумывать, что ли
------------ Дoбавленo:

iarspider, ты следующий раз укомплектовывай задачи начальными данными и упрости постановку задачи конкретным алгоритмом с простым выводом данных, и не в файл, а на экран, так гораздо проще и понятнее будет.
карма: 22

0