Вверх ↑
Ответов: 9906
Рейтинг: 351
#1: 2017-05-26 06:27:21 ЛС | профиль | цитата
Секундомер недолго и поставить ...

IC с секундомером

Add(MainForm,7286687,203,91)
{
Position=1
link(onCreate,5754919:doWork2,[])
}
Add(InlineCode,9695677,336,105)
{
@Hint=#23:doStart - Инициализация|26:doCalc - Делением пополам|28:doTest - Пустышка для теста|24:doCalc1 - Полный перебор|
WorkPoints=#7:doStart|6:doCalc|6:doTest|7:doCalc1|
EventPoints=#4:onIs|4:onNo|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses kol,Share,Windows,Debug;|0:|4:type|28: TStrArr = Array of string;|29: THiAsmClass = class(TDebug)|9: private|18: _Arr: TStrArr;|19: _Numb: integer;|8: public|24: onIs,onNo:THI_Event;|51: procedure doStart(var _Data:TData; Index:word);|51: procedure doCalc (var _Data:TData; Index:word);|51: procedure doTest (var _Data:TData; Index:word);|51: procedure doCalc1(var _Data:TData; Index:word);|6: end;|0:|0:|14:implementation|0:|16:uses hiStr_Enum;|0:|39:function LStrCmp(S1,S2:string):integer;|3:asm|23: CMP EAX,EDX|22: JE @@Exit|23: TEST EAX,EAX|22: JE @@Exit|23: TEST EDX,EDX|22: JE @@Exit|19: PUSH ESI|19: PUSH EDI|23: MOV ESI,EAX|23: MOV EDI,EDX|27: MOV EAX,[ESI-4]|27: MOV ECX,[EDI-4]|23: SUB EAX,ECX|19: JA @@1|23: ADD ECX,EAX|23:@@1: XOR EDX,EDX|21: REPE CMPSB|23: JE @@equal|23: XOR EAX,EAX|26: MOV AL,[ESI-1]|26: MOV DL,[EDI-1]|19:@@equal: POP EDI|19: POP ESI|23:@@exit: SUB EAX,EDX|4:end;|0:|38:function StrCmp(S1,S2:string):integer;|3:asm|23: Call System.@LStrCmp|13: MOV EAX,0|10: SETA AL|13: SBB EAX,0|4:end;|0:|29:procedure THiAsmClass.doCalc;|20:var i,j,k,l:integer;|14: ss:string;|5:begin|24: ss := ToString(_Data);|36: _hi_CreateEvent(_Data, @onIs, ss);|23: i := 0; j := _Numb-1;|28: k := LStrCmp(_Arr[i], ss);|28: l := LStrCmp(_Arr[j], ss);|28: if (k=0)or(l=0) then exit;|46: if (k<0)and(l>0) then while (j-i)>1 do begin|21: k := (i+j) div 2;|30: l := LStrCmp(_Arr[k], ss);|21: if l=0 then exit;|22: if l>0 then j := k|16: else i := k;|6: end;|36: _hi_CreateEvent(_Data, @onNo, ss);|4:end;|0:|29:procedure THiAsmClass.doTest;|5:begin|33: _hi_CreateEvent_(_Data, @onNo);|4:end;|0:|30:procedure THiAsmClass.doCalc1;|14:var i:integer;|14: ss:string;|5:begin|24: ss := ToString(_Data);|36: _hi_CreateEvent(_Data, @onIs, ss);|61: for i:=0 to _Numb-1 do if LStrCmp(ss, _Arr[i])=0 then exit;|36: _hi_CreateEvent(_Data, @onNo, ss);|4:end;|0:|65:procedure SwapStr(const Sender: Pointer; const e1, e2: Cardinal);|24:var A:TStrArr; s:string;|5:begin|23: A := TStrArr(Sender);|41: s := A[e1]; A[e1] := A[e2]; A[e2] := s;|4:end;|0:|73:function CompStr(const Sender: Pointer; const e1, e2: Cardinal): integer;|14:var A:TStrArr;|5:begin|23: A := TStrArr(Sender);|34: Result := LStrCmp(A[e1], A[e2]);|4:end;|0:|30:procedure THiAsmClass.doStart;|15: var i:integer;|15: ss:string;|5:begin|25: ss := ToString(_Data);|35: _Numb:= str2int(FParse(ss,'#'));|26: SetLength(_Arr, _Numb);|52: for i:=0 to _Numb-1 do _Arr[i] := FParse(ss,'#');|45: SortData(_Arr, _Numb, @CompStr, @SwapStr);|4:end;|0:|4:end.|
link(onIs,1499927:doAdd,[(375,111)(375,62)])
link(onNo,113941:doAdd,[])
AddHint(-130,-78,149,52,@Hint)
}
Add(Button,13042983,56,182)
{
Left=15
Top=51
Caption="10000"
link(onClick,12861570:doEvent1,[])
}
Add(For,7194033,203,189)
{
End=20000
IncludeEnd=1
link(onEvent,16175481:doWork2,[])
link(onStop,8471842:doStop,[(249,202)(249,230)(137,230)(137,202)])
}
Add(MultiElement,5390066,273,105)
{
link(onEvent1,9695677:doStart,[])
}
BEGIN_SDK
Add(EditMulti,5544467,21,21)
{
EventCount=1
WorkCount=1
VarCount=1
Width=363
Height=158
VOffset=14
HOffset=63
link(doWork1,8491383:doEvent1,[])
link(Var1,12960271:Position,[])
}
Add(For,12960271,84,63)
{
End=10000
IncludeEnd=1
MakeExt(End,Количество эталонов,WordCount)
link(onEvent,3200883:doFor,[])
link(onStop,16346339:doStrCatDlm,[(130,76)(130,125)])
}
Add(For,3200883,140,63)
{
End=5
IncludeEnd=1
MakeExt(End,Длина слова,WordLength)
link(onEvent,16652732:doRandom,[])
link(onStop,11942152:doData,[(179,76)(179,111)])
}
Add(StrCat,12136332,315,63)
{
Point(doClear)
link(Str1,11288868:Var1,[(321,54)(307,54)(307,103)])
}
Add(Random,16652732,196,63)
{
Min=224
Max=255
link(onRandom,10450224:doConvert,[])
}
Add(Convertor,10450224,245,63)
{
Mode=4
link(onResult,8615578:doWork2,[])
}
Add(GetDataEx,11288868,315,98)
{
link(Data,12136332:Result,[])
}
Add(Hub,8491383,49,35)
{
OutCount=3
link(onEvent1,12136332:doClear,[(298,41)(298,76)])
link(onEvent2,16652732:doRandomize,[(186,48)(186,76)])
link(onEvent3,12960271:doFor,[(74,55)(74,69)])
}
Add(StrCatDelim,16346339,308,119)
{
Delimiter="#"
link(onStrCatDlm,5544467:onEvent1,[(361,125)(361,41)])
link(Str2,11288868:Var2,[])
}
Add(DoData,11942152,196,105)
{
Data=String(#)
link(onEventData,8615578:doWork3,[(291,111)])
}
Add(HubEx,8615578,287,63)
{
link(onEvent,12136332:doStrCat,[])
}
END_SDK
Add(MultiElement,16175481,266,182)
{
link(onEvent1,9695677:doCalc,[(312,188)(312,118)])
link(onEvent2,9695677:doTest,[(319,195)(319,125)])
link(onEvent3,9695677:doCalc1,[(326,202)(326,132)])
}
BEGIN_SDK
Add(EditMulti,13590876,21,21)
{
EventCount=3
WorkCount=2
Width=314
Height=144
VOffset=28
link(doWork1,2595334:doValue,[(53,55)(53,48)])
link(doWork2,5653973:doEvent1,[])
}
Add(StrCat,14447935,217,63)
{
Point(doClear)
link(Str1,6323536:Var1,[(223,54)(209,54)(209,103)])
}
Add(Random,112672,119,63)
{
Min=224
Max=255
link(onRandom,7038619:doConvert,[])
}
Add(Convertor,7038619,161,63)
{
Mode=4
link(onResult,14447935:doStrCat,[])
}
Add(DoData,1245030,217,119)
{
link(onEventData,14423728:doEvent,[])
link(Data,6323536:Var2,[])
}
Add(GetDataEx,6323536,217,98)
{
link(Data,14447935:Result,[])
}
Add(For,7285298,63,63)
{
End=5
IncludeEnd=1
MakeExt(End,Длина слова,WordLength)
link(onEvent,112672:doRandom,[])
link(onStop,1245030:doData,[(109,76)(109,125)])
}
Add(Hub,5653973,35,56)
{
link(onEvent1,14447935:doClear,[(200,62)(200,76)])
link(onEvent2,7285298:doFor,[])
}
Add(IndexToChanel,14423728,266,119)
{
Count=3
Point(Index)
link(onEvent1,13590876:onEvent1,[(305,125)(305,55)])
link(onEvent2,13590876:onEvent2,[(312,132)(312,62)])
link(Index,2595334:Value,[])
link(onEvent3,13590876:onEvent3,[(319,139)(319,69)])
}
Add(Memory,2595334,266,42)
{
Default=Integer(0)
}
END_SDK
Add(Label,1896650,532,161)
{
Left=135
Top=5
Width=31
Height=17
Caption="Есть!"
}
Add(Label,3720396,532,217)
{
Left=240
Top=5
Width=23
Height=17
Caption="Нет"
}
Add(Memo,15443129,483,161)
{
Left=90
Top=25
Width=100
Height=200
ScrollBars=2
}
Add(Memo,3293135,483,217)
{
Left=220
Top=25
Width=95
Height=200
ScrollBars=2
}
Add(Hub,12861570,105,182)
{
OutCount=3
link(onEvent1,3813973:doEvent1,[(193,188)(193,160)])
link(onEvent2,8471842:doStart,[])
link(onEvent3,2901245:doEvent1,[(130,202)(130,237)])
}
Add(Hub,3813973,364,154)
{
link(onEvent1,1499927:doClear,[(389,160)(389,69)])
link(onEvent2,113941:doClear,[(396,167)(396,125)])
}
Add(StrList,1499927,399,56)
{
}
Add(StrList,113941,420,112)
{
}
Add(DoData,15977997,399,182)
{
link(onEventData,15443129:doText,[])
link(Data,1499927:Text,[])
}
Add(DoData,5717497,420,238)
{
link(onEventData,3293135:doText,[])
link(Data,113941:Text,[])
}
Add(Hub,2901245,336,231)
{
OutCount=3
link(onEvent1,15977997:doData,[(361,237)(361,188)])
link(onEvent2,5717497:doData,[])
link(onEvent3,5201381:doString,[(361,251)(361,300)])
}
Add(Label,16264451,532,294)
{
Left=5
Top=230
Height=20
}
Add(FormatStr,5201381,441,294)
{
DataCount=4
Mask="Из %1 слов совпало с одним из %2 эталонов %4, не совпало %3"
link(onFString,16264451:doText,[])
link(Str1,7194033:Position,[(447,285)(209,285)])
link(Str2,5390066:Var1,[(454,278)(279,278)])
link(Str3,113941:Count,[(461,173)(433,173)])
link(Str4,1499927:Count,[(468,103)(412,103)])
}
Add(Button,13195911,133,56)
{
Left=15
Top=22
Caption="Эталон"
link(onClick,5754919:doWork1,[(249,62)])
}
Add(HubEx,5754919,245,105)
{
link(onEvent,5390066:doWork1,[])
}
Add(TimeCounter,8471842,147,189)
{
Precision=1
link(onStart,7194033:doFor,[])
link(onStop,7286687:doCaption,[(186,202)(186,97)])
}
Add(RadioButton,10072872,56,56)
{
Left=14
Top=98
Selected=0
Caption="FAST"
link(onSelect,14021113:doWork1,[(109,62)(109,132)])
}
Add(RadioButton,15557680,56,98)
{
Left=14
Top=126
Caption="Test"
link(onSelect,14021113:doWork2,[(102,104)(102,139)])
}
Add(RadioButton,4133740,56,140)
{
Left=14
Top=154
Caption="ENUM"
link(onSelect,14021113:doWork3,[])
}
Add(ChanelToIndex,14021113,133,126)
{
Count=3
link(onIndex,16175481:doWork1,[(242,132)(242,188)])
}
[/scroll]
карма: 9

1
Голосовали:ser_davkin
Редактировалось 3 раз(а), последний 2017-05-31 13:49:17