Возвращаясь к пройденному. Потому что понимание рекурсии в ООП - не самый тривиальный вопрос. И копья-то мы ломали на эту тему. В свое время. Подзабыл я просто все эти диспуты.... Все, что говорил раньше, но в виде схемы: Add(MainForm,2953706,427,168) { Width=234 Height=706 Position=1 link(onCreate,15485450:doRandomize,[(564,188)(564,153)]) } Add(MultiElementEx,13059321,686,231) { Mode=1 Name="Sort" @IsLib=True link(Array,9304427:Array,[]) } BEGIN_SDK Add(EditMultiEx,7479706,21,21) { WorkCount=#6:doSort| DataCount=#5:Array| Width=552 Height=354 VOffset=140 HOffset=140 link(doSort,4468939:doCompare,[]) } Add(MultiElementEx,4736351,455,252) { elink(13059321) link(Array,7212801:Var2,[]) } Add(MultiElementEx,2292698,399,259) { elink(13059321) link(Array,9438745:Var2,[]) } Add(IntegerArray,16352659,455,84) { IntArray=[] } Add(IntegerArray,10517189,399,84) { IntArray=[] } Add(ArrayRW,813269,294,154) { link(Array,10669136:Var1,[(300,138)]) } Add(ArrayRW,3150729,294,217) { link(Array,64932:Var1,[(300,201)]) } Add(GetDataEx,7212801,455,133) { link(Data,16352659:Array,[]) } Add(GetDataEx,9438745,399,196) { link(Data,10517189:Array,[]) } Add(ArrayEnum,994920,161,161) { link(onItem,14688563:doSwitch,[]) link(onEndEnum,10544971:doEvent1,[(221,174)(221,258)]) link(Array,11124387:Var2,[]) } Add(Switch,14688563,231,161) { Point(onOn) Point(onOff) link(onOn,813269:doAdd,[]) link(onOff,3150729:doAdd,[(284,181)(284,237)]) } Add(Hub,10544971,231,252) { OutCount=3 link(onEvent1,4736351:doSort,[]) link(onEvent2,2292698:doSort,[]) link(onEvent3,7586658:doMerge,[]) } Add(MultiElementEx,7586658,336,266) { @Hint=#37:Слияние двух отсортированных массивов| Name="Mrg" link(In1,64932:Var2,[]) link(In2,10669136:Var2,[]) link(Out,11124387:Var3,[(356,89)]) AddHint(-78,49,178,26,@Hint) } BEGIN_SDK Add(EditMultiEx,517209,21,21) { WorkCount=#7:doMerge| DataCount=#3:In1|3:In2|3:Out| } END_SDK Add(GetDataEx,64932,336,196) { Angle=1 link(Data,9438745:Var1,[]) } Add(GetDataEx,10669136,343,133) { Angle=1 link(Data,7212801:Var1,[]) } Add(GetDataEx,11124387,161,84) { link(Data,7479706:Array,[]) } Add(ArrayRW,14669575,77,112) { Point(Count) link(Array,11124387:Var1,[(83,89)]) } Add(If_else,4468939,84,161) { Type=2 Op2=Integer(1) link(onTrue,994920:doEnum,[]) link(Op1,14669575:Count,[]) } END_SDK Add(Edit,3522873,427,105) { Width=226 Align=2 Text="100" DataType=1 ClearAfterEnter=1 Point(doSelectAll) link(onEnter,3614744:doEvent1,[]) } Add(ListBox,9304427,672,112) { Top=20 Width=226 Height=646 Align=5 } Add(Hub,3614744,490,112) { OutCount=3 link(onEvent1,3522873:doSelectAll,[(515,118)(515,97)(417,97)(417,125)]) link(onEvent2,9304427:doClear,[]) link(onEvent3,413181:doFor,[(515,132)(515,146)]) } Add(For,413181,525,140) { Start=1 InData=0 link(onEvent,15485450:doRandom,[]) } Add(Random,15485450,588,140) { Max=10000 Quality=1 link(onRandom,9304427:doAdd,[(627,146)(627,118)]) } Add(Button,9551663,427,231) { Left=420 Top=230 Align=4 Caption="СОРТИРОВКА" link(onClick,13059321:doSort,[]) }
Вот, nesco, это есть решение рекурсивной задачи Достаточно ли оно очевидно По моему, так очевидней и некуда. ------------ Дoбавленo в 08.27:А, да... Забыл добавить: 1) Схема незакончена, Содержимое мультика Mrg нарисуйте сами. И оно даже и заработает. 2) Ну и Вы помните: внутрь линка лучше не ходить - снег башка попадет. Возможно (я не ходил).
|