Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Laba12.cpp: определяет точку входа для консольного приложения.
- //
- #include "stdafx.h"
- #include <iostream>
- using namespace std;
- class FSM
- {
- private:
- int state = 1;
- int i = 1;
- public:
- bool error = false;
- FSM() {};
- void showState()
- {
- cout << "Current state is : " << state << endl;
- }
- int getState()
- {
- return state;
- }
- void setState(int a)
- {
- state = a;
- }
- void nextState(char c)
- {
- if (isdigit(c))
- {
- switch (getState())
- {
- case 1:
- {
- if (c >= '3' && c <= '9') setState(2);
- else
- if (c == '2') setState(3);
- else
- if (c == '0' || c == '1') setState(4);
- break;
- }
- case 2:
- {
- if (c >= '0' && c <= '9') setState(5);
- break;
- }
- case 3:
- {
- if (c >= '6' && c <= '9') setState(5);
- else
- if (c == '5') setState(6);
- else
- if (c >= '0' && c <= '4') setState(7);
- break;
- }
- case 4:
- {
- if (c >= '0' && c <= '9') setState(8);
- break;
- }
- case 5:
- {
- error = true;
- break;
- }
- case 6:
- {
- if (c >= '0' && c <= '5') setState(5);
- else error = true;
- break;
- }
- case 7:
- {
- if (c >= '0' && c <= '9') setState(5);
- break;
- }
- case 8:
- {
- if (c >= '0' && c <= '9') setState(5);
- break;
- }
- case 9:
- {
- if (c >= '3' && c <= '9') setState(10);
- else
- if (c == '2') setState(11);
- else
- if (c == '0' || c == '1') setState(12);
- break;
- }
- case 10:
- {
- if (c >= '0' && c <= '9') setState(13);
- break;
- }
- case 11:
- {
- if (c >= '6' && c <= '9') setState(13);
- else
- if (c == '5') setState(14);
- else
- if (c >= '0' && c <= '4') setState(15);
- break;
- }
- case 12:
- {
- if (c >= '0' && c <= '9') setState(16);
- break;
- }
- case 13:
- {
- error = true;
- break;
- }
- case 14:
- {
- if (c >= '0' && c <= '5') setState(13);
- else error = true;
- break;
- }
- case 15:
- {
- if (c >= '0' && c <= '9') setState(13);
- break;
- }
- case 16:
- {
- if (c >= '0' && c <= '9') setState(13);
- break;
- }
- case 17:
- {
- if (c >= '3' && c <= '9') setState(18);
- else
- if (c == '2') setState(19);
- else
- if (c == '0' || c == '1') setState(20);
- break;
- }
- case 18:
- {
- if (c >= '0' && c <= '9') setState(21);
- break;
- }
- case 19:
- {
- if (c >= '6' && c <= '9') setState(21);
- else
- if (c == '5') setState(22);
- else
- if (c >= '0' && c <= '4') setState(23);
- break;
- }
- case 20:
- {
- if (c >= '0' && c <= '9') setState(24);
- break;
- }
- case 21:
- {
- error = true;
- break;
- }
- case 22:
- {
- if (c >= '0' && c <= '5') setState(21);
- else error = true;
- break;
- }
- case 23:
- {
- if (c >= '0' && c <= '9') setState(21);
- break;
- }
- case 24:
- {
- if (c >= '0' && c <= '9') setState(21);
- break;
- }
- case 25:
- {
- if (c >= '3' && c <= '9') setState(26);
- else
- if (c == '2') setState(27);
- else
- if (c == '0' || c == '1') setState(28);
- break;
- }
- case 26:
- {
- if (c >= '0' && c <= '9') setState(29);
- break;
- }
- case 27:
- {
- if (c >= '6' && c <= '9') setState(29);
- else
- if (c == '5') setState(30);
- else
- if (c >= '0' && c <= '4') setState(31);
- break;
- }
- case 28:
- {
- if (c >= '0' && c <= '9') setState(32);
- break;
- }
- case 29:
- {
- error = true;
- break;
- }
- case 30:
- {
- if (c >= '0' && c <= '5') setState(29);
- else error = true;
- break;
- }
- case 31:
- {
- if (c >= '0' && c <= '9') setState(29);
- break;
- }
- case 32:
- {
- if (c >= '0' && c <= '9') setState(29);
- break;
- }
- }
- }
- else
- {
- if (c == '.' && getState() != 1 && getState() < 9)
- setState(9);
- else
- if (c == '.' && getState() != 9 && getState() < 17)
- setState(17);
- else
- if (c == '.' && getState() != 17 && getState() < 25)
- setState(25);
- else error = true;
- }
- }
- bool theEnd()
- {
- if (error == false && getState() > 25)
- return true;
- else
- return false;
- }
- };
- int main()
- {
- char *txt = new char[255];
- int i = 0;
- while (cin >> txt[i])
- i++;
- txt[i] = '\0';
- FSM avt;
- i = 0;
- avt.showState();
- while (txt[i] != '\0')
- {
- avt.nextState(txt[i]);
- avt.showState();
- i++;
- }
- if (avt.theEnd())
- cout << "kek";
- else
- cout << "ne kek";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement