Конечный автомат!!! Помогите в коде разобраться
Автомат, моделирующий родителя, имеет четыре состояния {s0, ... ,s3}, и два входных сигнала -
оценки, полученные сыном в школе: {2, 5}. Начиная с начального состояния s0 , автомат под
воздействием входных сигналов переходит из одного состояния в другое и выдает выходные
сигналы - реакции на входы. Выходы автомата {y0, ..., y5} будем интерпретировать
как действия родителя так:
у0: - брать ремень;
у1: - ругать сына;
у2: - успокаивать сына;
у3: - надеяться;
у4: - радоваться;
у5: - ликовать.
Сына, получившего одну и ту же оценку - двойку, ожидает дома совершенно различная реакция
в зависимости от предыстории его учебы. Например, после третьей двойки в истории 2,2,2
сына встретят ремнем, а в истории 2,2,5,2 - будут успокаивать. Каждая предыстория определяет
текущее состояние автомата. Таким образом, текущее состояние представляет все то, что автомат
знает о прошлом с точки зрения его будущего поведения - реакций на последующие входы.
Вот наброски кода:
/************************************************/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <windows.h>
using namespace std;
/* опpеделяем константы обозначающие состояния */
#define STATE_0 0
#define STATE_1 1
#define STATE_2 2
#define STATE_3 3
int state;
/* здесь хpанится наше текyщее состояние */
char sym;
/* это символ, котоpый мы считали */
void main(int argc, char* argv[]) {
char sym;
FILE *in;
FILE *out;
HANDLE hStdout;
hStdout= GetStdHandle (STD_OUTPUT_HANDLE) ;
in=fopen(argv[1],"rt");
if (in==NULL)
{
fprintf(stderr, "Bad input file.\n");
}
out=fopen(argv[2],"wt");
/* основной алгоpитм pазбоpа */
while(! feof(in) )
{
sym = fgetc(in);
switch (state)
{
/* выбиpаем нyжнyю колонкy Состояния */
case STATE_1:
switch(sym)
{
/* выбиpаем нyжнyю стpокy Символ */
case '2':
cout << "....";
/* выполняем действие, записанное в
клетке таблицы */
state = STATE_2;
/* пеpеходим в новое состояние */
break;
case '5':
cout << "....";
} /* end switch */
case STATE_2:
switch(sym)
{
case '2':
cout << "....";
break;
}
} /* end switch */
} /* end while */
fclose(in);
} /* end main */
/************************************************/