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

Построить детерминированный конечный распознаватель - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Анкета http://www.cyberforum.ru/cpp-beginners/thread319758.html
Анкета для опроса населения содержит две группы вопросов. Первая группа содержит сведения о респонденте: • возраст; • пол; • образование (начальное, среднее, высшее). Вторая группа содержит собственно вопрос анкеты, ответ на который либо ДА, либо НЕТ. Составить программу, используя последовательные классы стандартной библиотеки шаблонов С++, которая: • обеспечивает начальный ввод...
C++ Начало Си++ Я понимаю что данные задачи очень просты, но помогите пожалуйста...Я просто совсем нечего не шарю.. Задача 1 Дан массив X из N целых чисел. Найти индекс максимального элемента в массиве Х. Задача 2 Дан массив А из N элементов. Переставить элементы массива A в обратном порядке. Задача 3 Дан массив А из N элементов и число X. Определить, имеются ли в массиве A два расположенных рядом значения... http://www.cyberforum.ru/cpp-beginners/thread319728.html
C++ Сумма элементов
Найти сумму элементов массива между первым и вторым отрицательным элементом. Преобразование. Преобразовать массив так чтобы сначала стояли элементы по модулю меньше единицы потом все остальные. Прошу помощи,заранее благодарен.
C++ Строки
В алфавитной строке удалить строчные буквы и удвоить заглавные Пожалуйста, помогите
C++ двумерные массивы http://www.cyberforum.ru/cpp-beginners/thread319718.html
Характеристикой столбца целочисленной матрицы назовем сумму модулей его отрицательных нечетных элементов. Переставляя столбцы заданной матрицы, расположить их в соответствии с ростом характеристик. Найти сумму элементов в тех столбцах, которые содержат хотя бы один отрицательный элемент Помогите, пожалуйста
C++ Геометрическая фигура Постановка задачи. Разработать программу, которая выводит на экран геометрическую фигуру, заполняя ее символом ‘*’ или пробелом. Размер фигуры (n) определяется при вводе. Ниже приведены варианты: 1. Пустой параллелограмм. Основание n и высота n подробнее

Показать сообщение отдельно
Iliabobr
3 / 3 / 1
Регистрация: 04.11.2009
Сообщений: 98

Построить детерминированный конечный распознаватель - C++

14.06.2011, 21:46. Просмотров 2722. Ответов 5
Метки (Все метки)

Всем привет)
у меня проблема, завтра надо курсач сдавать, у меня есть готовая лаба другого варианта, как переделать не знаю, помогите плиз))
Вот мое задание: Построить детерминированный конечный распознаватель для последовательности действительных чисел в формате с фиксированной точкой (число не может начинаться и заканчиваться десятичной точкой), разделенных запятыми, и заканчивающейся символом #, например, (+65.372,-785.34,457.7#);

Вот лаба др. варианта cpp формат
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
# include "konavt.h"
# include <iostream.h>
int main()
{
    konavt tavt;
    tavt.show();
    int povt;
    povt=1;
    while (povt==1) 
    {   tavt.init();
        tavt.show_sost();
        if (!tavt.error)
        {do
        { tavt.sled();
          tavt.show_sost();
        } while (!((tavt.error)&&(tavt.zaversh())));
if ((tavt.zaversh()) && (tavt.konec())) 
cout<<"\n !!!stroka prinimaetsa"<<endl;else
        cout<<"\n !!!stroka ne prinimaetsa"<<endl;}
        cout<<"repeat?(1,0)\n";
        cin>>povt;
        cout<<endl;
    };
    system("pause");
}
а вот .h
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
# include <iostream.h>
# include <fstream.h>
# include <string.h>
# include <stdlib.h>
 
class konavt {int kolsost;// число состояний автомата
                int kolsimv;// число символов входного алфавита
                char *alfavit; // входной алфавит
                int nachstate; //начальное состояние
                int kolkon;//число заключительных состояний         
                int *fin; //заключительные состояния
                int **per;//матрица переходов
                int dlina;// текущая длина входной цепочки
                int dlina0;// начальная длина входной цепочки
                char *vxod;// входная цепочка
                int avtstate; //текущее состояние
                int nomstep;// номер шага автомата
                int *protokol;// протокол работы автомата
public:         
                bool error; //признак ошибки
                konavt();//конструктор без параметров
                void show_sost();//проверка заполнения матрицы
                void sled();//срабатывание переходов
                void show();//показ текущего состояния;
                void init();//инициализация новой строкой
                bool konec();// проверка финальности состояния
                bool zaversh(); //проверка исчерпания строки
            bool proverka();// проверка принадлежности символов алфавиту
};
 
//Файл реализации класса автомата  konavt.cpp
 
//конструктор
konavt::konavt()
{int i,j,vyb;
// возможен ввод исходных данных как из файла, так и с клавиатуры
cout<<"constructor working..."<<endl;
cout <<"Istochnik dannyx(0-klaviatura,1-file)"<<endl;
cin>>vyb;
// ввод с клавиатуры
if (vyb==0)
{   cout<<"\n Enter kolvo sostoianiy\t";
    cin>>kolsost;
    cout<<endl<<"enter kolvo simvolov alfavita\t";
    cin>>kolsimv;
    alfavit=new char [kolsimv];
    per=new int*[kolsost];
    for (i=0;i<kolsost;i++){
        per[i]=new int [kolsimv];
    };
    cout<<endl<<"enter alfavit"<<endl;
    for (j=0;j<kolsimv;j++){
        cin>>alfavit[j];
    };
    cout<<endl<<"enter matrica"<<endl;
    for (i=0;i<kolsost;i++){
    for (j=0;j<kolsimv;j++){
        cin>>per[i][j];
    };
    cout<<endl;
    };
    cout<<"enter nachalnoe sostoianie"<<endl;
    cin>>nachstate;
    cout<<endl;
    cout<<"enter kolvo konechnyh sostoianiy"<<endl;
    cin>>kolkon;
    cout<<endl;
    fin=new int[kolkon];
    cout<<"enter konechnye sostoiania"<<endl;
    for (i=0;i<kolkon;i++){
        cin>>fin[i];
    }
    cout<<endl;
// запись исходных данных в файл
    int otv;
    cout<<"save to file?(1-yes,0-no)";
    cin>>otv;
    cout<<endl;
    if (otv==1)
    {char fname[30];
        cout<<"enter filename  ";
        cin>>fname;
        cout<<endl;
        ofstream out_stream;
        out_stream.open(fname);
        if (out_stream.fail())
            {cout<<"Error output file"<<endl; return;}
                out_stream<<kolsost<<' ';
                out_stream<<kolsimv<<' ';
        for (i=0;i<kolsimv;i++) out_stream<<alfavit[i]<<' ';
        for (i=0;i<kolsost;i++){
            for (j=0;j<kolsimv;j++){
                out_stream<<per[i][j]<<' ';}}
        out_stream<<nachstate<<' ';
        out_stream<<kolkon<<' ';
        for (i=0;i<kolkon;i++)out_stream<<fin[i]<<' ';
        out_stream.close();
        cout<<"End of output file..."<<endl;
    };
} else
// ввод исходных данных из файла
{   char filename[30];
    cout<<"Enter Filename  ";
    cin>>filename;
    cout<<endl<<"vvedeno  "<<filename<<endl;
    ifstream in_stream;
    in_stream.open(filename);
    if (in_stream.fail())
    {cout<<"net faila "<<filename<<endl; return;
    };
    in_stream>>kolsost;
    cout<<"kolsost="<<kolsost<<endl;
    in_stream>>kolsimv;
    cout<<"kolsimv="<<kolsimv<<endl;
    alfavit=new char[kolsimv];
    for (i=0;i<kolsimv;i++){ in_stream>>alfavit[i];};
    for (i=0;i<kolsimv;i++) cout<<alfavit[i]<<" ";
    cout<<endl;
    per=new int*[kolsost];
    for (i=0;i<kolsost;i++) per[i]=new int [kolsimv];
    for (i=0;i<kolsost;i++){
        for (j=0;j<kolsimv;j++){
                in_stream>>per[i][j];}}
    for (i=0;i<kolsost;i++){
        for (j=0;j<kolsimv;j++){
                cout<<per[i][j];}cout<<endl;}
 
        in_stream>>nachstate;
        cout<<"begin state "<<nachstate<<endl;
        in_stream>>kolkon;
        cout<<"Number of end states "<<kolkon<<endl;
        fin=new int[kolkon];
        for (i=0;i<kolkon;i++)in_stream>>fin[i];
        for (i=0;i<kolkon;i++)cout<<fin[i]<<" ";
        cout<<endl;
        in_stream.close();
        cout<<"End of output file..."<<endl;
}
return;};
 
//показ текущего состояния
void konavt::show_sost()
{int i;
cout<<"sostoyanie  "<<avtstate<<endl;
cout<<dlina<<endl;
//cout<<"ostatok vxoda  "<<vxod<<endl;
cout<<"ostatok vxoda  ";
//for (i=0; i<dlina;i++) cout<<vxod[i]<<"\t"; // *(vxod+i)
//cout<<endl;
for (i=0; i<dlina;i++) cout<<*(vxod+i)<<"\t"; 
cout<<endl<<"protokol  ";
for (i=0;i<dlina0+1;i++) cout<<protokol[i]<<"\t";
cout<<endl;
};
 
//переход к следующему состоянию
void konavt::sled()
{int slsost,i,num;
num=-1;
char teksimv;
teksimv=vxod[0];
cout<<"symbol "<<teksimv<<endl;
for (i=0;i<kolsimv;i++) if (teksimv==alfavit[i]) {num=i;break;};
if (num==-1){cout<<"illegal symbol "<<teksimv<<endl;error=true;}
else {slsost=per[avtstate][num];
avtstate=slsost;
protokol[nomstep]=slsost;
nomstep++;
for (i=0;i<dlina;i++)vxod[i]=vxod[i+1];
vxod[dlina-1]=' ';
dlina=dlina-1;
};
return;};
 
//проверка допустимости входной строки
bool konavt::proverka()
{int i,j;
bool prizn;
for (i=0;i<dlina;i++)
{prizn=false;
for (j=0;j<kolsimv;j++) if (vxod[i]==alfavit[j]) {prizn=true;break;}; 
if (!prizn) {cout<<"illegal symbol "<<endl;break;};
};
return prizn;
};
 
//ввод новой входной строки
void konavt::init()
{int i;
cout<<"enter dlina"<<endl;
cin>>dlina;
dlina0=dlina;
vxod=new char[dlina+1];
protokol=new int [dlina+1];
for (i=0;i<dlina+1;i++)protokol[i]=0;
cout<<endl<<"enter vhodnaya stroka"<<endl;
for (i=0;i<dlina;i++)cin>>vxod[i];
//vxod[dlina]='\0';
cout<<endl;
//cout<<"ostatok vxoda  "<<vxod<<endl;
cout<<"ostatok vxoda  ";
for (i=0; i<dlina;i++) cout<<vxod[i]<<"\t";
cout<<endl;
if (proverka()) {avtstate=nachstate;
                protokol[0]=nachstate;
                nomstep=1;
                error=false;}
 else error=true;
return;};
 
//показ параметров автомата
void konavt::show()
{int i,j;
cout<<"parametry avtomata"<<endl;
cout<<"kolvo sostoianiy "<<kolsost<<endl;
cout<<"kolvo simvolov alfavita "<<kolsimv<<endl;
cout<<"simvoly alfavita"<<endl;
for (j=0;j<kolsimv;j++){
    cout<<alfavit[j]<<"\t";
};
cout<<endl<<"matrica perehodov"<<endl;
for (i=0;i<kolsost;i++){
for (j=0;j<kolsimv;j++){
    cout<<per[i][j]<<"\t";
};
cout<<endl;
};
cout<<"nachalnoe sostoianie  "<<nachstate<<endl;
cout<<"konechnye sostoiania  "<<endl;
for (i=0;i<kolkon;i++){
    cout<<fin[i]<<"\t";
};cout<<endl;
return;};
 
//проверка завершающего состояния
bool konavt::konec()
{int i;
int k;
bool kon;
kon=false;
i=-1;
for (i=0;i<kolkon;i++) if(avtstate==fin[i]){kon=true;break;};
return kon;
};
 
//проверка исчерпания входной строки
bool konavt::zaversh()
{bool prizn;
if(dlina==0) prizn=true; else prizn=false;
return prizn;
};
если вводить из файла то он такой

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 3 1 1 1 1
4 4 4 4 4 4 4 4 4 4 1 1 1 1 1
5 5 5 5 5 5 5 5 5 5 1 1 1 1 1
6 6 6 6 6 6 6 6 6 6 1 1 1 1 1
7 7 7 7 7 7 7 7 7 7 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 8 1 1
9 10 1 1 1 1 1 1 1 1 1 1 1 1 1
1 11 13 11 12 11 12 11 12 11 1 1 1 1 1
11 12 11 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 14 1 1
1 1 1 1 1 1 1 1 1 1 1 1 18 1 1
1 1 1 1 1 1 1 1 1 1 1 1 21 1 1
15 15 15 17 1 1 1 1 1 1 1 1 1 1 1
16 16 16 16 16 16 16 16 16 16 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 20 1 1 1
16 16 1 1 1 1 1 1 1 1 1 1 1 1 1
15 15 15 19 1 1 1 1 1 1 1 1 1 1 1
16 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 2 0
15 15 22 1 1 1 1 1 1 1 1 1 1 1 1
16 16 16 16 16 16 16 16 1 1 1 1 1 1 1
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 17:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru