Turbo Pascal
ГЛАВНАЯ | ЗАКАЗАТЬ РАБОТУ НА TURBO PASCAL | КАК ОПЛАТИТЬ? | О САЙТЕ | КОНТАКТЫ

Приостановка выполнения программы Turbo Pascal

Воскресенье
20 августа 2017 года

Приостановка выполнения программы Turbo Pascal

При обработке информации часто возникает необходимость приостановить выполнение программы:

1) на время, определяемое самим пользователем (последующий запуск программы осуществляется либо нажатием какой-либо клавиши, либо с помощью кнопки манипулятора мышь (пример использования ма-нипулятора мышь для указанных целей дан в разделе 5.9.5 — программа DemoMouseText);

2) на фиксированное время, заданное в самой программе.

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

1. Приостановка выполнения программы на время, определяемое пользователем

Простейшим решением данной задачи является запись в соответствующем месте процедуры Readln (оператор Read использовать нельзя) или функции ReadKey.

Пример использования процедуры Readln.

PROGRAM DemoReadln;
USES   Crt;
BEGIN
ClrScr;
Writeln   ('Выполнение программы приостановлено.');
Writeln;
Write ('Для продолжения нажмите клавишу Enter ....');
Readln;
Writeln;
Write ('Выполнение программы продолжается. Ждите 5 секунд. ');
Delay   (5000);
END.

Для продолжения выполнения программы достаточно нажать клавишу Enter. Недостатком данного решения является обязательное нажатие клавиши Enter, а не любой клавиши, что увеличивает вероятность ошибочного действия пользователя и в ряде случаев приводит к непредсказуемым результатам.

Пример использования функции ReadKey.

PROGRAM DemoReadKey;
USES  Crt;
VAR
ch     :   char; 
BEGIN
ClrScr;
Writeln   ('Выполнение  программы приостановлено.');
Writeln;
Write ('Для продолжения нажмите любую клавишу ....');
ch := ReadKey;
Writeln;
Write ('Выполнение программы продолжается. Ждите 5 секунд. ');
Delay (5000); 
END.

Недостатком использования данной функции является то, что, если до обращения к ней использовалась функция KeyPressed и ее значение стало равным True, возможны непредсказуемые результаты выполнения программы.

В связи с этим предпочтительнее использовать приведенные ниже процедуры Wait, GoingOut или GoingOutColor и Wait_l. Здесь и далее в первой строке комментария дано имя процедуры (например, Wait), а во второй - имя файла этой процедуры на диске (например, wait.inc).

{	Wait	
Процедура ожидания нажатия любой клавиши
	wait.inc	}
PROCEDURE Wait; 
BEGIN
repeat until KeyPressed 
END ;

Пример использования процедуры Wait.

PROGRAM DemoWait;
USES Crt;
{$I wait.inc }
BEGIN
ClrScr;
GotoXY (15, 10);
Write ('Для завершения программы нажмите клавишу "Пробел"'); Wait;
END.

При использовании процедуры Wait подсказка о требуемых дальнейших действиях пользователя записывается в программе перед вызовом процедуры.

Процедура GoingOut приостанавливает работу программы и позволяет выводить требуемое, сообщение желаемого цвета и располагать его в нужном месте экрана.

{
Процедура выхода  после  нажатия  любой  клавиши. 
Внимание! Не забывайте очищать буфер клавиатуры после выполнения этой процедуры, 
иначе при нажатии клавиши Enter при окончании работы откомпилированной программы 
она снова запустится на выполнение 
Text       - текст сообщения 
ColorText   - цвет текста 
X, Y        - координаты вывода сообщения
}
PROCEDURE GoingOut (Text : string;
ColorText, X, Y : integer); 
BEGIN
TextColor (ColorText); 
GotoXY (X, Y); 
Write (Text);
repeat until KeyPressed;	{ ожидаем нажатия  клавиши }
END;

Пример использования процедуры GoingOut.

PROGRAM Demo_GoingOut;
USES   Crt;
{$I goingout.inc }
BEGIN
ClrScr;
GotoXY (15, 10);
GoingOut('Нажмите клавишу "Пробел"',14,15,10); 
END.

Недостатком процедур Wait и GoingOut является то, что при нажатии на клавишу Enter откомпилированная программа вновь запустится на выполнение. Чтобы проверить это, откомпилируйте программу DemoWait или DemoGoingOut в режиме Options/Destination Disk и запустите откомпилированную программу, для завершения работы программы вместо клавиши Пробел нажмите клавишу Enter). В связи с этой особенностью при использовании данных процедур желательно указывать, что необходимо нажать клавишу Пробел.

Для корректной работы процедур Wait или GoingOut необходимо после каждого вызова этих процедур очищать буфер клавиатуры с помощью процедуры ClrKeyBuf.

{	ClrKeyBuf	
Очистка буфера клавиатуры
	clrkeybu.inc	}
PROCEDURE ClrKeyBuf; 
VAR
ch : Char; 
BEGIN
while KeyPressed do ch := ReadKey; 
END;

Процедура Wait_l останавливает выполнение программ и очищает буфер при входе и при выходе из процедуры (данная процедура объединяет процедуры Wait и ClrKeyBuf.

{	  Wait_1 	
Процедура ожидает нажатия любой клавиши, 
буфер клавиатуры очищается при входе 
в процедуру и при выходе из процедуры
	wait_l .inc		}
PROCEDURE Wait_l (Text  : string;	{ текст сообщения >
X,	{ координаты вывода }
Y     : byte);	{ сообщения        }
VAR
ch : Char; 
BEGIN
while KeyPressed do ch := ReadKey; { очистка буфера клавиатуры } 
GotoXY (X,Y);
Write (Text) ;	{ вывод сообщения }
repeat until KeyPressed;      { ожидание нажатия любой клавиши } 
while KeyPressed do ch := ReadKey; { очистка буфера клавиатуры } 
END;

Пример использования процедуры Wait_1.

PROGRAM Demo_Wait_l ;
USES  Crt;
{$I  wait_l.inc   }
BEGIN
ClrScr;
GotoXY   (15,   10) ;
Wait_l   ('Нажмите любую клавишу' ,   15,   10) ; 
END.

Процедуре GoingOutColor аналогична процедуре Wait_l, но позволяет изменять цвет символов и цвет фона, на котором выводится сообщение.

{	 GoingOutColor 	
Процедура выхода после нажатия любой клавиши. 
Выводится подсказка о дальнейших действиях пользователя. 
Устанавливаются цвета фона и символов.
Text	- текст сообщения
ColorText      - цвет символов
ColorBackGround - цвет фона
X, Y	- координаты вывода сообщения
	 goingouc.inc 	}
PROCEDURE GoingOutColor (Text  : string;
ColorText,
ColorBackGround : byte; 
X,
Y     : integer); 
VAR ch : Char; 
BEGIN
while KeyPressed do ch := ReadKey; 
TextColor (ColorText); 
TextBackGround (ColorBackGround); 
GotoXY (X,Y); Write (Text); 
repeat until KeyPressed; 
while KeyPressed do ch := ReadKey; 
END;

Пример использования процедуры GoingOutColor.

PROGRAM Demo__GoingOutColor ;
USES Crt;
{$I goingouc.inc }
BEGIN
ClrScr;
GotoXY (15, 10) ;
GoingOutColor ('   Нажмите любую клавишу   ', 0, 3, 27, 10);
END.

2. Приостановка выполнения программы на заданный отрезок времени

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

{	WaitDos	
Процедура приостановки выполнения программы на заданный отрезок
времени в секундах (от 0 до 58)
WordTime - число секунд приостановки выполнения программы
		waitdos.inc	}
PROCEDURE WaitDos (WaitTime : word); 
VAR
House,	{ час - 0..23 }
Minute,	{ минута - 0. . 59 }
Second,	{   секунда  -  0..59   }
Seс100,	{   сотые доли  секунды 0..99   }
Second_0      :   word; 
BEGIN
GetTime   (House,   Minute,   Second,   Seс100); 
if WaitTime  +  Second >=  59
then  Second_0   := WaitTime  +  Second -   59 
else  Second_0   :=  Second + WaitTime; 
repeat
GetTime   (House,   Minute,   Second,   Sec100); 
until   
Second = Second_0; 
END;

Примечание. При замене в данной процедуре Second на часы, минуты или сотые доли секунды (House, Minute, Second или Sec100) время остановки программы будет соответственно измеряться в этих временных интервалах.

Пример использования процедуры WaitDos. Для работы процедуры waitdos.inc необходимо с помощью директивы USES подключить модуль Dos.

PROGRAM DemoWaitDos;
USES Crt, Dos;
VAR
WaitTime    : word;
($I waitdos.inc } 
BEGIN
ClrScr;
Writeln ('Введите число секунд (1..58) для приостановки ');
Write ('выполнения программы ');
Readln (WaitTime);
Write ('Ждите ', WaitTime, ' секунд(у,ы) ....');
WaitDos (WaitTime); 
END.

Последние новости

Сервис инновация
заправка картриджей Предлагаю Вам оценить сайт наших партнеров - Сервисный центр по заправке картриджей "Сервис инновация". Они профессионально занимаются заправкой картриджей в Красноярске с 2007 года. Очень быстро и качественно оказывают заправку картриджей. Рекомендую!

Скупка новых картриджей

Если у на работе остались неипользованные новые картриджи, а принтер уже вышел из строя, мы купим у вас такие картриджи по высокой цене. Мы занимаемся скупкой новых картриджей в Красноярске.

скупка картриджей

Скупка новых картриджей уже многим принесла неплохой дополнительный заработок. Скупка осуществляется круглосуточно, без выходных. Осуществляется выезд к клиенту!


Счетчики






Реклама

Полезная информация



 
 
 
email
:tanucik2004@ya.ru Copyright © TP7.INFO, 2007-2013
icq
: 308-364-613
тел.
: +7 953 580 83 78