Вверх ↑
Этот топик читают: Гость
Ответов: 817
Рейтинг: 52
#1: 2017-05-25 20:05:56 ЛС | профиль | цитата
Предположим, что необходимо постоянно сравнивать вводимые (поступающие) данные с заранее определенными.
Данных много, более сотни.
Возникает вопрос, как лучше оптимизировать этот процесс что бы было быстро, потребляло мало ресурсов и размер программы был не велик?
Я пока знаю два способа:
1. Выставить подряд кучу Case (пример в схеме)
Add(MainForm,2953706,91,168)
{
}
Add(Case,4256534,294,168)
{
Value=String(Вася)
DataOnTrue=String(Совпало 1)
link(onNextCase,14165110:doCase,[])
link(onTrue,7752635:doWork2,[(339,181)(339,230)])
}
Add(Case,14165110,350,168)
{
Value=String(Петя)
DataOnTrue=String(Совпало 2)
link(onNextCase,9037818:doCase,[])
link(onTrue,7752635:doWork1,[(396,181)])
}
Add(Case,9037818,399,168)
{
Value=String(Данные)
DataOnTrue=String(Совпало 3)
link(onNextCase,11454643:doCase,[])
link(onTrue,5418488:doWork1,[(445,181)])
}
Add(Button,6047939,217,168)
{
Left=55
Top=45
Data=String(Данные)
link(onClick,4256534:doCase,[])
}
Add(Case,11454643,455,168)
{
Value=String(Саша)
DataOnTrue=String(Совпало 4)
link(onTrue,12238575:doWork1,[(515,181)])
}
Add(Message,15623289,560,224)
{
}
Add(HubEx,7752635,392,224)
{
link(onEvent,5418488:doWork2,[])
}
Add(HubEx,5418488,441,224)
{
link(onEvent,12238575:doWork2,[])
}
Add(HubEx,12238575,511,224)
{
link(onEvent,15623289:doMessage,[])
}
2. Каждый раз перебирать массив (пример в схеме)
Add(MainForm,2953706,91,168)
{
}
Add(Button,6047939,196,189)
{
Left=55
Top=45
Data=String(Данные)
link(onClick,5856751:doValue,[])
}
Add(ArrayEnum,14606484,336,189)
{
link(onItem,8127400:doCompare,[])
link(Array,6019312:Array,[(342,163)(356,163)])
}
Add(StrList,6019312,336,91)
{
Strings=#4:Вася|4:Петя|6:Данные|4:Саша|
}
Add(If_else,8127400,392,189)
{
link(onTrue,10090599:doMessage,[])
link(Op2,5856751:Value,[(405,177)(436,177)(436,235)(272,235)])
}
Add(Memory,5856751,266,189)
{
link(onData,14606484:doEnum,[])
}
Add(Message,10090599,469,189)
{
Caption="Совпало"
}
Кто что скажет по этому поводу?
Какой вариант оптимальней?
Может вы предложите свое решение?

Редактировалось 3 раз(а), последний 2017-05-25 20:08:47
карма: 1

0
Ответов: 2236
Рейтинг: 676
#2: 2017-05-25 21:18:17 ЛС | профиль | цитата
-= DriveR =- писал(а):
Какой вариант оптимальней?
Посколько помню по скорости выполнения рейтинг такой:
1. IC.
2. FTCG.
3. Case.
4. IF.
5. Массив.
Сейчас придут товарищи с секундомерами и если что поправят.

-= DriveR =- писал(а):
Может вы предложите свое решение?

FTCG

Add(MainForm,2953706,329,259)
{
Width=455
Height=318
Position=1
}
Add(FTCG_Tools,7409110,329,301)
{
link(onFind,10090599:doMessage,[])
link(onNotFind,15716397:doMessage,[(380,314)(380,349)])
}
BEGIN_SDK
Add(EditMultiEx,6371240,21,21)
{
WorkCount=#6:doFind|
EventCount=#6:onFind|9:onNotFind|
Width=531
Height=410
link(doFind,11959883:doEvent1,[])
}
Add(StrArray,549744,210,105)
{
Strings=#4:Петя|4:Вася|6:Данные|4:Коля|4:Саня|4:Таня|
MakeExt(Strings,Строки для поиска,Массив)
}
Add(ArrayRead,16425208,210,168)
{
link(onRead,16499349:doCompare,[])
link(Array,549744:Array,[])
link(Index,5774943:Var1,[(223,156)(251,156)])
}
Add(FT_For,10343322,147,224)
{
End=5
link(onEvent,16425208:doRead,[(195,230)(195,174)])
link(onStop,13867951:doData,[])
}
Add(FT_If_else,16499349,266,168)
{
link(onTrue,2408622:doEvent1,[])
link(Op1,12071955:Value,[])
}
Add(FT_Memory,12071955,266,21)
{
}
Add(FT_Hub,2408622,329,168)
{
link(onEvent1,113000:doData,[])
link(onEvent2,10343322:doStop,[(357,181)(357,284)(135,284)(135,237)])
}
Add(FT_DoData,113000,364,168)
{
link(onEventData,6371240:onFind,[(474,174)(474,27)])
link(Data,5774943:Var3,[(370,154)(315,154)(315,212)])
}
Add(GetDataEx,5774943,245,207)
{
Angle=3
link(Data,10343322:Position,[(153,212)])
}
Add(FT_Hub,11959883,56,21)
{
link(onEvent1,12071955:doValue,[])
link(onEvent2,10343322:doFor,[(108,34)(108,230)])
}
Add(FT_If_else,12497499,294,231)
{
Op2=Integer(6)
link(onTrue,6371240:onNotFind,[(439,237)(439,34)])
}
Add(FT_DoData,13867951,245,231)
{
link(onEventData,12497499:doCompare,[])
link(Data,5774943:Var2,[])
}
END_SDK
Add(Button,6047939,273,301)
{
Left=195
Top=105
Caption="Данные"
Data=String(Данные)
link(onClick,8910155:doWork2,[])
}
Add(Message,10090599,385,301)
{
Caption="Совпало"
}
Add(Message,15716397,385,343)
{
Caption="Не совпало"
}
Add(Button,46316,273,343)
{
Left=195
Top=140
Caption="Test"
Data=String(Test)
link(onClick,8910155:doWork3,[(319,349)])
}
Add(HubEx,8910155,315,301)
{
link(onEvent,7409110:doFind,[])
}

Редактировалось 2 раз(а), последний 2017-05-25 21:25:14
карма: 11

0
Ответов: 817
Рейтинг: 52
#3: 2017-05-25 21:25:04 ЛС | профиль | цитата
sla8a, Ага, понял.
Получается постоянный перебор массива но....
эээ...
как это по русски....
при использовании быстрых компонентов.
sla8a писал(а):
Посколько помню по скорости выполнения рейтинг такой:

Хм...
Я почему то всегда думал, что Case это самое медленное, даже медленнее массивов

Редактировалось 1 раз(а), последний 2017-05-25 21:32:47
карма: 1

0
Ответов: 16884
Рейтинг: 1239
#4: 2017-05-25 21:27:42 ЛС | профиль | цитата

Add(MainForm,2953706,385,147)
{
}
Add(Button,6047939,385,189)
{
Left=55
Top=45
Caption="Оля"
Data=String(Оля)
link(onClick,16737107:doWork2,[])
}
Add(StrList,6019312,511,147)
{
Strings=#4:Вася|4:Петя|6:Данные|4:Саша|
Point(doGetIndex)
Point(onGetIndex)
link(onGetIndex,8127400:doCompare,[])
}
Add(If_else,8127400,581,154)
{
Op2=Integer(-1)
link(onTrue,13440730:doData,[])
link(onFalse,5116382:doData,[])
}
Add(DoData,13440730,686,154)
{
Data=String(Нет)
link(onEventData,4849638:doWork2,[])
}
Add(DoData,5116382,637,161)
{
Data=String(Есть)
link(onEventData,4849638:doWork3,[(732,167)])
}
Add(HubEx,4849638,728,154)
{
link(onEvent,10090599:doMessage,[])
}
Add(Message,10090599,749,154)
{
Caption="Совпадение"
}
Add(Button,12490965,385,231)
{
Left=55
Top=75
Caption="Данные"
Data=String(Данные)
link(onClick,16737107:doWork3,[(459,237)])
}
Add(HubEx,16737107,455,189)
{
link(onEvent,6019312:doGetIndex,[])
}


--- Добавлено в 2017-05-25 21:30:30

sla8a писал(а):
3. Case.
4. IF.
Может быть и такой рейтинг, но не у нас.
У нас Case работает как If

Редактировалось 1 раз(а), последний 2017-05-25 21:30:30
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 817
Рейтинг: 52
#5: 2017-05-25 21:35:03 ЛС | профиль | цитата
Tad, Прикольный вариант, и главное простой.
Буду пробовать сравнивать по скорости с вариантом sla8a,
карма: 1

0
Ответов: 16884
Рейтинг: 1239
#6: 2017-05-25 22:03:16 ЛС | профиль | цитата
Вопрос нужно задавать правильно.
-= DriveR =- писал(а):
Предположим, что необходимо постоянно сравнивать вводимые (поступающие) данные с заранее определенными.
Данных много, более сотни.
Каких "более сотни" вводимых или заранее определённых ?
Где хранятся "заранее определённые" ? и т.д. и т.п.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 8921
Рейтинг: 823
#7: 2017-05-26 00:57:01 ЛС | профиль | цитата
sla8a писал(а):
придут товарищи с секундомерами

Здесь мы, здесь
IC без секундомера


Add(MainForm,2953706,350,77)
{
link(onCreate,5754919:doWork2,[])
}
Add(InlineCode,9695677,567,154)
{
WorkPoints=#7:doStart|6:doCalc|
EventPoints=#4:onIs|4:onNo|
VarPoints=#
DataPoints=#
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses kol,Share,Windows,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|0:|10: private|26: _Arr: Array of string;|19: _Numb: integer;|9: public|25: _data_Data:THI_Event;|20: onIs:THI_Event; |19: onNo:THI_Event;|4: |52: procedure doStart(var _Data:TData; Index:word); |51: procedure doCalc(var _Data:TData; Index:word); |5: end;|38: |21: |14:implementation|0:|2: |29:procedure THiAsmClass.doCalc;|16:var i,j:integer;|27: ss:string; |5:begin|23: ss:=ToString(_Data);|8: j:=0;|24: for i:=0 to _Numb do|10: begin|25: if ss=_Arr[i] then|13: begin|31: _hi_onEvent(onIs, ss);|14: j:=1;|15: break;|12: end;|9: end;|40: if j=0 then _hi_onEvent(onNo, ss); |4:end;|0:|30:procedure THiAsmClass.doStart;|15: var i:integer;|28: ss:string; |5:begin|24: ss:=ToString(_Data);|37: _Numb:= str2int(Parse(ss,'#'))-1;|29: SetLength(_Arr, _Numb+1);|66: for i:=0 to _Numb do _Arr[i]:=Parse(ss,'#'); |4:end;|0:|4:end.|
link(onIs,1499927:doAdd,[(606,160)(606,97)])
link(onNo,113941:doAdd,[])
}
Add(StrList,9007008,455,91)
{
}
Add(Button,13042983,350,196)
{
Left=15
Top=65
Caption="10000"
link(onClick,12861570:doEvent1,[])
}
Add(Replace,494918,511,154)
{
SubStr="\13\10"
DestStr="#"
link(onReplace,9695677:doStart,[])
}
Add(FormatStr,1325957,455,154)
{
Mask="%2#%1"
link(onFString,494918:doReplace,[])
link(Str1,9007008:Text,[])
link(Str2,15904293:Var2,[])
}
Add(For,7194033,448,203)
{
End=9999
link(onEvent,16175481:doWork1,[])
link(onStop,2901245:doEvent1,[(487,216)(487,251)])
}
Add(MultiElement,5390066,399,91)
{
link(onEvent1,9007008:doAdd,[])
link(onEvent2,9007008:doClear,[])
link(onEvent3,1325957:doString,[(445,111)(445,160)])
}
BEGIN_SDK
Add(EditMulti,5544467,21,21)
{
EventCount=3
WorkCount=1
Width=363
Height=137
link(doWork1,8491383:doEvent1,[(39,27)(39,41)])
}
Add(For,12960271,84,56)
{
End=99
link(onEvent,3200883:doFor,[])
link(onStop,5544467:onEvent3,[(123,69)(123,41)])
}
Add(For,3200883,140,56)
{
End=2
link(onEvent,16652732:doRandom,[])
link(onStop,7668263:doEvent1,[(179,69)(179,118)])
}
Add(StrCat,12136332,294,56)
{
Point(doClear)
link(Str1,11288868:Var1,[(300,47)(286,47)(286,96)])
}
Add(Random,16652732,196,56)
{
Min=224
Max=255
link(onRandom,10450224:doConvert,[])
}
Add(Convertor,10450224,238,56)
{
Mode=4
link(onResult,12136332:doStrCat,[])
}
Add(DoData,11942152,294,112)
{
link(onEventData,5544467:onEvent1,[(354,118)(354,27)])
link(Data,11288868:Var2,[])
}
Add(GetDataEx,11288868,294,91)
{
link(Data,12136332:Result,[])
}
Add(Hub,7668263,252,112)
{
link(onEvent1,11942152:doData,[])
link(onEvent2,12136332:doClear,[(277,125)(277,69)])
}
Add(Hub,8491383,49,35)
{
OutCount=3
link(onEvent1,5544467:onEvent2,[(95,41)(95,34)])
link(onEvent2,16652732:doRandomize,[(186,48)(186,69)])
link(onEvent3,12960271:doFor,[(74,55)(74,62)])
}
END_SDK
Add(MultiElement,16175481,511,203)
{
link(onEvent1,9695677:doCalc,[(550,209)(550,167)])
}
BEGIN_SDK
Add(EditMulti,13590876,21,21)
{
EventCount=1
WorkCount=1
link(doWork1,7285298:doFor,[(53,27)(53,55)])
}
Add(StrCat,14447935,217,49)
{
Point(doClear)
link(Str1,6323536:Var1,[(223,40)(209,40)(209,89)])
}
Add(Random,112672,119,49)
{
Min=224
Max=255
link(onRandom,7038619:doConvert,[])
}
Add(Convertor,7038619,161,49)
{
Mode=4
link(onResult,14447935:doStrCat,[])
}
Add(DoData,1245030,217,105)
{
link(onEventData,13590876:onEvent1,[(256,111)(256,27)])
link(Data,6323536:Var2,[])
}
Add(GetDataEx,6323536,217,84)
{
link(Data,14447935:Result,[])
}
Add(Hub,11226280,175,105)
{
link(onEvent1,1245030:doData,[])
link(onEvent2,14447935:doClear,[(200,118)(200,62)])
}
Add(For,7285298,63,49)
{
End=2
link(onEvent,112672:doRandom,[])
link(onStop,11226280:doEvent1,[(109,62)(109,111)])
}
END_SDK
Add(Label,1896650,749,203)
{
Left=135
Top=5
Width=31
Height=17
Caption="Есть!"
}
Add(Label,3720396,749,259)
{
Left=240
Top=5
Width=23
Height=17
Caption="Нет"
}
Add(Memo,15443129,707,196)
{
Left=90
Top=25
Width=100
Height=200
ScrollBars=2
}
Add(Memo,3293135,707,252)
{
Left=220
Top=25
Width=95
Height=200
ScrollBars=2
}
Add(Hub,12861570,406,196)
{
link(onEvent1,3813973:doEvent1,[])
link(onEvent2,7194033:doFor,[])
}
Add(Hub,3813973,581,196)
{
link(onEvent1,1499927:doClear,[(613,202)(613,104)])
link(onEvent2,113941:doClear,[(620,209)(620,174)])
}
Add(StrList,1499927,623,91)
{
}
Add(StrList,113941,644,161)
{
}
Add(DoData,15977997,623,217)
{
link(onEventData,15443129:doText,[])
link(Data,1499927:Text,[])
}
Add(DoData,5717497,644,273)
{
link(onEventData,3293135:doText,[])
link(Data,113941:Text,[])
}
Add(Hub,2901245,567,245)
{
OutCount=3
link(onEvent1,15977997:doData,[(599,251)(599,223)])
link(onEvent2,5717497:doData,[(634,258)(634,279)])
link(onEvent3,5201381:doString,[(592,265)(592,335)])
}
Add(Label,16264451,714,329)
{
Left=5
Top=230
Height=20
}
Add(FormatStr,5201381,665,329)
{
DataCount=4
Mask="Из %1 слов совпало с одним из %2 эталонов %3, не совпало %4"
link(onFString,16264451:doText,[])
link(Str1,7194033:Position,[(671,320)(454,320)])
link(Str2,15904293:Var3,[(678,313)(559,313)(559,145)])
link(Str3,1499927:Count,[(685,152)(636,152)])
link(Str4,113941:Count,[(692,264)(657,264)])
}
Add(GetDataEx,15904293,462,140)
{
link(Data,9007008:Count,[])
}
Add(Button,13195911,350,119)
{
Left=15
Top=15
Caption="Эталон"
link(onClick,5754919:doWork3,[(389,125)])
}
Add(HubEx,5754919,385,91)
{
link(onEvent,5390066:doWork1,[])
}

карма: 19

0
Ответов: 9906
Рейтинг: 351
#8: 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]

[color=gray][size=9]Редактировалось 3 раз(а), последний 2017-05-31 13:49:17[/size][/color]
карма: 9

1
Голосовали:ser_davkin
Ответов: 8921
Рейтинг: 823
#9: 2017-05-26 09:38:04 ЛС | профиль | цитата
Galkov писал(а):
недолго и поставить

карма: 19

0
Ответов: 817
Рейтинг: 52
#10: 2017-05-26 15:06:39 ЛС | профиль | цитата
Tad писал(а):
Каких "более сотни" вводимых или заранее определённых ?
Где хранятся "заранее определённые" ? и т.д. и т.п.


Заранее определенных более сотни, а вводить могут все что угодно, так что без ограничения
Заранее определенные хранятся в ОЗУ, это самое быстрое место у компа.

--- Добавлено в 2017-05-26 15:23:17

Кстати, вариант Tad все же быстрее получается

Редактировалось 1 раз(а), последний 2017-05-26 15:23:17
карма: 1

0
Ответов: 16884
Рейтинг: 1239
#11: 2017-05-26 16:13:12 ЛС | профиль | цитата
Так и скажи - контроль на мат.
Заранее определенные хранятся в ОЗУ
Ты смотри!
Они туда забиваются при изготовлении компа?

Редактировалось 1 раз(а), последний 2017-05-26 16:18:55
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 817
Рейтинг: 52
#12: 2017-05-26 16:19:20 ЛС | профиль | цитата
Tad писал(а):
Так и скажи - контроль на мат.

В самую дырочку
карма: 1

0
Разработчик
Ответов: 26113
Рейтинг: 2126
#13: 2017-05-26 16:22:41 ЛС | профиль | цитата
-= DriveR =- писал(а):
В самую дырочку

А не проще ли тогда использовать MultiReplace и заменять крепкие слова пипсами?
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#14: 2017-05-26 16:28:12 ЛС | профиль | цитата
Сначала нужно спросить, а сколько всего матерных слов ?
Только на "П" около 1500.(Кстати на "Х" всего 206)
Всего более 2000 слов.
И есть на все буквы алфавита.
Быстрее всего получилось с перенаправлением по первой букве на свой список.
Всего 28 списков.
Писал я такой фильтр.

--- Добавлено в 2017-05-26 16:36:47

nesco писал(а):
А не проще ли тогда использовать MultiReplace и заменять крепкие слова пипсами?
За крепкие слова нужно беспощадно банить.

Редактировалось 2 раз(а), последний 2017-05-26 16:36:47
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 9906
Рейтинг: 351
#15: 2017-05-26 16:59:04 ЛС | профиль | цитата
-= DriveR =- писал(а):
Кстати, вариант Tad все же быстрее получается

Неправда. Просто измерять не умеете.

Если речь идет о теории (не я первый произнес это слово), то асимптотика "полного перебора" - линейная по количеству "эталонов"
Асимптотика "деления пополам" - логарифмическая.
Вот вам и весь сказ

Редактировалось 1 раз(а), последний 2017-05-26 17:00:20
карма: 9

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)