Стили и методы программирования

         

переменная для чтения потока


#include
char symbol; // переменная для чтения потока символов
int cnt; // переменная для счета длин слов
int c0(), c1(), c2(); // функции-условия
void a0(), a1(), a2(), a3(); // функции-действия
int handler ( int i ); // обработчик строк таблицы
struct T_StructTableLine
{ // поле для имени состояния избыточно
int (*condition)(); // поле условия
void (*action)(); // поле действия
int ref; // поле перехода: индекс строки таблицы,
// которая будет обрабатываться следующей,
// или признак завершения процесса
}
T_StructTableLine
Table[]={ {c0,a0,1}, // таблица инициализируется статически,
{c1,a1,2}, // альтернативное решение - специальная
{c2,a0,1}, // функция задания начальных значений.
{c0,a0,3}, // Оно более гибкое, но менее
{c1,a2,2}, // эффективно.
{c2,a3,1}, // О наглядности см. комментарий
{c0,a3,3}; // в тексте.
{c1,a2,2},
{c2,a3,1},
{c0,a3,0}};
void main()
{
int iSt=0;
do {
iSt = handler ( iSt );
}
while ( iSt);
}
int handler ( int i )
{
if (Table[i].condition()) {
Table[i].action();
if (Table[i].ref) { symbol = getchar ();
return Table[i].ref; }
} else return ++i;
}
// Описания используемых функций:
int c0(){return symbol == '\n';}
int c1(){return 'a'<=symbol && symbol <= 'z';}
int c2(){return 'a'>symbol ||symbol > 'z';}
void a0(){}
void a1(){printf ("%c", symbol);cnt = 1;}
void a2(){printf ("%c", symbol);cnt++;}
void a3(){printf ("- %i\n", cnt);}

Содержание  Назад  Вперед







Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий