Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 22.12.2021
Сообщений: 47

Реализовать модель автомата на ЭВМ

13.04.2023, 14:36. Показов 954. Ответов 13

Студворк — интернет-сервис помощи студентам
Реализовать модель автомата на ЭВМ.
Требования к написанию программы:
1) программа должна работать для любого задаваемого автомата;
2) автомат задается в файле «avtomat.txt»;
3) входная цепочка задается в файле «cep.txt»;
Замечание: входная цепочка задается без дополнительного параметра, указывающего на количество элементов в вводимой цепочке.

Нет никакого опыта в написании таких программ, а срок сдачи уже через пару дней.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.04.2023, 14:36
Ответы с готовыми решениями:

Модель автомата
Создаю модель ATM. В консоле есть замечания, в частности 16 строка. Помогите, знает кто, пожалуйста?! К записи прикреплю фото, спасиб.

Модель игрового автомата
Нужна модель в AnyLogic В слот-бар приходят клиенты. В игральный автомат каждые t1±0,3t1 минут опускается монета номиналом «c1»...

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

13
98 / 75 / 25
Регистрация: 17.03.2023
Сообщений: 161
13.04.2023, 15:30
Я бы сказал что задача совсем не из тривиальных. Я конечно могу постараться, однако без хотя бы базовых навыков вам будет достаточно сложно защищать решение.

Это всё что вам дали?
Просто этих критерий не совсем достаточно. Например что значит "любого задаваемого автомата"? Примеров файлов avtomat.txt и cep.txt не приложили?
0
0 / 0 / 0
Регистрация: 22.12.2021
Сообщений: 47
13.04.2023, 16:33  [ТС]
Нет, не приложили ни автомата, ни входной цепочки. Программа должна работать для любого автомата. Как я понимаю, могу выбрать автомат сам, программу я выполнил, но мне необходимо верно заполнить avtomat.txt и cep.txt для выбранного мною автомата (прилагаю программу и примеры заполнения)
И нет, нам не предоставили пример для заполнения, реализовывать его необходимо самостоятельно.
Пример заполнения avtomat.txt:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
3 <число состояний>
2 <число символов в алфавите>
q0 <начальное состояние>
1 <количество конечных состояний>
q2 <конечные состояния>
<таблица переходов>
q0 q2 
q0 a q1
q0 b q0
q1 a q1
q1 b q2
q2 a q2
q2 b q2
Как мне верно заполнить cep.txt и как интерпретировать общие переменные в avtomat.txt под выбранный автомат не совсем понимаю.
Для чтения таблицы переходов, я создал метод readTransitions, который будет создаёт объект Map, в котором ключом является пара (состояние, символ) а значением - состояние, в которое осуществляется переход.
Выбранный мною автомат приложен картинкой в сообщении ниже:
Вложения
Тип файла: zip Automaton.zip (1.2 Кб, 6 просмотров)
0
0 / 0 / 0
Регистрация: 22.12.2021
Сообщений: 47
13.04.2023, 16:41  [ТС]
Выбранный автомат:
Изображения
 
0
98 / 75 / 25
Регистрация: 17.03.2023
Сообщений: 161
13.04.2023, 18:13
Цитата Сообщение от TheReedGames Посмотреть сообщение
Программа должна работать для любого автомата.
просто автоматы бывают совершенно разные, бывают не только конечные и даже конечные могут быть как детерминированные так и недетерминированные. Полагаю здесь всё таки имеется в виду только детерминированный конечный автомат, а формулировка "любой автомат" подразумевает возможность конфигурации состояний и переходов задавая структуру любого детерминированного конечного автомата через некий файл.

Цитата Сообщение от TheReedGames Посмотреть сообщение
Как мне верно заполнить cep.txt
ну например просто последовательность переходов вроде
a b b a a a b a

Цитата Сообщение от TheReedGames Посмотреть сообщение
Для чтения таблицы переходов, я создал метод readTransitions, который будет создаёт объект Map, в котором ключом является пара (состояние, символ) а значением - состояние, в которое осуществляется переход.
Тут возможны разные варианты. Можно конечно всё запихнуть в одну Map. Но по моему это не очень практикабильно. Можно строить отдельные классы для автомата, состояний и переходов. Можно ограничится только классами автомата и состояний (в списке автомата) а переходы реализовать в Map состояния где ключом будет символ (String) а значением целевое состояние перехода (State). Как минимум всё таки должен быть отдельный класс автомат у которого есть определенное состояние иначе это будет сложно назвать моделью автомата, даже если программа будет вести себя как автомат.

Цитата Сообщение от TheReedGames Посмотреть сообщение
Выбранный мною автомат приложен картинкой в сообщении ниже:
хм однако это не совсем совпадает с вашей avtomat.txt. Тут я вижу 6 состояний а переходы допускают лишь символы 0 и 1 а не abc.

Что касается avtomat.txt, в принципе достаточно будет лишь таблицы переходов, всё остальное выше лишнее. Зачем вам например указывать количество состояний? Оно следует из таблицы переходов. Если же вы будете дополнительно указывать количество состояний вы в принципе допускаете конфликт с таблицей переходов и этот кейс надо будет как то обрабатывать. Мой совет уберите всё лишнее, будет меньше вопросов и возможностей вас подловить на чем то.

Короче я попробую что то построить исходя из ваших примеров, дальше обсудим.
0
0 / 0 / 0
Регистрация: 22.12.2021
Сообщений: 47
13.04.2023, 19:14  [ТС]
Проверьте, правильно ли я всё сделал. Старался следовать вашим советам
Вложения
Тип файла: zip Automaton v2.zip (1.6 Кб, 4 просмотров)
0
98 / 75 / 25
Регистрация: 17.03.2023
Сообщений: 161
13.04.2023, 19:44
Лучший ответ Сообщение было отмечено TheReedGames как решение

Решение

И так вроде что то получилось.

И так я выбрал для тестирования такой автомат



подготовил исходники.

avtomat.txt
Code
1
2
3
4
S1:a>S2
S2:a>S2,b>S1,c>S4
S3:a>S1,b>S4
S4:d>S3
По сути это таблица переходов только группированная по состояниям.

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

Это лишь один из возможных вариантов, можно также описать автомат и в различных других форматах.

так будет выглядеть cep.txt

Code
1
a a a c d b d
по сути просто перечень переходов. Если взглянуть на схему автомата выше, по этому пути в итоге мы должны оказаться в состоянии S3.

начнем с реализации класса State описывающий объекты конкретных состояний.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class State {
 
    public final String name;
 
    // список возможных переходов из данного состояния
    // ключ - название перехода, значение - объект перехода
    private Map<String, State> transitions = new HashMap<String, State>();
 
    State(String name){
        this.name = name;
    }
    
    public void addTransition(String name, State state) {
        transitions.put(name, state);
    }
 
    public State getNextState(String transition) {
        State nextState = transitions.get(transition);
        if(nextState == null)
            throw new IllegalArgumentException("Переход "+transition+" в данном состоянии не допустим");
        return nextState;
    }
 
    @Override
    public String toString() {
        return name;
    }
}
У каждого объекта класса State есть определенное название и набор возможных переходов реализованных в структуре Map. При этом ключом является название перехода, а значением следующее состояние (другой объект класса State).
Объект класса State позволяет добавлять переходы указав название перехода и целевой переход (другой объект класса State).
Так же есть возможность получить объект следующего состояния исходя из названия перехода. Если же такой переход не допустим (не известен) кидается IllegalArgumentException.

Далее реализуем класс StateMachine описывающий собственно сам автомат.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
public class StateMachine {
 
    private final static String MACHINE_DEFINITION_FILE = "avtomat.txt";
 
 
    public State currentState;
 
    public List<State> states = new ArrayList<State>();
 
    StateMachine() {
        // читаем файл задающий автомат и складываем отдельные строчки в список lines
        List<String> lines = new ArrayList<String>();
        try(Scanner scanner = new Scanner(new File(MACHINE_DEFINITION_FILE))) {
            while (scanner.hasNextLine()) {
                lines.add(scanner.nextLine());
            }
        } catch (FileNotFoundException e) {
            System.out.println(MACHINE_DEFINITION_FILE+" не найдено!");
            System.exit(0);
        }
 
        // обрабатываем список lines выбирая из каждой строчки название состояния
        // далее конструируем обьекты состояний добавляя их в список состояний автомата
        for(String line : lines) {
            String stateName = line.split(":")[0];
            this.states.add(new State(stateName));
        }
 
        // ещё раз проходим список lines выбирая из каждой строчки переходы
        // добавляя их соответсвтенно к отдельным состояниям
        for (String line : lines) {
            String stateName = line.split(":")[0];
            for(String transition : line.split(":")[1].split(",")) {
                String transitionName = transition.split(">")[0];
                String targetStateName = transition.split(">")[1];
                this.getStateByName(targetStateName);
                State state = this.getStateByName(stateName);
                State targetState = this.getStateByName(targetStateName);
                state.addTransition(transitionName, targetState);
            }
        }
 
        // приводим автомат в первое состояние в списке считая его по определению исходным.
        currentState = states.get(0);
    }
 
    public State getStateByName(String stateName) {
        for (State state : states) {
            if(state.name.equals(stateName))
                return state;
        }
        throw new IllegalStateException("State "+stateName+" is not defined");
    }
 
    public void printState() {
        System.out.println("Автомат в состоянии "+currentState);
    }
 
    public void transit(String transition) {
        currentState = currentState.getNextState(transition);
    }
 
}
Автомат имеет свое настоящее состояние (currentState) а так же список возможных состояний (states).
Он способен выводить настоящее состояние автомата на экран методом printState.
Он позволяет переводить автомат в другое состояние указав название перехода методом transit.
А так же выбирать отдельные объекты возможных состояний по их названию методом (getStateByName).

Самое интересное происходит в конструкторе.
Тут вся логика постройки автомата исходя от исходного файла avtomat.txt.
Сначала мы читаем исходный файл по строчкам.
Далее из каждой строчки сначала строим объекты состояний, однако пока без переходов.
Далее строим отдельные переходы для каждого состояния и добавляем их соответственно к состояниям.
В данном решении необходимо проходить список строчек дважды, ибо добавление переходов требует указать конкретный объект состояния, то есть требуется сначала построить объекты состояний и только потом добавлять переходы.

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

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class ConsoleClient {
 
    private final static String INPUT_FILE = "cep.txt";
 
    private static StateMachine stateMachine;
 
    public static void main(String[] args) {
        stateMachine = new StateMachine();
        stateMachine.printState();
 
        try(Scanner input = new Scanner(new File(INPUT_FILE))) {
            String[] transitions = input.nextLine().split(" ");
            for (String transition : transitions) {
                System.out.println("переход "+transition);
                stateMachine.transit(transition);
                stateMachine.printState();
            }
        } catch (FileNotFoundException e) {
            System.out.println(INPUT_FILE + " не найден");
            System.exit(0);
        }
    }
}
сначала строится сам автомат (stateMachine).
сразу даем команду выдать на экран настоящее состояние. Это будет S1 ибо S1 первое состояние в avtomat.txt и по определению является исходным.
Далее читаем файл с входной цепочкой интерпретируя каждое отдельное слово/символ в качестве перехода.
Для каждого перехода даем автомату команду произвести этот переход (transit) и вывести свое состояние на экран.

Запуск программы выводит на экран
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Автомат в состоянии S1
переход a
Автомат в состоянии S2
переход a
Автомат в состоянии S2
переход a
Автомат в состоянии S2
переход c
Автомат в состоянии S4
переход d
Автомат в состоянии S3
переход b
Автомат в состоянии S4
переход d
Автомат в состоянии S3
1
98 / 75 / 25
Регистрация: 17.03.2023
Сообщений: 161
13.04.2023, 20:09
Цитата Сообщение от TheReedGames Посмотреть сообщение
Проверьте, правильно ли я всё сделал.
сейчас время не позволяет, посмотрю позже.
0
0 / 0 / 0
Регистрация: 22.12.2021
Сообщений: 47
13.04.2023, 22:10  [ТС]
Цитата Сообщение от IOException Посмотреть сообщение
И так вроде что то получилось.

И так я выбрал для тестирования такой автомат

Вложение 1413916

подготовил исходники.

avtomat.txt
Code
1
2
3
4
S1:a>S2
S2:a>S2,b>S1,c>S4
S3:a>S1,b>S4
S4:d>S3
По сути это таблица переходов только группированная по состояниям.

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

Это лишь один из возможных вариантов, можно также описать автомат и в различных других форматах.

так будет выглядеть cep.txt

Code
1
a a a c d b d
по сути просто перечень переходов. Если взглянуть на схему автомата выше, по этому пути в итоге мы должны оказаться в состоянии S3.

начнем с реализации класса State описывающий объекты конкретных состояний.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class State {
 
    public final String name;
 
    // список возможных переходов из данного состояния
    // ключ - название перехода, значение - объект перехода
    private Map<String, State> transitions = new HashMap<String, State>();
 
    State(String name){
        this.name = name;
    }
    
    public void addTransition(String name, State state) {
        transitions.put(name, state);
    }
 
    public State getNextState(String transition) {
        State nextState = transitions.get(transition);
        if(nextState == null)
            throw new IllegalArgumentException("Переход "+transition+" в данном состоянии не допустим");
        return nextState;
    }
 
    @Override
    public String toString() {
        return name;
    }
}
У каждого объекта класса State есть определенное название и набор возможных переходов реализованных в структуре Map. При этом ключом является название перехода, а значением следующее состояние (другой объект класса State).
Объект класса State позволяет добавлять переходы указав название перехода и целевой переход (другой объект класса State).
Так же есть возможность получить объект следующего состояния исходя из названия перехода. Если же такой переход не допустим (не известен) кидается IllegalArgumentException.

Далее реализуем класс StateMachine описывающий собственно сам автомат.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
public class StateMachine {
 
    private final static String MACHINE_DEFINITION_FILE = "avtomat.txt";
 
 
    public State currentState;
 
    public List<State> states = new ArrayList<State>();
 
    StateMachine() {
        // читаем файл задающий автомат и складываем отдельные строчки в список lines
        List<String> lines = new ArrayList<String>();
        try(Scanner scanner = new Scanner(new File(MACHINE_DEFINITION_FILE))) {
            while (scanner.hasNextLine()) {
                lines.add(scanner.nextLine());
            }
        } catch (FileNotFoundException e) {
            System.out.println(MACHINE_DEFINITION_FILE+" не найдено!");
            System.exit(0);
        }
 
        // обрабатываем список lines выбирая из каждой строчки название состояния
        // далее конструируем обьекты состояний добавляя их в список состояний автомата
        for(String line : lines) {
            String stateName = line.split(":")[0];
            this.states.add(new State(stateName));
        }
 
        // ещё раз проходим список lines выбирая из каждой строчки переходы
        // добавляя их соответсвтенно к отдельным состояниям
        for (String line : lines) {
            String stateName = line.split(":")[0];
            for(String transition : line.split(":")[1].split(",")) {
                String transitionName = transition.split(">")[0];
                String targetStateName = transition.split(">")[1];
                this.getStateByName(targetStateName);
                State state = this.getStateByName(stateName);
                State targetState = this.getStateByName(targetStateName);
                state.addTransition(transitionName, targetState);
            }
        }
 
        // приводим автомат в первое состояние в списке считая его по определению исходным.
        currentState = states.get(0);
    }
 
    public State getStateByName(String stateName) {
        for (State state : states) {
            if(state.name.equals(stateName))
                return state;
        }
        throw new IllegalStateException("State "+stateName+" is not defined");
    }
 
    public void printState() {
        System.out.println("Автомат в состоянии "+currentState);
    }
 
    public void transit(String transition) {
        currentState = currentState.getNextState(transition);
    }
 
}
Автомат имеет свое настоящее состояние (currentState) а так же список возможных состояний (states).
Он способен выводить настоящее состояние автомата на экран методом printState.
Он позволяет переводить автомат в другое состояние указав название перехода методом transit.
А так же выбирать отдельные объекты возможных состояний по их названию методом (getStateByName).

Самое интересное происходит в конструкторе.
Тут вся логика постройки автомата исходя от исходного файла avtomat.txt.
Сначала мы читаем исходный файл по строчкам.
Далее из каждой строчки сначала строим объекты состояний, однако пока без переходов.
Далее строим отдельные переходы для каждого состояния и добавляем их соответственно к состояниям.
В данном решении необходимо проходить список строчек дважды, ибо добавление переходов требует указать конкретный объект состояния, то есть требуется сначала построить объекты состояний и только потом добавлять переходы.

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

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class ConsoleClient {
 
    private final static String INPUT_FILE = "cep.txt";
 
    private static StateMachine stateMachine;
 
    public static void main(String[] args) {
        stateMachine = new StateMachine();
        stateMachine.printState();
 
        try(Scanner input = new Scanner(new File(INPUT_FILE))) {
            String[] transitions = input.nextLine().split(" ");
            for (String transition : transitions) {
                System.out.println("переход "+transition);
                stateMachine.transit(transition);
                stateMachine.printState();
            }
        } catch (FileNotFoundException e) {
            System.out.println(INPUT_FILE + " не найден");
            System.exit(0);
        }
    }
}
сначала строится сам автомат (stateMachine).
сразу даем команду выдать на экран настоящее состояние. Это будет S1 ибо S1 первое состояние в avtomat.txt и по определению является исходным.
Далее читаем файл с входной цепочкой интерпретируя каждое отдельное слово/символ в качестве перехода.
Для каждого перехода даем автомату команду произвести этот переход (transit) и вывести свое состояние на экран.

Запуск программы выводит на экран
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Автомат в состоянии S1
переход a
Автомат в состоянии S2
переход a
Автомат в состоянии S2
переход a
Автомат в состоянии S2
переход c
Автомат в состоянии S4
переход d
Автомат в состоянии S3
переход b
Автомат в состоянии S4
переход d
Автомат в состоянии S3
У вас прекрасная реализация, но можно ли как-то добавить проверку принимает ли язык программы наш автомат?
0
98 / 75 / 25
Регистрация: 17.03.2023
Сообщений: 161
14.04.2023, 06:39
Цитата Сообщение от TheReedGames Посмотреть сообщение
можно ли как-то добавить проверку принимает ли язык программы наш автомат?
в какой то мере да. По крайней мере можно провести проверку на верный синтаксис, то есть мы можем проверить исходник на наличие только таких знаков которые известны автомату хотя бы в одном из состояний. Если автомат понимает abcd итд.. можно проверить программу нет ли в исходнике каких ни будь других инструкций которые автомату вообще не известны ни в каком из его состояний. Однако проверить имеет ли исходник смысл и указывает ли он верный путь который действительно приводит куда то, это проверить можно только при выполнении. Как в моем примере в состоянии S1 автомат принимает только символ "a", а программа ему дает допустим "б", то произойдет ошибка при выполнении, хотя "б" в принципе он принимает, но не в состоянии S1. Так собственно и должен себя вести автомат, но такие ошибки можно проверить только пройдя всю программу.
0
0 / 0 / 0
Регистрация: 22.12.2021
Сообщений: 47
14.04.2023, 16:31  [ТС]
Уже понял, почему так. Но не можете подсказать как добавить функцию проверки синтаксиса?
Миниатюры
Реализовать модель автомата на ЭВМ  
0
98 / 75 / 25
Регистрация: 17.03.2023
Сообщений: 161
14.04.2023, 17:51
При строении автомата собираем допустимые переходы в сет.
При чтении цепочки проверяем все элементы на присутствие в сете допустимых переходов.
Для этого целесообразно реализовать метод проверки в самом автомате.

Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
public class StateMachine {
 
    private final static String MACHINE_DEFINITION_FILE = "avtomat.txt";
 
 
    public State currentState;
 
    public List<State> states = new ArrayList<State>();
    public Set<String> transitions = new HashSet<String>();
 
    StateMachine() {
        // читаем файл задающий автомат и складываем отдельные строчки в список lines
        List<String> lines = new ArrayList<String>();
        try(Scanner scanner = new Scanner(new File(MACHINE_DEFINITION_FILE))) {
            while (scanner.hasNextLine()) {
                lines.add(scanner.nextLine());
            }
        } catch (FileNotFoundException e) {
            System.out.println(MACHINE_DEFINITION_FILE+" не найдено!");
            System.exit(0);
        }
 
        // обрабатываем список lines выбирая из каждой строчки название состояния
        // далее конструируем обьекты состояний добавляя их в список состояний автомата
        for(String line : lines) {
            String stateName = line.split(":")[0];
            this.states.add(new State(stateName));
        }
 
        // ещё раз проходим список lines выбирая из каждой строчки переходы
        // добавляя их соответсвтенно к отдельным состояниям
        for (String line : lines) {
            String stateName = line.split(":")[0];
            for(String transition : line.split(":")[1].split(",")) {
                String transitionName = transition.split(">")[0];
                String targetStateName = transition.split(">")[1];
                this.getStateByName(targetStateName);
                State state = this.getStateByName(stateName);
                State targetState = this.getStateByName(targetStateName);
                state.addTransition(transitionName, targetState);
                transitions.add(transitionName);
            }
        }
 
        // приводим автомат в первое состояние в списке считая его по определению исходным.
        currentState = states.get(0);
    }
 
    public State getStateByName(String stateName) {
        for (State state : states) {
            if(state.name.equals(stateName))
                return state;
        }
        throw new IllegalStateException("State "+stateName+" is not defined");
    }
 
    public void printState() {
        System.out.println("Автомат в состоянии "+currentState);
    }
 
    public void transit(String transition) {
        currentState = currentState.getNextState(transition);
    }
 
    public boolean isValidTransition(String transition) {
        return transitions.contains(transition);
    }
 
    public void validateTransitions(String[] transitions) {
        for (String transition : transitions) {
            if(!isValidTransition(transition))
                throw new IllegalArgumentException("Автомат не допускает переход "+transition);
        }
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class ConsoleClient {
 
    private final static String INPUT_FILE = "cep.txt";
 
    private static StateMachine stateMachine;
 
    public static void main(String[] args) {
        stateMachine = new StateMachine();
        System.out.println("допустимые переходы: "+stateMachine.transitions);
 
        try(Scanner input = new Scanner(new File(INPUT_FILE))) {
            String[] transitions = input.nextLine().split(" ");
            stateMachine.validateTransitions(transitions);
            stateMachine.printState();
            for (String transition : transitions) {
                System.out.println("переход "+transition);
                stateMachine.transit(transition);
                stateMachine.printState();
            }
        } catch (FileNotFoundException e) {
            System.out.println(INPUT_FILE + " не найден");
            System.exit(0);
        } catch (IllegalArgumentException e) {
            System.out.println(e.getMessage());
        }
    }
}
Code
1
a a a x c d b d
допустимые переходы: [a, b, c, d]
Автомат не допускает переход x


1
0 / 0 / 0
Регистрация: 22.12.2021
Сообщений: 47
14.04.2023, 23:26  [ТС]
Спасибо, моя ситуация разрешена и я стал понимать немного больше! ♥
0
98 / 75 / 25
Регистрация: 17.03.2023
Сообщений: 161
15.04.2023, 06:26
рад что мог помочь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.04.2023, 06:26
Помогаю со студенческими работами здесь

Модель автомата Мили в Матлаб
Составить в системе MATLAB программную модель конечного автомата Мили, имеющего следующие алфавиты: Z={1,2,3,4,5,6,7,8,9,10} X={0,1} ...

Модель автомата Мура в Матлаб
Составить в системе MATLAB программную модель конечного автомата Мура, имеющего следующие алфавиты: Z={1,2,3,4,5,6,7,8,9,10} X={-1,0,1}...

Модель работы ЭВМ
Вот задание: ЭВМ обслуживает три терминала по круговому циклическому алгоритму, предоставляя каждому терминалу 30 с. Если в течение...

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

Модель АСУ с двумя ЭВМ
Для обеспечения надежности АСУ ТП в ней используется две ЭВМ. Первая ЭВМ выполняет обработку данных о технологическом процессе и выработку...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru