Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
TP_Metod_ukaz_k_KR.doc
Скачиваний:
275
Добавлен:
22.03.2016
Размер:
354.3 Кб
Скачать

3. Подсчет времени работы программы

Во многих задачах курсовой работыирования определять время работы программы или сеанса пользователя. Покажем как это можно сделать

var Timer:longint absolute $40:$6c;

Timeold:longint;

TimeinSec:real;

begin

Timeold:=Timer;

...

...

...

TimeinSec := (Timer-Timeold)/18.2;

end.

Данная программа использует тот факт, что к значению четырехбайтовой целой переменной, расположенной по абсолютному адресу $40:$6С, раз в 1/18.2 секунды аппаратно прибавляется единица. Поэтому, если мы опишем в нашей программе переменную, привязав ее к этому адресу, то легко сможем определить время работы программы. А именно, запомнив в самом начале программы значение этой переменной (в нашем примере это оператор timeold:=timer), в процессе работы определить время выполнения в секундах можно по формуле (timer - timeold)/18.2.

4. Работа с клавиатурой.

Для организации интерактивного взаимодействия пользователя с программой необходимо уметь определять код нажатой клавиши. Для этого в Турбо Паскале используется функция ReadKey

Клавиши на клавиатуре можно разделить на две группы. Первая группа, - обычные клавиши, возвращающие один сканкод, вторая группа, - спецклавиши, возвращающие два сканкода подряд при одном нажатии. Первый из этих двух сканкодов всегда символ #0. Для определения кодов клавиш можно применять предлагаемую ниже программу, или программу аналогичную по своему действию.

PROGRAM Scan_Key;

Uses Crt;

Var

ch:char;

Begin

Repeat

ch:=ReadKey; { Приём первого символа }

if ch=#0 { Если #0 то спецклавиша }

then begin

ch:=ReadKey; { Приём сканкода }

writeln('спецклавиша: ', ord(ch));

end

else writeln('обычная клавиша: ', ord(ch));

Until ch=#13; { #13 - ASCII-код клавиши "Enter" }

End.

Одной из полезных функций при работе с клавиатурой является функция KeyPressed. Эту функцию очень удобно применять при завершении работы программы, или прекращения действия определённого фрагмента по нажатии любой клавиши и т.д. Наиболее часто она применяется как условие завершения цикла с постусловием:

Repeat Until KeyPressed;

Возможно также применение этой функции как условия в цикле с предусловием:

While not KeyPressed do <тело цикла>

В этом случае тело цикла будет выполняться до тех пор, пока не будет нажата любая клавиша на клавиатуре.

Program EX_1;

Uses Crt;

Var

ch: char;

done: boolean;

Begin

Writeln('---------------------');

Writeln('F4 - включить звук');

Writeln('F5 - выключить звук');

Writeln('F10 - выход.');

Writeln('---------------------');

done:=false;

Repeat

ch:=ReadKey;

if ch=#0 then

begin

ch:=ReadKey;

case ch of

#62: sound(5000); {включение звука клавишей F4}

#63: nosound; {выключение звука клавишей F5}

#68: done:=true; {выход - клавиша F10}

end;

end;

Until done;

End.

Для улучшения понимания кода программы рекомендуется коды клавиш определить как константы в самом начале программы:

program cursor_keys;

uses Crt;

const

KEYUP=72;

KEYDOWN=80;

KEYLEFT=75;

KEYRIGHT=77;

KEYESC=27;

KEYENTER=13;

KEYSPACE=32;

var key : char;

begin

writeln('Нажмите одну из курсорных клавиш ');

key := readkey;

if ord(key) <> 0 then writeln('обычная клавиша')

else begin

key := readkey;

case ord(key) of

KEYRIGHT: writeln('стрелка вправо');

KEYLEFT: writeln('стрелка влево');

KEYUP: writeln('стрелка вверх');

KEYDOWN: writeln('стрелка вниз');

else writeln('не стрелка');

end;

end;

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]