Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/19: Рейтинг темы: голосов - 19, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 30.11.2015
Сообщений: 34
1

Написать программу автомат поиска слова baac

06.12.2018, 14:07. Показов 3755. Ответов 20

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Помогите пожалуйста реализовать автомат поиска слова baac

Задание.
Дан алфавит A=(a,b,c). Как только обнаруживается слово baac печатает 1, в другом случаем 0 .

Если возможно через SWITCH пожалуйста?
Миниатюры
Написать программу автомат поиска слова baac  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.12.2018, 14:07
Ответы с готовыми решениями:

Написать программу реализующую конечный автомат, который распознает слова
(abc)nd(ef)m, , n≥0, m≥0 желательно с объяснением

Написать программу для поиска симметричного слова
Всем добрый вечер. Прошу не смеяться по поводу вычислений внутри цикла. Требовалось написать...

Написать программу автомат SOS
Здравствуйте. Помогите пожалуйста реализовать автомат sos. :help: Задание. Дан алфавит...

Написать программу поиска заданного значения в отсортированном массиве методом двоичного поиска
Помогите с программой, вот задание: Написать программу поиска заданного значения в...

20
Мозгоправ
1744 / 1038 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2
06.12.2018, 16:27 2
Лучший ответ Сообщение было отмечено Alexei Orlovski как решение

Решение

C++
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
#include <iostream>
#include <string>
 
using namespace std;
 
const string pattern = "baac";
 
int main() {
 
    string str = "abacbaacbaacbbaabc";
    
    cout << str << endl;
 
    size_t j = 0;
    bool found = false;
    for (size_t i = 0; i < str.size(); ++i) {
        if (str[i] == pattern[j])
            ++j;
        else
            j = 0;
        if (j == pattern.size()) {
            found = true;
            j = 0;
        }
        if (found) {
            cout << '1';
            found = false;
        }
        else
            cout << '0';
    }
    cout << endl;
 
    return 0;
}
Со SWITCH, извини, не сложилось
0
0 / 0 / 0
Регистрация: 30.11.2015
Сообщений: 34
06.12.2018, 23:14  [ТС] 3
L0M, Спасибо большое за ответ, все работает, а можно сделать пожалуйста чтобы ввод с клавиатуры был ?
0
119 / 94 / 35
Регистрация: 18.12.2012
Сообщений: 654
06.12.2018, 23:30 4
Alexei Orlovski, "cin"
0
0 / 0 / 0
Регистрация: 30.11.2015
Сообщений: 34
06.12.2018, 23:36  [ТС] 5
Цитата Сообщение от alkl Посмотреть сообщение
cin
Я знаю что cin хз, как поменять ?
0
119 / 94 / 35
Регистрация: 18.12.2012
Сообщений: 654
06.12.2018, 23:46 6
C++
1
cout << str << endl;
на
C++
1
cin >> str ;
1
Фрилансер
3705 / 2077 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
06.12.2018, 23:47 7
L0M, и где тут автомат, а?
0
0 / 0 / 0
Регистрация: 30.11.2015
Сообщений: 34
06.12.2018, 23:47  [ТС] 8
alkl, мозги включились спс большое

C++
1
2
 string str ;
 getline(cin,str);
0
alkl
06.12.2018, 23:47
  #9

Не по теме:


Цитата Сообщение от Alexei Orlovski Посмотреть сообщение
спс большое
Приучайтесь говорить спасибо с помощью соответствующей кнопки.

0
119 / 94 / 35
Регистрация: 18.12.2012
Сообщений: 654
06.12.2018, 23:57 10
Цитата Сообщение от Black Fregat Посмотреть сообщение
и где тут автомат, а?
Ну, вообще, фразу "автомат поиска" можно с трудом понять. Возможно, имелось в виду "автомат состояний", но каждый может фразу ТС'а расценивать по-своему.
1
Фрилансер
3705 / 2077 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
07.12.2018, 00:02 11
Цитата Сообщение от alkl Посмотреть сообщение
Возможно, имелось в виду "автомат состояний"
Я бы сказал, что условие
Цитата Сообщение от Alexei Orlovski Посмотреть сообщение
через SWITCH
как бы намекает..
Но раз ТС доволен - пусть
0
0 / 0 / 0
Регистрация: 30.11.2015
Сообщений: 34
07.12.2018, 00:16  [ТС] 12
Black Fregat, Ну тут реализовано не как по автомату, а просто если находит данное слово то выводит 1 в конце, наглядней видно будет если реализовать через SWITCH, ну я не знаю как это сделать , спасибоL0M, что помог .


На бумаге выглядит так
Миниатюры
Написать программу автомат поиска слова baac  
0
0 / 0 / 0
Регистрация: 30.11.2015
Сообщений: 34
07.12.2018, 00:19  [ТС] 13
Black Fregat, А вы можете реализовать данное задание через SWITCH , если да. Помогите пожалуйста ?
0
119 / 94 / 35
Регистрация: 18.12.2012
Сообщений: 654
07.12.2018, 01:03 14
Лучший ответ Сообщение было отмечено Alexei Orlovski как решение

Решение

Пример с автоматом :
C++
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
#include <iostream>
#include <windows.h>
#include <string>
 
using namespace std;
 
 
enum {
    FIND_STATE,
    VERIFING_STATE,
    EXIT_STATE
}state = FIND_STATE;
 
const string pattern = "baac";
 
    
 
int main() {
    SetConsoleCP (1251);
    SetConsoleOutputCP (1251);
 
    int n = 0, ver_ch = 0;
 
    string str = "abacbaacbaacbbaabc";
    cout << str << endl;
    
    /************************************************************/
    while((n < str.size()) && (state != EXIT_STATE)){
        char    ch = str[n++];
        switch(state){
            case FIND_STATE:
                if(ch == pattern[0]){
                    state = VERIFING_STATE;
                    ver_ch = 1;
                }
                cout << 0;
            break;
            case VERIFING_STATE:
                if(ch != pattern[ver_ch++]){
                    cout << 0;
                    state = FIND_STATE;
                    break;
                }
                if(ver_ch >= pattern.size()){
                    cout << 1;
                    state = FIND_STATE;
                    break;
                }
                cout << 0;
            break;
            default:
                state = EXIT_STATE;
        }
    }
    /************************************************************/
 
    cout << endl << endl << endl;
 
    system ("pause");
    return 0;
}
Миниатюры
Написать программу автомат поиска слова baac  
0
0 / 0 / 0
Регистрация: 30.11.2015
Сообщений: 34
07.12.2018, 01:25  [ТС] 15
alkl, Спасибо большое за решение, а что тут происходит можно краткие надписи пожалуйста:

C++
1
2
SetConsoleCP (1251);
SetConsoleOutputCP (1251);
C++
1
2
3
4
 FIND_STATE,
    VERIFING_STATE,
    EXIT_STATE
}state = FIND_STATE;
C++
1
2
3
 while((n < str.size()) && (state != EXIT_STATE)){
        char    ch = str[n++];
        switch(state){
0
119 / 94 / 35
Регистрация: 18.12.2012
Сообщений: 654
07.12.2018, 01:33 16
C++
1
2
SetConsoleCP (1251);
SetConsoleOutputCP (1251)
Это, в данной программе, вообще не нужно. Забыл убрать.

C++
1
2
3
4
5
enum {
    FIND_STATE,
    VERIFING_STATE,
    EXIT_STATE
}state = FIND_STATE;
Это обычное перечисление. Нужно для текущего состояния автомата.

C++
1
2
3
4
 
while((n < str.size()) && (state != EXIT_STATE)){
        char    ch = str[n++];
        switch(state){
Тут вообще азы. Ну и Ваш switch, который Вы хотели
1
Nishen
07.12.2018, 01:36
  #17

Не по теме:

Цитата Сообщение от alkl Посмотреть сообщение
Приучайтесь говорить спасибо с помощью соответствующей кнопки.
5.10?

0
0 / 0 / 0
Регистрация: 30.11.2015
Сообщений: 34
07.12.2018, 01:53  [ТС] 18
alkl, окей почитаю азы ,
0
Мозгоправ
1744 / 1038 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2
07.12.2018, 02:55 19
Цитата Сообщение от Black Fregat Посмотреть сообщение
и где тут автомат, а?
Автомат под кроватью

Когда читал вопрос, про конечные автоматы даже не подумал. Задачка больно незамысловатая. Стормозил-с

Цитата Сообщение от alkl Посмотреть сообщение
Пример с автоматом
На самом деле, у вас написано почти то же самое, что и у меня. Только у меня без явного состояния. Вот более чистый вариант моего кода
C++
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
#include <iostream>
#include <string>
 
using namespace std;
 
const string pattern = "baac";
 
int main() {
 
    string str = "abacbaacbaacbbaabc";
 
    cout << str << endl;
 
    size_t j = 0;
    for (size_t i = 0; i < str.size(); ++i) {
        if (str[i] == pattern[j])
            ++j;
        else
            j = 0;
        if (j == pattern.size()) {
            cout << '1';
            j = 0;
            continue;
        }
        cout << '0';
    }
    cout << endl;
 
    return 0;
}
Моя переменная j соответствует вашей ver_ch. Цикл for повторяет ваш while, поскольку условие (state != EXIT_STATE) всегда истинно. Остальное тоже достаточно прозрачно ложится одно на другое.

Вот так одна переменная состояния и оператор switch делают из обычного кода конечный автомат

PS. Зато у меня код вдвое короче
1
119 / 94 / 35
Регистрация: 18.12.2012
Сообщений: 654
07.12.2018, 03:01 20
У меня, какбэ, цели не было сделать код минимальным. Просто попытался продемонстрировать человеку автомат состояния на switch'е, и всё...

Добавлено через 1 минуту
Цитата Сообщение от L0M Посмотреть сообщение
условие (state != EXIT_STATE) всегда истинно
Блин, что-то ведь я хотел сделать с этим состоянием, но по всей видимости забыл
1
07.12.2018, 03:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.12.2018, 03:01
Помогаю со студенческими работами здесь

Написать программу добавления слова «hello» после первого слова введенной строки
Помогите( сколько искал ничего нету.

Написать программу добавления слова «hello» после первого слова введенной строки
Написать программу добавления слова «hello» после первого слова введенной строки C++

Переделать программу с поиска символов на слова в С++
Помогите пожалуйста! Программа считает количество каждого символа в файле, а нужно посчитать...

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru