Конечные автоматы - для "школьников". Есть такое?

Лилик, в чем у тебя «проблема» то (я понять не могу)?

Разбивай программу на условные блоки:

  1. Определение состояний
  2. Чтение событий
  3. Смена состояний в зависимости от событий

По крайней мере я делаю так и проблем не было.

2 лайка

Скорее всего в восприятии терминологии.

Добавлю. Что бы у системы не получился кот Шредингера , когда не понятно в каком состоянии находится система, лучше(но не обязательно) завести переменную state(состояние) и функцию переключения в нужное состояние go(state).Эта функция нужна для 1- записи состояния системы, фиксация времени переключения(millis) и что должно быть сделано при переключении. Можно “сделано при переключении” делать не в функции, но тогда хвосты будут разбросаны по разным местам программы.

1 лайк

Добавлю еще термин “Switch-технологии”

Когда года два назад решил почитать про КА (т.к. “без этого никак”), решил ДЛЯ СЕБЯ, что наверное имеют в виду это.
Не уверен, что читал именно по этой ссылке. Первой части по моему достаточно, чтобы получить представление.

А чё тут думать? Показать Вам мой чисто внутренний рабочий документ - проект автомата, который я всегда делаю, прежде, чем программировать? Именно реальный проект устройства, которое я делал не так давно?

Кстати, заметьте, моя первая программа заработала в 1979 году, опыт - сорок пять лет, и, прежде, чем писать код, я всегда письменно фиксирую проект. А знаете почему? Потому что писать мало-мальски нетривиальный код без проекта, в лоб, чисто из головы мне квалификации не хватает. А вот ребятам типа “я тут только начал изучать, сильно не пинайте …” - им хватает. Они только так и пишут. А скажешь им - отложи код, напиши документ, а потом реализуй, отвечают: “бюрократия потом - надо суть делать:slight_smile:

Так показать?

4 лайка

Это более широкое понятие, чем КА. Оно основано на КА, но если КА - это математическая абстракция, то ST - это уже конкретная технология разработки.

Да, покажите пожалуйста, может быть пойму.

Женя, у нас древний как мамонт. Тогда был принцип. Научитесь в бассейне без воды плавать, а как научитесь найельем воды. Программистов было много, а компьютеров нет. Без готовой рабочей программы к компьютеру не допускали. Вот привычки с тех времен и остались.
Сейчас уже электронный документооборот, народ разучился ручками писать. А Женя за бумажную бюрократию. Эскизик я конечно на бумаге нарисую. Но программы надо уже сразу делать на компьютере. Так что черновая программа, отладка, тестирование, обновление дополнительных черновых кусков.

Делал таблетницу для пожилого человека, который часто не может вспомнить пил он утром таблетки или нет. Нужно было, чтобы он мог (при появлении сомнений) открыть коробку и увидеть когда он в последний раз её открывал. Т.е. в ней должны быть часы (их нужно уметь устанавливать), При открытии она должна показывать время, когда её открывали в последний раз, а если её держат открытой более пяти секунд, то запоминала новое время последнего открывания. Ну, и при этом беречь батарейку, чуть что – всё выключать и погружаться в сон.

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

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

И только после этого , имея перед глазами эту таблицу, я начал писать программу. Никакой отладки (кроме исправления опечаток) не потребовалось. В программах, которые пишутся с такой подготовкой ошибиться трудно.

Обратите внимание, как реализованы интервалы на миллис. Есть выходы «завести интервал» / «сбросить интервал» и есть вход: «интервал истёк». Всё! Больше автомат про миллис ничего не знает. Он даёт команду «завести интервал» и получает событие «интервал истёк» - точно такое же, как и любое другое. Реализованы интервалы простейшим классом, могу найти и показать, но там реально смотреть нечего.

А что, автомат без “промежутков времени” никак?

Логично.

Такая “функция” уже есть. Называется “оператор присваивания”.

КА это не нужно.

Ка это не нужно.

В функции вида go(state) это невозможно, т.к. действия зависят не от одного параметра, а от двух: состояния и внешнего сигнала.

Глупость.
Если есть готовая рабочая программа, то компьютер уже не нужен.

Нет, без такой привычки мало-мальски сложный проект не сделаешь.

А что, кто-то утверждает, что проект должен быть непременно на бумаге?
Лично у меня он всегда в файле.
более того, мои рекомендации по разработке проекта всегда сводятся к следующему.
Сначала напишите алгоритм по русски. Потом вставляйте в него операторы языка, превращая текст по русски в комментарии.
Очевидно, что это имеет смысл делать именно в файле, а не на бумаге.

Опять нет. Не пытайтесь слишком упростить окружающую действительность. Одним из ключевых функций КА является то, что из любого состояния, как правило, БОЛЕЕ ОДНОГО выхода. Например один по кнопке, а другой по таймауту.

Если у вас только один выход из состояния, например по миллис, как в примерах Квона - никакой КА вообще не нужен. Просто вызывайте состояния подряд в нужном порядке с определенными промежутками и все:

state1();
delay(1000);
state2();
delay(2000);
state3();
delay(3000);
...

Как сам девайс выглядит - покажете?

1 лайк

Ну КА изначально проектировался для цифровых устройств на кремнии. Так что КА может переходить из одного состояния в другой по тактируемым импульсам. С появлением компьютеров и программирования возможности КА расширились. Прежде всего это экономия процессорных операций, а не просаживание их в задержках. И да из одного состояния может быть БОЛЕЕ ОДНОГО выхода. А также принудительно переключатся в другое состояния от внешнего другого устройства. И наконец может менять состояния системы человек-оператор через систему МЕНЮ или другую программную конструкцию.

Я конечно же далеко не супер специалист, которые тут на форуме присутствуют.
Но, на сколько я знаю, изначально КА - это математическая модель.

1 лайк

Поговорка “Даже если вас съели, есть два выхода…” говорит об обратном

Математика это не сферический конь в вакууме, а прежде всего ПРИКЛАДНОЕ применение. Вот для создания ПРОЦЕССОРОВ и пришлось изобретать математику КА. В Артиллерии математика тоже нужна, хотя казалось засовывай заряд и стреляй.
Вот смотрите, даром что в тексте не написано что это КА ,диаграммы и термины пипец как похожи https://portal.tpu.ru/SHARED/r/RVLITVINOV/Tab2/Тема%205.pdf

Завтра сфоткаю

Которая не имеет никакого отношения ни к кремнию, ни к “внешним другим устройствам”, ни, уж тем более, к " человеку-оператору, системе меню и другим программным конструкциям".

Кстати, придумали их в 1955 году. Это о “кремнии и о создании процессоров”.

1 лайк