Вверх ↑
Этот топик читают: Гость
Ответов: 9906
Рейтинг: 351
#16: 2007-05-31 11:27:21 ЛС | профиль | цитата
aaa_gadag,
1) Очень плохо, что до тебя с третьего раза доезжает: КОЛЬЦЕВАНИЯ В СХЕМЕ НЕ ДОПУСТИМЫ
2) У нас ДАВНО НЕ МОДНО творить флаги в цикле и проверять их на выходе
3) Не говоря уже о том, что этот самый "первый способ" есть в примерах из дистрибутива: ExampleDrawFifteens.sha

Не хотел же манную тюрю ребенку в рот класть - так жевать ведь никогда не научится
Нет же, находятся "доброжелатели" и такому учат, что стыдно становится...
карма: 9

0
файлы: 1code_1504.txt [1.1KB] [323]
Ответов: 8928
Рейтинг: 823
#17: 2007-05-31 11:41:18 ЛС | профиль | цитата
juk, на форуме уже обсуждалось это, надо было поискать, вот чуть откорректированная под Вашу задачу схема (по логике, изложенной Galkov-ым) :
code_1505.txt
карма: 19

0
файлы: 1code_1505.txt [2.7KB] [323]
Ответов: 9906
Рейтинг: 351
#18: 2007-05-31 12:00:23 ЛС | профиль | цитата
Леонид, у элемента ArrayRW у низу точечка есть - Item называется. Так она(и) вполне заменяет элемент Memory (оба, естественно)


juk, вот то, чего сделал Леонид - и называется написать программу
Ты бы лучше рассказал, чего тебе не давало ровно то же сделать самому - вы находились с одинаковой постановкой задачи на входе, вроде бы...
Тогда - можно было бы помочь, видимо.
Не будет же Леонид за тебя все время работу делать. Я надеюсь.
карма: 9

0
Ответов: 56
Рейтинг: 1
#19: 2007-05-31 12:23:33 ЛС | профиль | цитата
Я сначало пробовал понять что было написано.Понял:
1.Никто не выложил схему.
2.Нужен генератор случайных чисел без повторов.
3.Всё после первого сообщения для меня слишком сложно.
Поэтому я решил выложить схему.Дальше увидел непонятное для меня сообщение Galkovа и оно было не мне.Дальше увидел вопрос jukа и спросил он меня.Я естественно ответил ему схемой.
И я так и не увидел разницы схем от меня и от Galkovа.
1)Что за кольцевания такие?
2)А разве это делает программу хуже?
3)Я оттуда и узнал этот способ.Где ещё обучаться если не из примеров?
карма: 1

0
Ответов: 9906
Рейтинг: 351
#20: 2007-05-31 12:45:13 ЛС | профиль | цитата
aaa_gadag писал(а):
Никто не выложил схему

решить пользователь его задачу - не цель.
цель - научить его решать задачу.
Ты его научил


aaa_gadag писал(а):
И я так и не увидел разницы схем от меня и от Galkovа.
1)Что за кольцевания такие?

Еще раз посмотри: разница - и есть "кольцевания"
Не получится - еще раз посмотри
Пока не увидишь, в общем. Потому-что в моей схеме нет кольцеваний, а в твоей - есть


aaa_gadag писал(а):
2)А разве это делает программу хуже?

Эту конкретно - нет.
Но при каком-то чуть-чуть другом раскладе элементов ОНО может взять и упасть с "Access Violaton..."
Писано про это 100 раз уже, даже модель паровозиков сочинили

Не жалко совершенно, если оно у тебя упадет.
Плохо, что другой неопытный юзер подумает, что так делать можно
Так вот - НЕЛЬЗЯ.
карма: 9

0
Администрация
Ответов: 15295
Рейтинг: 1519
#21: 2007-05-31 12:48:49 ЛС | профиль | цитата
Galkov писал(а):
Плохо, что другой неопытный юзер подумает, что так делать можно
Так вот - НЕЛЬЗЯ.

а использование методов кольцевания в пакете WEB вообще приводит к зависанию среды, переполнению стека и полному вылету программы с потерей всех несохраненных данных.
карма: 27
0
Ответов: 2125
Рейтинг: 159
#22: 2007-05-31 12:58:35 ЛС | профиль | цитата
Dilma писал(а):
использование методов кольцевания в пакете WEB

... должно быть оптимизировано путём превращения в цикл.

[size=-2]------ Добавлено в 12:53
Сложно только определить условие выхода из цикла

[size=-2]------ Добавлено в 12:54
Хотя If-ы ведь оптимизируются в Case ...

[size=-2]------ Добавлено в 12:55
Правда это на уровне компонент, а не на уровне кода компонент...

[size=-2]------ Добавлено в 12:56
Придётся писать свой компилятор ...

[size=-2]------ Добавлено в 12:58
Хотя нет, можно же в случае вызова события-точки, не присутствующей в кольце просто break делать.

А выходов из кольца несколько может быть...
После цикла придётся в таких случаях case idExitPoint делать.

карма: 1

0
Ответов: 56
Рейтинг: 1
#23: 2007-05-31 12:59:03 ЛС | профиль | цитата
Galkov писал(а):
решить пользователь его задачу - не цель.
цель - научить его решать задачу.
Ты его научил

Я учился на решёных задачах.Других способов незнаю.
Galkov писал(а):
Еще раз посмотри: разница - и есть "кольцевания"
Не получится - еще раз посмотри
Пока не увидишь, в общем. Потому-что в моей схеме нет кольцеваний, а в твоей - есть

Теперь понял что такое кольцевания.
Galkov писал(а):
aaa_gadag писал(а)2)А разве это делает программу хуже?
Эту конкретно - нет.
Но при каком-то чуть-чуть другом раскладе элементов ОНО может взять и упасть с "Access Violaton..."
Писано про это 100 раз уже, даже модель паровозиков сочинили

Не жалко совершенно, если оно у тебя упадет.
Плохо, что другой неопытный юзер подумает, что так делать можно
Так вот - НЕЛЬЗЯ.

Я вообщето про
Galkov писал(а):
2) У нас ДАВНО НЕ МОДНО творить флаги в цикле и проверять их на выходе

карма: 1

0
Ответов: 9906
Рейтинг: 351
#24: 2007-05-31 13:03:54 ЛС | профиль | цитата
Dilma, Там и надо делать проверку...
Называться будет - СЕМАНТИЧЕСКАЯ ошибка
В принципе, возможно даже отследить реентрабельные пары метод-событие элементов и допустить рекурсию...
И при "наступании себе на хвост" делать 100% функциональный вызов

Я сейчас Дракона читаю...
В его терминологии, то, чего CodeGen получает от среды - должно быть дерево синтаксического разбора.
Минуя стадии получения лексических и синтаксических ошибок

Так наша проблема сегодня (а может и наоборот - сила) в том, что мы не дерево получаем, а ДАГ
А если он еще и цикличный - так это у нас уже называется "кольцевание"
карма: 9

0
Администрация
Ответов: 15295
Рейтинг: 1519
#25: 2007-05-31 13:29:52 ЛС | профиль | цитата
tsdima писал(а):
.. должно быть оптимизировано путём превращения в цикл.


Galkov писал(а):
Там и надо делать проверку...


проблема в том, что не понятно на каком уровне и как отлавливать такие вещи. Проще всего очевидно в самом компоненте: если его точка вызвана повторно, то труба.
Плюсы:
- компонент получает возможность достаточно гибко и оптимально разрешить ситуацию. Т.е. если MultiElement в режиме Function вообще ничего не будет делать при кольцевание, то какой-нибудь If будучи закольцованным точкой onFalse на свой вход очень элелегантно и красиво оптимизируется в цикл while...
Минусы:
- придется писать лишний код в каждой точке каждого элемента.

Сложнее будет сделать общий интерйейс на уровне среды путем выдачи ошибки кодогенерации при встрече кольца. Сложность основная будет в том, что некоторые элементы все таки допускают рекурсивность вызова точек без каких либо последствий и такие включения ошибок выдавать не должны.
карма: 27
0
Ответов: 9906
Рейтинг: 351
#26: 2007-05-31 14:47:13 ЛС | профиль | цитата
Ой, чего-то не там мы постимся
А средств отделения/переноса постов и нет

Dilma писал(а):
проблема в том, что не понятно на каком уровне и как отлавливать такие вещи. Проще всего очевидно в самом компоненте: если его точка вызвана повторно, то труба.

Да, вообще-то, понятно на каком

Скажем опять в парадигме Дракона:
Чем мы занимаемся Мы пытаемся сотворить Синтетически Управляемую Трансляцию
При этом каждый метод элемента является как бы Нетерминалом
А скрипт каждого метода элемента - Синтаксически Управляемым Определением
А чего делает это определение Оно получает на входе так называемые Наследуемые Атрибуты, и возвращает - Синтетические Атрибуты.
Вообще говоря, и тех и других - много. И код event-а лишь один из них.

Частично это так сегодня и есть: мы получаем имя некой переменной (а это код!) в результате.
Но гораздо правильней (в этой парадигме) было бы получить код целиком (а не в codeb) и уже самостоятельно решать (в скрипте метода, конечно же) в какое место его засунуть

К примеру, вызвали скрипт, И ПОЛУЧИЛИ В РЕЗУЛЬТАТЕ, кроме еще никуда не засунутого кода - и синтетический атрибут типа <засунь свои данные себе в зад>
Ну вот, а мы тут считали, считали (предположим, была сложная арифметика).
Вот все и учли: свой код аннулировали, вернули такой же атрибут вышестоящему нетерминалу, и вернули ему только-что полученный код, как результат своей работы.
А было бы скажем <AsString> - сохранили бы свое сложное вычисление и вклеили конвертор типа

Аналогично и с рекурсиями... Только это теперь уже наследуемый атрибут
Сначала с верхнего уровня передается <Можно>
Предположим элемент For при парсинге onEvent говорит <Низя>, а при onStop - вышестоящее указание.

Еще один момент.
Мы начинаем парсинг с одной точки...
Смысл в том, что при совершении ф-ного вызова мы должны добавлять в некий список "необработанных точек входа" эту ф-ю.
Закончим парсинг этой ветки - перейдем к этой...
карма: 9

0
Ответов: 2125
Рейтинг: 159
#27: 2007-05-31 16:19:33 ЛС | профиль | цитата
Galkov писал(а):
А средств отделения/переноса постов и нет

Да, надо бы добавить кнопочку "Запомнить" топику, и "Перенести" посту. При создании топика запоминать его автоматом (в течение сессии).

[size=-2]------ Добавлено в 16:19
Dilma писал(а):
какой-нибудь If будучи закольцованным точкой onFalse на свой вход очень элелегантно и красиво оптимизируется в цикл while...

А если два If-а в кольце будут?
карма: 1

0
Администрация
Ответов: 15295
Рейтинг: 1519
#28: 2007-05-31 16:32:25 ЛС | профиль | цитата
tsdima писал(а):
А если два If-а в кольце будут?

два последовательных If нужно превращать в один компонент с двумя условиями связанными по AND. Соответственно два паралельных ифа это OR
карма: 27
0
Ответов: 2125
Рейтинг: 159
#29: 2007-05-31 16:55:34 ЛС | профиль | цитата
Я имею ввиду такую конструкцию:

А:
что-то делаем
Б:
ещё что-то
If что-то then goto А
что-то делаем
If ещё что-то then goto Б

[size=-2]------ Добавлено в 16:53
Переходы на метки А и Б я не перепутал, именно так и хотел.

[size=-2]------ Добавлено в 16:55
Dilma писал(а):
два последовательных If

Ну они-же не всегда последовательно включаются
карма: 1

0
Администрация
Ответов: 15295
Рейтинг: 1519
#30: 2007-05-31 17:26:48 ЛС | профиль | цитата
tsdima писал(а):
Я имею ввиду такую конструкцию

при такой сборке - выдавать ошибку

tsdima писал(а):
Ну они-же не всегда последовательно включаются

имел ввиду такую конструкцию:
Add(If_else,5129323,133,364)
{
link(onTrue,13700014:doCompare,[])
link(onFalse,14560978:doWork2,[(176,377)(176,391)])
}
Add(If_else,13700014,196,364)
{
link(onFalse,14560978:doWork1,[(256,377)])
}
Add(HubEx,14560978,252,378)
{
}
Add(If_else,10578087,133,434)
{
link(onTrue,4185434:doWork2,[(252,440)])
link(onFalse,5491844:doCompare,[(177,447)(177,468)])
}
Add(If_else,5491844,189,462)
{
link(onTrue,4185434:doWork3,[(256,468)])
}
Add(HubEx,4185434,252,427)
{
}

в первом случае это AND во втором OR
карма: 27
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)