Организация параллельной работы нескольких процессов. Описание процедур, страница 2

3 Задать координаты часов в пределах [31, 21] по оси У;

4 Задать дискретность времени в пределах [1, 51];

Далее запустить программу. После запуска программы вы увидите окно примерно похожее на то, что дано в приложении:

1 и 2 Это места размещения надписи.

3       Окно движущегося объекта

4       Показания скоростей процессов

5       Клавиши управления процессами и их скоростью, а так же показатели  активности/неактивности процессов

6       Окно вывода часов

7 и 8 Окна производителя/потребителя простых чисел соответственно

9       Отображение заполненности буфера

Тест на ошибки.

Для коррекции ошибок ввода была написана процедура Error_check, которая выдает ошибку при недостаточном количестве параметров или их превышении, при вводе значения вне диапазона, при вводе нечисловых данных.

Во время написания программы встречались фатальные ошибки, которые были устранены в ходе дальнейшей работы. Среди них 215(ошибка арифметики) и 201 (выход за диапазон допустимых значений ). Программа может работать в режиме всех ключей компиляции Паскаля.

Листинг программы.

Программа написана без комментариев, все блоки программы отделены друг от друга, переменные носят осмысленный характер. Программа написана “лесенкой” для удобства понимания. Повторяющиеся блоки в программе вынесены в качестве отдельных процедур для уменьшения объема текста программы. Процедуры непосредственно, отвечающие за выполнение программы находятся в начале текста. Процедуры вывода помощи, разметки интерфейса и прочие расположены в самом конце программы.

{$M $9999,0,0}

program kurs_os_19;

uses crt,dos;

{===========================================================================}

const

Size = 42;

On: Array [1..6] Of Boolean = (true,true,true,true,true,true);

{===========================================================================}

type

video=array[1..25,1..80] of

record

symbol:char;

attr:byte;

end;

{===========================================================================}

var

p:pointer;

Kvant: Array [0..1] Of Byte;

my_kbrd_Old,my_rule_Old:procedure;

buf : array[1..Size] of Word;

Sec,Min,Hour,Hund,Higggh,I,Tic,Number,my_stroka_i,ii, s_end:word;

Counter,ReloadCounter:real;

Exxxxxit: Boolean;

name:string;

n1,n2,n3,n4,n5,t1,t2,t3,t4,t5:byte;

stroka,XC,YC,code1,code2,code3,code4,x,y,vx,vy,count,ReloadSize:integer;

memory:video absolute $B800:$0000;

mem_old:video;

{===========================================================================}

{$F+}

procedure output1;

begin

if  (Higggh<=6)  then GoToXY(2,13+Higggh);

if  (Higggh<=12)and (Higggh>=7)  then GoToXY(6,13+Higggh-6);

if  (Higggh<=18)and (Higggh>=13) then GoToXY(10,13+Higggh-12);

if  (Higggh<=24)and (Higggh>=19) then GoToXY(14,13+Higggh-18);

if  (Higggh<=30)and (Higggh>=25) then GoToXY(18,13+Higggh-24);

if  (Higggh<=36)and (Higggh>=31) then GoToXY(22,13+Higggh-30);

if  (Higggh<=42)and (Higggh>=37) then GoToXY(26,13+Higggh-36);

end;

{===========================================================================}

procedure output2;

begin

if  (Higggh<=6)  then GoToXY(30,13+Higggh);

if  (Higggh<=12)and (Higggh>=7)  then GoToXY(34,13+Higggh-6);

if  (Higggh<=18)and (Higggh>=13) then GoToXY(38,13+Higggh-12);

if  (Higggh<=24)and (Higggh>=19) then GoToXY(42,13+Higggh-18);

if  (Higggh<=30)and (Higggh>=25) then GoToXY(46,13+Higggh-24);

if  (Higggh<=36)and (Higggh>=31) then GoToXY(50,13+Higggh-30);

if  (Higggh<=42)and (Higggh>=37) then GoToXY(54,13+Higggh-36);

end;

{===========================================================================}