Вверх ↑
Этот топик читают: Гость
Ответов: 32
Рейтинг: 0
#16: 2019-08-17 18:20:47 ЛС | профиль | цитата
Программа по моей схеме с кольцеванием работает, только с небольшим количеством строк.

--- Добавлено в 2019-08-17 18:23:37

Ясно с кольцеванием нормально не работает.

Редактировалось 1 раз(а), последний 2019-08-17 18:23:37
карма: 0

0
Ответов: 16492
Рейтинг: 1210
#17: 2019-08-18 07:51:46 ЛС | профиль | цитата
Мозг на 80% состоит из жидкости.
Мало того, что у многих она тормозная,
так некоторым конкретно не долили...

карма: 22
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 9820
Рейтинг: 340
#18: 2019-08-18 08:58:46 ЛС | профиль | цитата
Tad, я тебе один умный вещь скажу, только ты не обижайся...

Примеры, как можно сделать, вместо объяснения причин почему не работает по другому -- вовсе не свидетельствуют о высоком качестве жидкости в головах, дающих эти примеры.
Таки ТС сказал, что таковые примеры ему известны (тот же Enum). И задал прямой вопрос: почему?

Процитирую, однако, из вышеуказанного мной топика (пост #16):
Galkov писал(а):
НО -- продвинутые юзеры занимаются трепом НИ О ЧЕМ.
Вместо того, чтобы научить пользователя, ХОТЯ БЫ -- чем ЦИКЛ отличается от КОЛЬЦЕВАНИЯ.
И почему второе в HiAsm, в общем случае - недопустимо.

Мне просто любопытно уже, этого что - никто кроме меня не умеет на форуме
Типа - утерянные знания предыдущих цивилизаций...


--- Добавлено в 2019-08-18 09:06:05

Кстати говоря, последний мой вопрос не потерял актуальности.

Редактировалось 6 раз(а), последний 2019-08-18 09:06:30
карма: 8

0
Главный модератор
Ответов: 2706
Рейтинг: 355
#19: 2019-08-18 11:30:59 ЛС | профиль | цитата
Проект HiAsm.NET унаследовал проблему вызова бесконечной рекурсии при "кольцевании" схемы программы: события с выхода элемента на вход этого же элемента, который вызовет тоже самое событие. Проблема решается на уровне реализации самого элемента с помощью дополнительного кода, что не всегда может быть оправдано. Версия среды номер 4 уже никогда не избавится от этой проблемы. Может быть в будущем кто-нибудь решит эту проблему "в принципе".
карма: 8
Дорогу осилит идущий. HiAsm.NET is based on HiAsm 5
0
Ответов: 32
Рейтинг: 0
#20: 2019-08-18 12:33:30 ЛС | профиль | цитата
Ну я говорю, что не разбираюсь в программировании.

--- Добавлено в 2019-08-18 12:48:23

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

Редактировалось 1 раз(а), последний 2019-08-18 12:48:23
карма: 0

0
Ответов: 9820
Рейтинг: 340
#21: 2019-08-18 12:54:35 ЛС | профиль | цитата
Nic писал(а):
Проект HiAsm.NET унаследовал проблему вызова бесконечной рекурсии при "кольцевании" схемы программы

Nic, вынужден возразить Вам дважды.

1) Кольцевание и рекурсия - это разные вещи. Рекурсия - это создание нового объекта (как некой копии оригинала) и применение к нему некого метода, с последующим его удалением.
Исторически термин рекурсия возник еще до ООП. Однако и там, при всяком рекурсивном обращении создавался объект в стеке, состоящий из входных аргументов и локальных переменных. А последующий код можно интерпретировать как некий метод этого объекта (EBP - указатель внутрь этого объекта).
Вспомните еще, что возможна иная, более эффективная генерация кода (передача аргументов через стек не есть догма). Можно в каком-нибудь регистре передавать адрес некой структуры в памяти, в которой нужные данные уже подготовлены. Типа, нафига десятками раз пихать в стек почти одни и те же данные в run-time. Так вот, если вы не будете при каждом рекурсивном обращении создавать такую структуру заново -- фиг вам, а не рекурсия.
Фортран, кстати говоря, так и делал, и, можете себе представить - не допускал рекурсий.
Можем ли мы решать рекурсивные задачи в HiAsm, запрещая (например, на уровне среды) кольцевания?
Конечно, если правильно понимаем, что такое рекурсия. У нас есть мультик в динамическом режиме, который создает экземпляр объекта при обращении, и удаляет экземпляр по окончании Грубо говоря, я - могу.
Показывал пример в виде сортировки (там ссылки на контейнер Sort - так это он и нарисован)
Рекурсивная сортировка

Вы можете соглашаться, или не соглашаться - от этого ничего не изменится. Потому что сказанное выше и есть Великая Сермяжная Правда

2) Кольцевание - если это и проблема, то больше семантическая. У нас просто нет договоренности как понимать некоторые вертиплясы с этим кольцеванием. А так - ну нет этой проблемы.
Например, такой вертипляс:
Add(Button,15697256,217,161)
{
Left=215
Top=160
link(onClick,8088855:doWork2,[])
}
Add(MultiElementEx,6238864,329,161)
{
Name="MX1"
link(2,120244:doEvent1,[])
}
BEGIN_SDK
Add(EditMultiEx,13251412,21,21)
{
WorkCount=#1:1|
EventCount=#1:2|
}
END_SDK
Add(MultiElementEx,3063538,448,168)
{
Name="MX2"
}
BEGIN_SDK
Add(EditMultiEx,16199070,21,21)
{
WorkCount=#1:1|
EventCount=#1:2|
}
END_SDK
Add(Hub,120244,399,161)
{
link(onEvent1,8088855:doWork1,[(424,167)(424,153)(284,153)])
link(onEvent2,3063538:1,[])
}
Add(HubEx,8088855,280,161)
{
@Hint=#35:Как спрашивается понимать эту фигню|
link(onEvent,6238864:1,[])
AddHint(-30,49,184,26,@Hint)
}
Мое личное мнение (не более того) состоит в том что вместо этого HubEx должен стоять некий другой системный элемент, который выполняет цикл, последовательно отправляя направо данные, которые ему напихали с боков. В какой последовательности напихали, в такой и отправлять.
Опять же среда (не эта, а некая перспективная) должна распознавать ситуацию кольцевания, и ставить вместо HubEx этот системный элемент без названия... Looper - как-то неприлично звучит.

Вот и все. Главное - у нас нет общей семантической договоренности. Если бы была - остальное не более чем технические вопросы.

Редактировалось 4 раз(а), последний 2019-08-18 13:01:10
карма: 8

0
Ответов: 16492
Рейтинг: 1210
#22: 2019-08-18 13:57:50 ЛС | профиль | цитата
Galkov, в #4: 2019-08-17 13:02:09 было всё сказано.
Дальнейший разговор на эту тему - пустая трата времени. ИМХО.
карма: 22
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Главный модератор
Ответов: 2706
Рейтинг: 355
#23: 2019-08-18 14:03:52 ЛС | профиль | цитата
Galkov, Решение проблемы для конкретного элемента есть и неважно, что это за элемент. Пока нет решения для любого элемента, который "запускает свой паравозик", который может к нему же и вернуться с тем же результатом. У меня есть возможность в проекте HiAsm.NET попытаться реализовать обход элементов схемы с разрешением конфликтов кольцевания. А 4-я версия среды уже никогда не будет обновлена. Это и хотел выразить в предыдущем своём сообщении.
карма: 8
Дорогу осилит идущий. HiAsm.NET is based on HiAsm 5
0
Ответов: 9820
Рейтинг: 340
#24: 2019-08-18 14:24:51 ЛС | профиль | цитата
Nic писал(а):
Решение проблемы для конкретного элемента есть и неважно, что это за элемент. Пока нет решения для любого элемента, который "запускает свой паравозик", который может к нему же и вернуться с тем же результатом
Вообще ничего не понял. Все слова по отдельности понимаю, а смысл - НЕТ.

Nic писал(а):
У меня есть возможность в проекте HiAsm.NET попытаться реализовать обход элементов схемы с разрешением конфликтов кольцевания
Понятно, что на этапе генерации в пакетах (F|R)TCG можно и нужно реализовывать обход с выявлением кольцеваний. Хотя бы для того, чтобы это не падало с диким грохотом.
А разрешать-то как. Какова семантика этого разрешения.
Насколько я помню, моя семантика была отвергнута под девизом "ай-я-яй, а как же тогда рекурсию делать"
Неужели что-то изменилось с тех очень уже давних пор
карма: 8

0
Ответов: 32
Рейтинг: 0
#25: 2019-08-18 14:51:14 ЛС | профиль | цитата
А если реализовать оператор goto в элементах.
карма: 0

0
Главный модератор
Ответов: 2706
Рейтинг: 355
#26: 2019-08-18 15:01:35 ЛС | профиль | цитата
Galkov писал(а):
А разрешать-то как

Nic писал(а):
...попытаться реализовать обход элементов схемы с разрешением конфликтов кольцевания.

Не знаю пока ничего про твоё предложение
Galkov писал(а):
моя семантика была отвергнута

Если поможешь найти - попытаюсь её понять
Galkov писал(а):
Неужели что-то изменилось с тех очень уже давних пор

Думаю, что в то "доброе и старое" время "пехотных мин ещё не было":
Анекдот

Идёт Ахмед по дороге, а жена его перед ним. Друзья ему говорят:
— Эй Ахмед как Аллах нас в коране учит! Жена должна идти после мужа...
А Ахмед говорит:
— Когда писали коран не делали противопехотных мин... — Вперёд Фатима, вперёд...
карма: 8
Дорогу осилит идущий. HiAsm.NET is based on HiAsm 5
0
Ответов: 8353
Рейтинг: 776
#27: 2019-08-18 18:50:10 ЛС | профиль | цитата
Igor08 писал(а):
В чем может быть ошибка

Насчёт программирования у меня тоже туго
Но понятие "поток", что в HiAsm, что в самой Win, одинаковы (на мой взгляд дилетанта). Запущенный поток заканчивается, когда выполнены ВСЕ действия по всей цепочки событий. Если же последним действием является запуск нового потока, то это глупая система в отличии от умного программиста, не считает ОКОНЧАНИЕМ потока, новый запускается, а не оконченный записывается в стек, и так происходит до переполнения стека, о чём система и сообщает в виде окошка с ошибкой.
На моём компьютере происходит на ~5800 шаге по вашей схеме.
Для остановки потока надо разорвать его, от своего события поток НЕ останавливается. Вот пример:
Пример


Add(MainForm,2953706,112,98)
{
Left=100
Top=100
}
Add(Button,2293750,175,98)
{
Left=10
Top=35
Caption="New"
link(onClick,887884:doEvent1,[])
}
Add(Edit,12852549,252,49)
{
Left=10
Top=10
Width=55
Text="5000"
DataType=2
}
Add(For,2493988,245,105)
{
IncludeEnd=1
link(onEvent,8448546:doAdd,[])
link(onStop,9572952:doData,[(291,118)(291,69)])
link(End,12852549:Text,[])
}
Add(StrList,8448546,315,105)
{
}
Add(Hub,887884,217,98)
{
link(onEvent1,8448546:doClear,[(298,104)(298,118)])
link(onEvent2,2493988:doFor,[])
}
Add(ListBox,12531232,364,42)
{
Left=95
Top=5
Width=75
Height=175
}
Add(DoData,9572952,315,63)
{
link(onEventData,12531232:doText,[])
link(Data,8448546:Text,[(321,54)(307,54)(307,159)(321,159)])
}
Add(Button,13330136,112,231)
{
Left=5
Top=145
Caption=">>"
link(onClick,11594363:doEvent1,[])
}
Add(ArrayRW,6341194,322,252)
{
link(onRead,8684211:doEvent1,[])
link(Array,8448546:Array,[(328,222)(335,222)])
link(Index,2253295:Var2,[])
}
Add(Math,8346132,238,182)
{
Op2=1
ResultType=0
Point(doClear)
link(Op1,2355341:Var1,[(244,173)(230,173)(230,229)])
}
Add(Thread,11006514,189,252)
{
Delay=0
link(onExec,8025525:doCompare,[])
}
Add(Hub,11594363,154,231)
{
OutCount=4
link(onEvent1,8346132:doClear,[(179,237)(179,195)])
link(onEvent2,4898321:doClear,[(403,244)(403,265)])
link(onEvent3,2290610:doStart,[(228,251)(228,300)])
link(onEvent4,11006514:doStart,[])
}
Add(GetDataEx,2355341,238,224)
{
link(Data,8346132:Result,[])
}
Add(Hub,8684211,371,252)
{
link(onEvent1,4898321:doOperation,[])
link(onEvent2,8346132:doOperation,[(396,265)(396,237)(223,237)(223,188)])
}
Add(If_else,8025525,238,252)
{
Type=1
link(onTrue,6341194:doRead,[])
link(onFalse,14165636:doEvent1,[])
link(Op1,2355341:Var2,[])
link(Op2,8448546:Count,[(251,222)(328,222)])
}
Add(Math,4898321,420,252)
{
Point(doClear)
link(Op1,7584245:Var1,[(426,243)(412,243)(412,292)])
}
Add(Hub,14165636,280,259)
{
link(onEvent1,2290610:doStop,[(312,265)(312,307)])
link(onEvent2,10286058:doStart,[(305,272)(305,307)(123,307)(123,272)])
}
Add(GetDataEx,7584245,420,287)
{
link(Data,4898321:Result,[])
}
Add(FormatStr,1513776,413,301)
{
DataCount=3
Mask="Сумма %1 строк равна %2 за %3 мкс"
link(onFString,4312938:doText,[])
link(Str1,2253295:Var3,[(419,229)])
link(Str2,7584245:Var2,[])
}
Add(GetDataEx,2253295,329,224)
{
Angle=3
link(Data,2355341:Var3,[])
}
Add(Thread,10286058,133,266)
{
@Hint=#39:Если удалить, поток не останавливается!|
Delay=0
FastStop=0
link(onExec,11006514:doStop,[(179,272)(179,265)])
}
Add(TimeCounter,2290610,350,294)
{
Precision=1
link(onStop,1513776:doString,[])
}
Add(Label,4312938,462,301)
{
Left=10
Top=200
Caption=""
}

карма: 14

0
Ответов: 32
Рейтинг: 0
#28: 2019-08-18 19:04:34 ЛС | профиль | цитата
Ладно. Я не разбираюсь в программировании хорошо, не занимаюсь профессиональным написанием программ. Мой мозг уже глюканул, я всякую фигню уже сюда пишу.
карма: 0

0
Ответов: 755
Рейтинг: 111
#29: 2019-08-19 21:49:02 ЛС | профиль | цитата
Igor08, Может я чего не понял. Но "Перебор строк StrList с помощью ArrayRW" можно сделать так

Add(MainForm,4813705,315,196)
{
Width=823
Height=601
link(onCreate,9870318:doEnabled,[])
}
Add(StrList,16119185,581,133)
{
Strings=#1:1|1:2|1:3|1:4|1:5|1:6|1:7|1:8|1:9|2:10|
Point(String)
Point(doReplace)
}
Add(Button,9870318,448,210)
{
@Hint=#13:Кнопка расчет|
Left=370
Top=520
Width=100
Height=30
Font=[Times New Roman,14,0,0,204]
Enabled=1
Name="Расчет"
Caption="Расчет"
Point(doEnabled)
link(onClick,14614027:doFor,[])
AddHint(-106,67,89,13,@Hint)
}
Add(Label,4019049,644,210)
{
Left=75
Top=230
Width=235
Height=25
}
Add(ArrayRW,15080711,595,210)
{
link(onRead,4019049:doText,[])
link(Array,16119185:Array,[])
}
Add(For,14614027,497,210)
{
IncludeEnd=1
link(onEvent,4244116:doSleepMks,[])
link(End,16119185:Count,[(510,194)(594,194)])
}
Add(Sleep,4244116,546,210)
{
Delay=1000000
link(onSleep,15080711:doRead,[])
}

карма: 1

0
Ответов: 32
Рейтинг: 0
#30: 2019-09-07 16:37:32 ЛС | профиль | цитата
Здравствуйте. Так можно выполнить программу? Если нет, то как по другому, подскажите пожалуйста.

Make(delphi)
ver(4.05 build 186)
Add(MainForm,2953706,147,154)
{
link(onCreate,6764378:doEnabled,[])
}
Add(StrList,8441797,336,70)
{
Strings=#1:1|1:2|1:3|1:4|1:5|1:6|1:7|1:8|1:9|2:10|0:|
}
Add(StrList,9680646,497,70)
{
Strings=#1:1|1:2|1:3|1:4|1:5|1:6|1:7|1:8|1:9|2:10|0:|
}
Add(Button,6764378,210,168)
{
Left=140
Top=165
Width=65
Height=25
Enabled=1
Caption="Расчет"
Point(doEnabled)
link(onClick,13410931:doEvent1,[])
}
Add(ArrayEnum,4346486,336,168)
{
link(onItem,817057:doValue,[])
link(onEndEnum,1934759:doNext,[(376,181)(376,244)])
link(Array,8441797:Array,[(342,142)(356,142)])
}
Add(ArrayEnum,15313221,483,168)
{
link(onItem,13483133:doValue,[])
link(onEndEnum,8663432:doEvent1,[(527,181)(527,230)])
link(Array,9680646:Array,[(489,142)(517,142)])
}
Add(Memory,817057,413,168)
{
link(onData,15313221:doEnum,[])
}
Add(MathParse,5004562,644,168)
{
link(onResult,6669677:doEvent1,[])
link(X1,817057:Value,[(650,156)(534,156)(534,212)(419,212)])
link(X2,13483133:Value,[(657,148)(619,148)(619,212)(580,212)])
}
Add(Memory,13483133,574,168)
{
link(onData,5004562:doCalc,[])
}
Add(Label,3978511,784,217)
{
Left=50
Top=50
}
Add(StrList,9765544,609,70)
{
}
Add(Hub,8663432,539,224)
{
link(onEvent1,9680646:doClear,[(565,230)(565,145)(485,145)(485,83)])
link(onEvent2,6424699:doEnum,[(577,237)(577,251)])
}
Add(Hub,6669677,693,168)
{
link(onEvent1,3978511:doText,[(730,174)(730,223)])
link(onEvent2,9765544:doAdd,[(719,181)(719,129)(583,129)(583,76)])
}
Add(ArrayEnum,6424699,602,245)
{
link(onItem,9680646:doAdd,[(640,251)(640,152)(471,152)(471,76)])
link(onEndEnum,9765544:doClear,[(685,258)(685,143)(597,143)(597,83)])
link(Array,9765544:Array,[(608,180)(629,180)])
}
Add(Counter,1934759,385,238)
{
Max=2
link(onNext,9923830:doCompare,[(433,244)(433,258)])
}
Add(If_else,9923830,448,252)
{
Op2=Integer(2)
link(onTrue,7504652:doExecute,[(506,258)(506,300)])
link(onFalse,1768033:doWork2,[(492,265)(492,221)(298,221)(298,174)])
link(Op1,1934759:Count,[(454,240)(422,240)(422,282)(391,282)])
}
Add(Hub,13410931,252,168)
{
link(onEvent1,1934759:doReset,[(284,174)(284,258)])
link(onEvent2,1768033:doWork3,[(312,181)])
}
Add(HubEx,1768033,308,168)
{
link(onEvent,4346486:doEnum,[])
}
Add(SDialog,7504652,532,294)
{
link(onExecute,9680646:doSave,[(576,300)(576,206)(462,206)(462,111)])
}

карма: 0

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