aaa_gadag,
1) Очень плохо, что до тебя с третьего раза доезжает: КОЛЬЦЕВАНИЯ В СХЕМЕ НЕ ДОПУСТИМЫ
2) У нас ДАВНО НЕ МОДНО творить флаги в цикле и проверять их на выходе
3) Не говоря уже о том, что этот самый "первый способ" есть в примерах из дистрибутива: ExampleDrawFifteens.sha
Не хотел же манную тюрю ребенку в рот класть - так жевать ведь никогда не научится
Нет же, находятся "доброжелатели" и такому учат, что стыдно становится...
Этот топик читают: Гость
Ответов: 9906
Рейтинг: 351
|
|||
карма: 9 |
| ||
файлы: 1 | code_1504.txt [1.1KB] [323] |
Ответов: 8928
Рейтинг: 823
|
|||
juk, на форуме уже обсуждалось это, надо было поискать, вот чуть откорректированная под Вашу задачу схема (по логике, изложенной Galkov-ым) :
code_1505.txt |
|||
карма: 19 |
| ||
файлы: 1 | code_1505.txt [2.7KB] [323] |
Ответов: 9906
Рейтинг: 351
|
|||
Леонид, у элемента ArrayRW у низу точечка есть - Item называется. Так она(и) вполне заменяет элемент Memory (оба, естественно)
juk, вот то, чего сделал Леонид - и называется написать программу Ты бы лучше рассказал, чего тебе не давало ровно то же сделать самому - вы находились с одинаковой постановкой задачи на входе, вроде бы... Тогда - можно было бы помочь, видимо. Не будет же Леонид за тебя все время работу делать. Я надеюсь. |
|||
карма: 9 |
|
Ответов: 56
Рейтинг: 1
|
|||
Я сначало пробовал понять что было написано.Понял:
1.Никто не выложил схему. 2.Нужен генератор случайных чисел без повторов. 3.Всё после первого сообщения для меня слишком сложно. Поэтому я решил выложить схему.Дальше увидел непонятное для меня сообщение Galkovа и оно было не мне.Дальше увидел вопрос jukа и спросил он меня.Я естественно ответил ему схемой. И я так и не увидел разницы схем от меня и от Galkovа. 1)Что за кольцевания такие? 2)А разве это делает программу хуже? 3)Я оттуда и узнал этот способ.Где ещё обучаться если не из примеров? |
|||
карма: 1 |
|
Ответов: 9906
Рейтинг: 351
|
|||
aaa_gadag писал(а): Никто не выложил схемурешить пользователь его задачу - не цель. цель - научить его решать задачу. Ты его научил aaa_gadag писал(а): И я так и не увидел разницы схем от меня и от Galkovа.
1)Что за кольцевания такие? Еще раз посмотри: разница - и есть "кольцевания" Не получится - еще раз посмотри Пока не увидишь, в общем. Потому-что в моей схеме нет кольцеваний, а в твоей - есть aaa_gadag писал(а): 2)А разве это делает программу хуже?Эту конкретно - нет. Но при каком-то чуть-чуть другом раскладе элементов ОНО может взять и упасть с "Access Violaton..." Писано про это 100 раз уже, даже модель паровозиков сочинили Не жалко совершенно, если оно у тебя упадет. Плохо, что другой неопытный юзер подумает, что так делать можно Так вот - НЕЛЬЗЯ. |
|||
карма: 9 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
Galkov писал(а): Плохо, что другой неопытный юзер подумает, что так делать можно
Так вот - НЕЛЬЗЯ. а использование методов кольцевания в пакете WEB вообще приводит к зависанию среды, переполнению стека и полному вылету программы с потерей всех несохраненных данных. |
|||
карма: 27 |
|
Ответов: 2125
Рейтинг: 159
|
|||
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 |
|
Ответов: 56
Рейтинг: 1
|
|||
Galkov писал(а): решить пользователь его задачу - не цель.
цель - научить его решать задачу. Ты его научил Я учился на решёных задачах.Других способов незнаю. Galkov писал(а): Еще раз посмотри: разница - и есть "кольцевания"
Не получится - еще раз посмотри Пока не увидишь, в общем. Потому-что в моей схеме нет кольцеваний, а в твоей - есть Теперь понял что такое кольцевания. Galkov писал(а): aaa_gadag писал(а)2)А разве это делает программу хуже?
Эту конкретно - нет. Но при каком-то чуть-чуть другом раскладе элементов ОНО может взять и упасть с "Access Violaton..." Писано про это 100 раз уже, даже модель паровозиков сочинили Не жалко совершенно, если оно у тебя упадет. Плохо, что другой неопытный юзер подумает, что так делать можно Так вот - НЕЛЬЗЯ. Я вообщето про Galkov писал(а): 2) У нас ДАВНО НЕ МОДНО творить флаги в цикле и проверять их на выходе |
|||
карма: 1 |
|
Ответов: 9906
Рейтинг: 351
|
|||
Dilma, Там и надо делать проверку...
Называться будет - СЕМАНТИЧЕСКАЯ ошибка В принципе, возможно даже отследить реентрабельные пары метод-событие элементов и допустить рекурсию... И при "наступании себе на хвост" делать 100% функциональный вызов Я сейчас Дракона читаю... В его терминологии, то, чего CodeGen получает от среды - должно быть дерево синтаксического разбора. Минуя стадии получения лексических и синтаксических ошибок Так наша проблема сегодня (а может и наоборот - сила) в том, что мы не дерево получаем, а ДАГ А если он еще и цикличный - так это у нас уже называется "кольцевание" |
|||
карма: 9 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
tsdima писал(а): .. должно быть оптимизировано путём превращения в цикл.Galkov писал(а): Там и надо делать проверку...проблема в том, что не понятно на каком уровне и как отлавливать такие вещи. Проще всего очевидно в самом компоненте: если его точка вызвана повторно, то труба. Плюсы: - компонент получает возможность достаточно гибко и оптимально разрешить ситуацию. Т.е. если MultiElement в режиме Function вообще ничего не будет делать при кольцевание, то какой-нибудь If будучи закольцованным точкой onFalse на свой вход очень элелегантно и красиво оптимизируется в цикл while... Минусы: - придется писать лишний код в каждой точке каждого элемента. Сложнее будет сделать общий интерйейс на уровне среды путем выдачи ошибки кодогенерации при встрече кольца. Сложность основная будет в том, что некоторые элементы все таки допускают рекурсивность вызова точек без каких либо последствий и такие включения ошибок выдавать не должны. |
|||
карма: 27 |
|
Ответов: 9906
Рейтинг: 351
|
|||
Ой, чего-то не там мы постимся
А средств отделения/переноса постов и нет Dilma писал(а): проблема в том, что не понятно на каком уровне и как отлавливать такие вещи. Проще всего очевидно в самом компоненте: если его точка вызвана повторно, то труба.Да, вообще-то, понятно на каком Скажем опять в парадигме Дракона: Чем мы занимаемся Мы пытаемся сотворить Синтетически Управляемую Трансляцию При этом каждый метод элемента является как бы Нетерминалом А скрипт каждого метода элемента - Синтаксически Управляемым Определением А чего делает это определение Оно получает на входе так называемые Наследуемые Атрибуты, и возвращает - Синтетические Атрибуты. Вообще говоря, и тех и других - много. И код event-а лишь один из них. Частично это так сегодня и есть: мы получаем имя некой переменной (а это код!) в результате. Но гораздо правильней (в этой парадигме) было бы получить код целиком (а не в codeb) и уже самостоятельно решать (в скрипте метода, конечно же) в какое место его засунуть К примеру, вызвали скрипт, И ПОЛУЧИЛИ В РЕЗУЛЬТАТЕ, кроме еще никуда не засунутого кода - и синтетический атрибут типа <засунь свои данные себе в зад> Ну вот, а мы тут считали, считали (предположим, была сложная арифметика). Вот все и учли: свой код аннулировали, вернули такой же атрибут вышестоящему нетерминалу, и вернули ему только-что полученный код, как результат своей работы. А было бы скажем <AsString> - сохранили бы свое сложное вычисление и вклеили конвертор типа Аналогично и с рекурсиями... Только это теперь уже наследуемый атрибут Сначала с верхнего уровня передается <Можно> Предположим элемент For при парсинге onEvent говорит <Низя>, а при onStop - вышестоящее указание. Еще один момент. Мы начинаем парсинг с одной точки... Смысл в том, что при совершении ф-ного вызова мы должны добавлять в некий список "необработанных точек входа" эту ф-ю. Закончим парсинг этой ветки - перейдем к этой... |
|||
карма: 9 |
|
Ответов: 2125
Рейтинг: 159
|
|||
Galkov писал(а): А средств отделения/переноса постов и нет Да, надо бы добавить кнопочку "Запомнить" топику, и "Перенести" посту. При создании топика запоминать его автоматом (в течение сессии). [size=-2]------ Добавлено в 16:19 Dilma писал(а): какой-нибудь If будучи закольцованным точкой onFalse на свой вход очень элелегантно и красиво оптимизируется в цикл while...А если два If-а в кольце будут? |
|||
карма: 1 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
tsdima писал(а): А если два If-а в кольце будут? два последовательных If нужно превращать в один компонент с двумя условиями связанными по AND. Соответственно два паралельных ифа это OR |
|||
карма: 27 |
|
Ответов: 2125
Рейтинг: 159
|
|||
Я имею ввиду такую конструкцию:
[size=-2]------ Добавлено в 16:53 Переходы на метки А и Б я не перепутал, именно так и хотел. [size=-2]------ Добавлено в 16:55 Dilma писал(а): два последовательных If Ну они-же не всегда последовательно включаются |
|||
карма: 1 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
tsdima писал(а): Я имею ввиду такую конструкциюпри такой сборке - выдавать ошибку tsdima писал(а): Ну они-же не всегда последовательно включаютсяимел ввиду такую конструкцию:
в первом случае это AND во втором OR |
|||
карма: 27 |
|