------------ Дoбавленo:
Вот пример с исправлениями, и ничего сложного там нет:
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,'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,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: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,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;|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,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;|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,1824510:Text,[])
}
Add(Edit,14239851,518,441)
{
Left=110
Top=60
Width=85
Text=""
}
А с черточками непонятно, как это можно реализовать, у нас ведь нет надчеркивания, придется ограничиться 4999.
------------ Дoбавленo:
Так что, желающих закончить алгоритмизацию первой задачи нет?
Пойду , побъю компьютерные моськи, если через пару часов никто не доделает, закончу сам (для интереса).