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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Обмен значений 2 указателей в функции http://www.cyberforum.ru/cpp-beginners/thread716581.html
Добрый вечер всем. Хочу при помощи функции менять адреса двух указателей. Вот код: #include <iostream> using namespace std; template <typename T> void swap1 (T *a, T *b) { T *temp_a = a; a = b;
C++ Создать класс регион со следующими данными Создать класс регион со следующими данными: название обл., Кол-во жителей, площадь, кол-во учебных заведений, кол-во промышленных предприятий. Создать метод для выполнения следующего действия: вывести названия областей с наибольшей и наименьшей плотностью населения. http://www.cyberforum.ru/cpp-beginners/thread716578.html
C++ Подсчёт количества символов и замена
Подсчитать количество символов + стоящих между А и Б, заменить каждый символ 0 на ОО. Код написала, но в чём ошибка не понимаю:( компилятор ругается:( #include <stdio.h> #include <string.h> #include<conio.h> #include<ctype.h> int poisk_AB(char *str); void zamena(char *str); int main(int argc, char *argv) { if (argc==1){
C++ Отсортировать и выдать на экран список
После ввода с клавиатуры строками некоторых фамилий и рядом с ними возраста (год рождения) отсортировать и выдать на экран этот список, но отсортированными в порядке, обратном алфавитному, фамилиями
C++ Задача на двумерный массив (Удалить все столбцы по условию) http://www.cyberforum.ru/cpp-beginners/thread716558.html
в двумерном массиве , элементы которого все целые числа , произвести следующие действия . Удалить все столбцы , в которых все элементы положительны
C++ Для каждой строки матрицы найти последний четный элемент и записать данные в новый массив Дан массив размером n*n , элементы которого целые числа . Для каждой строки найти последний четный элемент и записать данные в новый массив подробнее

Показать сообщение отдельно
crewww
30 / 1 / 1
Регистрация: 28.10.2010
Сообщений: 102
02.12.2012, 18:09     Неясность условия (Моделирование автомата)
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");
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 20:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru