{
printf(«Ask for directions\n»);
printf(«Wrong turn\n\n»);
delay(1000);
}
printf(«On the road again\n»);
}
{ Copyright (c) 1990, Borland International }
Uses Crt;
Procedure Lostintown;
Var
I: integer;
Begin writeln('Looking for highway…');
delay(100);
for I:= 0 to 9 do
Begin
Writeln('Ask for directions');
Writeln('Wrong turn');
Writeln;
delay(1000);
End;
Writeln('on the road again');
End;
Begin
Writeln('Entering Main');
Lostintown;
Delay(1000);
writeln('Leaving main');
writeln;
delay(1000);
End.
В программе plost мы усложнили подпрограмму lostintown использованием составного оператора внутри цикла. Предположим, что были установлены 3 маркера: один для функции main, один для lostintown и еще один для оператора, печатающего Wrong turn.
После того, как вы попадаете в lostintown, начинают происходить странные вещи. Когда вы входите в эту подпрограмму lostintown становиться текущей «областью». Время, приходящиеся на печать фразы «looking for highway» ассоциируется с этим маркером.
При входе в цикл время продолжает ассоциироваться с маркером подпрограммы и в первый раз, когда вы выполняете оператор печати строки «Ask for direction», время все еще относится к этому маркеру. Тем не менее стоит вам пройти маркер оператора печати «Wrong turn», все оставшееся время работы подпрограммы будет ассоциироваться с этим маркером.
Тот факт, что вы попадаете на участок программы, который ранее был ассоциирован с другим маркером, совсем не означает смены текущей активной «области». Изменение активной «области» происходит только в том случае, если вы проходите непосредственно через маркер «области» Результаты этого факта могут оказаться довольно неожиданными.
Например, если вы установили три маркера для программы plost, так как мы описали (по одному маркеру для функций main, lostintown и оператора печати строки «Wrong Turn»), то приблизительно 84 % общего времени выполнения программы будет ассоциировано с печатью строки «Wrong turn», и только 1 % времени выполнения будет связан с lostintown. Это происходит потому, что девять из десяти выполнений оператора печати строки «Ask for direction», а также все последующие операторы delay ассоциируются с маркером, помечающим оператор печати строки «Wrong Turn».
Если вы уберете маркер «области», которым помечен оператор печати строки «Wrong Turn», то 84 % остающегося времени будет затрачено на выполнение подпрограммы lostintown.
Рассмотрим следующую программу:
main.
{
while(!kbhit())
{
func1();
statement1;