Вверх ↑
Разработчик
Ответов: 26066
Рейтинг: 2120
#1: 2008-02-09 15:49:48 ЛС | профиль | цитата
iarspider писал(а):
Да, а в чём моя хитрость-то
В обратном конверторе (каюсь , тоже попался на невнимательном чтении, подсознательно думал, что ты народу проще задачу задал), он немного сложнее, но тоже, вполне реализуем.

Вот продолжение разборок с первой задачей (пока обратное преобразование только в IC)



Add(MainForm,280613,98,84)
{
Left=20
Top=105
Width=221
Height=152
Caption="DecimalToRoman"
Position=1
}
Add(IntegerArray,5682974,294,77)
{
IntArray=['M'=1000,'CM'=900,'D'=500,'CD'=400,'C'=100,'XC'=90,'L'=50,'Xl'=40,'X'=10,'IX'=9,'V'=5,'IV'=4,'I'=1]
FileFormat=1
}
Add(Memory,237103,448,126)
{
Default=String()
}
Add(Hub,12748134,147,133)
{
OutCount=4
link(onEvent1,237103:doClear,[])
link(onEvent2,13350876:doEnum,[])
link(onEvent3,4243737:Convert,[(195,153)(195,391)])
link(onEvent4,3594571:Convert,[(195,160)(195,447)])
}
Add(StrCat,3358455,448,294)
{
link(onStrCat,237103:doValue,[(492,300)(492,216)(436,216)(436,132)])
link(Str1,237103:Value,[])
link(Str2,13350876:Item,[(461,193)(209,193)])
}
Add(Memory,1401807,287,203)
{
}
Add(Repeat,13396544,287,287)
{
Type=4
link(onRepeat,16756407:doOperation,[])
link(Op1,7377394:Var2,[])
link(Op2,16082805:Var2,[])
}
Add(Math,16756407,343,287)
{
OpType=1
ResultType=0
link(onResult,16357683:doEvent1,[])
link(Op1,7377394:Var3,[(349,247)])
link(Op2,16082805:Var3,[(356,261)])
}
Add(ArrayRW,8141205,294,140)
{
link(onRead,13396544:doRepeat,[(338,146)(338,220)(255,220)(255,293)])
link(Array,5682974:Array,[])
link(Index,13350876:Index,[(307,128)(261,128)(261,184)(216,184)])
}
Add(Edit,6388985,210,203)
{
Left=20
Top=10
Width=85
Text=""
DataType=1
link(onChange,8569447:doWork2,[])
}
Add(Edit,2067103,448,343)
{
Left=110
Top=10
Width=85
Text=""
link(Str,3358455:Result,[])
}
Add(Button,1396319,98,133)
{
Left=80
Top=90
Caption="Convert"
link(onClick,12748134:doEvent1,[])
}
Add(StrList,6645552,189,63)
{
Strings=#1:M|2:CM|1:D|2:CD|1:C|2:XC|1:L|2:XL|1:X|2:IX|1:V|2:IV|1:I|
}
Add(ArrayEnum,13350876,203,140)
{
link(onItem,8141205:doRead,[])
link(onEndEnum,2067103:doText,[(369,153)(369,349)])
link(Array,6645552:Array,[])
}
Add(GetDataEx,7377394,280,238)
{
link(Data,1401807:Value,[])
}
Add(GetDataEx,16082805,287,252)
{
link(Data,8141205:Item,[])
}
Add(HubEx,8569447,259,196)
{
link(onEvent,1401807:doValue,[])
}
Add(Hub,16357683,392,287)
{
link(onEvent1,8569447:doWork3,[(436,293)(436,253)(263,253)])
link(onEvent2,3358455:doStrCat,[])
}
Add(InlineCode,4243737,210,385)
{
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;|115:const Romans: Array[1..13] of String = ( 'I', 'IV', 'V', 'IX', 'X', 'XL', 'L', 'XC', 'C', 'CD', 'D', 'CM', 'M' );|97: Arabics: Array[1..13] of Integer = ( 1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000);|15:var i: Integer;|16: str: String;|21: Decimal: integer;|5:begin|42: Decimal := ReadInteger(_Data, Number);|14: str := '';|27: for i := 13 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,6388985:Text,[])
}
Add(Edit,1824510,448,385)
{
Left=110
Top=35
Width=85
Text=""
}
Add(InlineCode,3594571,448,441)
{
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;|115:const Romans: Array[1..13] of String = ( 'I', 'IV', 'V', 'IX', 'X', 'XL', 'L', 'XC', 'C', 'CD', 'D', 'CM', 'M' );|97: Arabics: Array[1..13] of Integer = ( 1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000);|17:var i,p: Integer;|16: str: String;|21: Decimal: integer;|5:begin|37: str := ReadString(_Data, Number);|17: Decimal := 0;|12: i := 13;|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,1824510:Text,[])
}
Add(Edit,14239851,518,441)
{
Left=110
Top=60
Width=85
Text=""
}

карма: 22

0