Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Конечный автомат!!! Помогите в коде разобраться

10K
11 декабря 2005 года
jey2004
11 / / 20.08.2005
Народ помогите в коде разобраться, что будет в качестве STATE_N,_ а что в качестве_ state, никак понять не могу. Вот задача:
Автомат, моделирующий родителя, имеет четыре состояния {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 */
/************************************************/
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог