), що включає засоби пуску, зупинки, реалізації елементарних кроків, видачі результатів і забезпечення детермінованості, тобто управління ходом обчислення;
в) процес реалізації алгоритму, тобто послідовність кроків, яка буде породжена при застосуванні алгоритму до конкретних даних. [2, С.149]
2. Рішення завдання Майхілла (про стрілки)
.1 Постановка завдання
Мається ланцюг стрільців і офіцер. Кожен, хто знаходиться в ланцюзі солдат може спілкуватися тільки зі своїми сусідами праворуч і ліворуч. Офіцер розміщується на фланзі ланцюга і може подавати команди тільки крайнього в ланцюзі стрілку. Загальна кількість стрільців в ланцюзі кожному з стрільців невідомо. Спілкуватися кожен із стрільців може тільки зі своїми сусідами праворуч і ліворуч. Потрібно забезпечити одночасний залп всіх стрільців ланцюга після подачі команди офіцером.
.2 Рішення завдання
Дане завдання вирішується за допомогою автоматної моделі поведінки стрільця.
На малюнку 1 представлена ??структурна модель поведінки стрільців в задачі Майхілла. Додатково до стрілок у завдання введені блок, що моделює поведінку офіцера (він віддає команду стрільцям), і блок, що виконує протоколювання внутрішніх станів об'єктів, що становлять модель ланцюга стрільців.
Перелік блоків
- Officer - модель офіцера;
- Rifleman 1, 2, ... N - моделі стрільців;
- WriteStates - блок протоколу.
Блоки Officer і WriteStates не обов'язково. Перший введений для зручності управління ланцюгом стрільців, другий - для візуалізації рішення.
Функціонування моделі
Об'єкти моделі функціонують паралельно. Час для всіх об'єктів єдине і моделюється абстрактним дискретним часом. Офіцер, отримавши команду, передає її найближчому стрілку, той наступного і т.д. Щоб виконати команду, стрілки обмінюються між собою інформацією. Після закінчення деякого періоду часу вони повинні одночасно виконати команду постріл. У моделі - перейти в однакове для всіх об'єктів стан. При цьому всі проміжні стану об'єктів на кожному такті протоколюються створеним для цього об'єктом, який функціонує паралельно решті об'єктів, що становлять задачу. [6]
Рисунок 1 - Модель поведінки стрільців в задачі Майхілла
Рішення завдання на мові високого рівня С ++
Застосовуючи автоматну модель поведінки стрільців, виконаємо рішення даної задачі на мові високого рівня С ++.
Прямий рахунок виконується таким чином, що перший стрілок, отримавши команду офіцера, за допомогою функції очікуванні зменшує лічильник семафора на 1. Далі, через певний проміжок часу, кожен стрілець в ланцюзі солдатів чинить так само доти , поки лічильник семафора не досягне свого мінімального значення і семафор не вийде з сигнального стану. Знаходження семафора в несигнальному змозі буде повідомляти про те, що прямий рахунок закінчено, ведеться зворотний рахунок. При закінченні зворотного рахунку буде проведений одночасний залп всіх стрільців.
Лістинг програм сервера ( Офіцер ) і клієнта ( Стрілок ) представлений нижче.
Програма-сервер ( Офіцер )
//---------------------------------------------------------------------------
# include lt; vcl. h gt;
# include lt; iostream. h gt;
# pragma hdrstop
# include Unit1. h
# define BUFSIZE 512
//---------------------------------------------------------------------------
# pragma package (smart_init)
# pragma resource *. dfm * Form1; hThread; hProcPipe [5]; lpszPipename= . pipe pipe1001 raquo ;; hPipe; hSemaphoreCount;// Дескриптор семафора Рахунок
int SemaphoreMax=5;// Максимальний розмір лічильника семафора, і його початкове
//значеніеCount=0; ConnectShooters (LPVOID);// Створення іменованого каналу для спілкування з
//кліентомShooterThread (LPVOID);// Потік для роботи з клієнтом
void Shoot ();// Зробити постріл
//---------------------------------------------------------------------------
__ fastcall TForm1 :: TForm1 (TComponent * Owner)
: TForm (Owner)
{(); (int i=0; i...