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;
{===========================================================================}
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.