Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
crewww
30 / 1 / 1
Регистрация: 28.10.2010
Сообщений: 102
#1

Неясность условия (Моделирование автомата) - C++

02.12.2012, 18:09. Просмотров 347. Ответов 0
Метки нет (Все метки)

1.1 Моделирование автомата
Автоматом  называется некоторое устройство, которое математи-чески описывается тремя множествами X, Y, S и диаграммой D работы:
X = {x1, x2, … , xn} – множество входных символов;
Y = {y1, y2, … , ym} – множество выходных символов;
S = {s1, s2, … , sk}  множество состояний.
Диаграмма строится так. Рисуется К кружков и внутри каждого из них помещается по символу из множества S. Из каждого кружка выводится n стрелок, которые доводятся до кружков (стрелка может выйти из круж-ка и зайти в него же, две стрелки могут соединять одну и ту же пару кружков). Около каждой стрелки пишется пара символов а/b, где а X и bY, с единственным условием: разные стрелки, выходящие из одного (любого) кружка, помечаются парами с разными символами из X. Таким образом,  = {X, Y, S, D}.
Работа автомата складывается из тактов (номер такта обозначается буквой t , t = 1, 2, 3, …). На каждом такте на вход автомата подается один из входных символов: на первом такте символ а1 X, на втором – а2 X и т.д. Последовательность входных символов a1, a2, …, a r называется входным словом и обозначается через A. В ответ на входное слово автомат вырабатывает (на своем выходе) последовательность b1, b2, … , br символов из Y, т.е. образуется выходное слово, обозначаемое через B.
Выходное слово образуется так. Перед первым тактом автомат уста-навливается в состоянии c0 S. В общем случае – перед тактом t автомат оказался в состоянии ct-1  S. Тогда в диаграмме находится кружок с символом ct-1 и выходящая из него стрелка с парой, содержащей символ at . Второй символ из пары – это и есть выходной символ bt , а к следующему (t + 1) – му такту автомат оказывается в том состоянии (ct  S), к которому приводит эта стрелка.
Задание. Построить программу, моделирующую работу конкретного автомата  и решающую для этого автомата задачу М.

II. Задача М. При заданном начальном состоянии c0 S и заданном входном слове A длины r определить:

д) максимальную длину подслов B , состоящих только из символа y1 (т.е. максимальную длину повторения символа y1);

с моделированием автомата все предельно ясно, а со второй частью возникают вопросы
вот мой код
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#include <iostream>
#include <fstream>
#include <stdlib.h>
 
using namespace std;
void check()
{
    ifstream f("in.txt");
    char a;
    while(f.get(a))
    {
        if(a!='+'&&a!='-')
        {
            cout<<"check the file"<<endl;
            system("pause");
            exit(1);
        }
    }
    f.close();
}
void constr()
{
    ifstream f("in.txt");
    ofstream o("out.txt");
    int q=1;
    char a;
    while(f.get(a))
    {
        switch(q)
        {
        case 1:
            if(a=='+')
            {
                o<<"0";
                q=2;
            }
            else
            {
                o<<"2";
                q=3;
            }
            break;
        case 2:
            if(a=='+')
            {
                o<<"2";
                q=4;
            }
            else
            {
                o<<"1";
                q=1;
            }
            break;
        case 3:
            if (a=='+')
            {
                o<<"0";
                q=2;
            }
            else
            {
                o<<"4";
                q=4;
            }
            break;
        case 4:
            if (a=='+')
            {
                o<<"1";
                q=5;
            }
            else
                o<<"1";
            break;
        case 5:
            if (a=='+')
            
            o<<"0";
            else
            o<<"4";
            q=6;    
            break;
        case 6:
            if (a=='+')
            {
                o<<"3";
                q=4;
            }
            else
            o<<"2";
            break;
        }
    }
    o.close();
    f.close();
}
 
void max()
{
    ifstream f("out.txt");
    char a;
    int max=0,k=0;
    while (f.get(a))
    {
        if (a=='0')
            k++;
        else
        {
            if (k>max) max=k;
            k=0;
        }
        
    }
    cout<<"max="<<max<<endl;
    f.close();
    system("pause");
}
    
 
int main()
{
    check(); 
 
    constr();
 
    max();
    return 0;
}
Добавлено через 5 минут
есть еще такой вариант функции max (так как я понял условие) выше то как мне объяснил преподаватель
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
void max()
{
    ifstream o("out.txt");
    int q,i=0,r,y,k=0,max=0;
    cout<<"Enter condition:";
    cin>>q;
    cout<<endl;
    cout<<endl;
    char a;
    while(o.get(a))
    {
    
        switch(q)
        {
        case 1:
            if(a=='0')
            {   k++;
                q=2;
            }
            else
            { if (k>max) max=k;
                q=3;
                k=0;
            }
            break;
        case 2:
            if(a=='0')
            {   k++;
                q=4;
            }
            else
            {
                if(k>max) max=k;
                q=1;
                k=0;
            }
            break;
        case 3:
            if (a=='0')
            {   k++;
                q=2;
            }
            else
            {   if(k>max) max=k;
                q=4;
                k=0;
            }
            break;
        case 4:
            if (a=='0')
            {   k++;
                q=5;
            }
            else
                if (k>max) max=k;
            k=0;
            break;
        case 5:
            if (a=='0')
            k++;
            else
                if (k>max) max=k;
            k=0;
            q=6;    
            break;
        case 6:
            if (a=='0')
            {   k++;
                q=4;
            }
            else
                if(k>max) max=k;
            k=0;
            break;
        }
    }
    o.close();
    cout<<"max = "<<max<<endl;
    system("pause");
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2012, 18:09     Неясность условия (Моделирование автомата)
Посмотрите здесь:

Неясность (аргументы командной строки) - C++
nextArg = 1; while (nextArg &lt; argc) { if ((strlen(argv) &gt; 1) &amp;&amp; ('-' == argv)) ... } Прошу вас...

Неясность в условии (Определить количество маскимальных элементов в массиве) - C++
Попалась такая задача: дан двумерный массив. Определить колличество маскимальных элементов в массиве. У кого какие соображения что под...

Расщепление полного пути к файлу на диск, директорий...(неясность в задании) - C++
Доброго времени суток! Не ожидал от препода излишней адекватности,но сейчас я в ступоре... вот текст задания: &quot; Написать функцию...

Создать программу конечного автомата - C++
Создать программу этого асинхронного автомата. Помогите кто может

Построение конечного недетерминированного автомата - C++
Добрый день, помогите пожалуйста разобраться. Где-то в выполнении алгоритма ошибка. Задача: Постройте конечный автомат, допускающий...

Реализация работы конечного автомата - C++
Задача: Построить конечный автомат, проверяющий есть ли во входной цепочке S хотя бы одна из следующих подстрок: X1=“aaa”; X2=“aab”;...

Алгоритм нахождения минимального конечного автомата - C++
данный алгоритм уже давно известен, а мне нужен его код на с++. Не хотелось бы изобретать велосипед и запариваться с написанием своего...

Написать программное обеспечение игрального автомата C++ - C++
Игральный автомат представляет собой прозрачный контейнер, наполненный при- зами. Внутри контейнера имеется хватательное устройство на...

Построение конечного автомата по регулярной грамматике - C++
G=({S, C, D}, {0, 1}, P, S) P: 1) S→1C | 0D; 2) C→0D | 0S | 1; 3) D→1C | 1S | 0. Нужно выполнить: 1) ввод произвольной...

Построить реализацию автомата по заданному языку - C++
Необходимо построить реализацию автомата по заданному языку: Цепочка пар символов а b произвольной длины, после которой следует символ b;...

построить структурную схему управляющего автомата - C++
Для содержательного графа операции сложения построить структурную схему управляющего автомата с жёсткой логикой.

Реализовать поиск подстрок с помощью недетерминированного конечного автомата - C++
Всем привет!Сразу к сути задачи.Необходимо реализовать поиск подстрок с помощью недетерминированного конечного автомата. Вообще не...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru