Редът на описване на променливи, процедури и други конструкции на Паскал
Ако си спомняте (4.6), преди да бъде изпълнено, програмата Pascal се компилира на машинен език. По време на компилацията той се гледа отгоре надолу, докато Pascal стриктно се уверява, че нито една променлива, процедура или друга конструкция не се използва по-високо от описаното в текста на програмата. Какво се има предвид?
Имаме променливи описано в раздела VAR. И под приложение засега ще разберем споменаването му в раздела на операторите на основната програма или сред операторите в описанията на процедурите, т.е. където тази променлива трябва да "работи" по време на изпълнението на програмата.
Нека да разгледаме нашата програма. Разумно сме поставили раздела VAR в самия връх на програмата. И ако го поставим, да речем, между описанията на процедурите Music и Flying_Saucer, тогава например променливата i ще бъде приложена в текста (в изявлението for за процедурата Landscape, разположена по-горе) по-висока от описаната, към която Pascal би реагирал със съобщение за грешка. Същото се отнася и за променливата y_goriz, която в този случай ще бъде приложена два пъти под описанието (в операторите repeat и y_goriz: = 240), но веднъж по-горе (в израза Line (0, y_goriz, 640, y_goriz)). Не бъркайте - в конкретния случай не е важен редът на изпълнение на изявления по време на изпълнение на програмата, за който често не можем да кажем нищо предварително, а примитивният ред на писане на описания и изрази в текста на програмата.
Същите разсъждения се отнасят за процедури и други конструкции. По този начин описанието на процедурата за дърво в никакъв случай не може да бъде поставено под описанието на процедурата за пейзаж, тъй като в процедурата за пейзаж процедурата за дърво се прилага, освен това три пъти.
В някои случаи обаче става необходимо не само процедурата, да речем, Р1 да се отнася до процедура Р2, но и процедурата Р2 да се отнася до процедура Р1. Очевидно е, че програмата трябва да има БИ СЕ да се изгради по следната схема:
Процедура P2; описание на процедурата P2
P1. прилагане на процедура P1
Процедура P1; описание на процедурата P1
Р2. прилагане на процедурата P2
P1. прилагане на процедура P1
Но тази схема противоречи на споменатия принцип, тъй като прилагането на процедурата P1 предшества нейното описание. В Паскал има начин да се справи с тази ситуация. Копирайте пълното заглавие на процедура P1 на всяко място над описанието на процедура P2, като му предоставите т.нар от директивата FORWARD. Програмата ще изглежда така:
Процедура P1;напред; предварително описание на процедурата P1
Процедура P2; описание на процедурата P2
P1. прилагане на процедура P1
Процедура P1; описание на процедурата P1
Р2. прилагане на процедурата P2
P1. прилагане на процедура P1
Компютърно управление от клавиатурата. Функции ReadKey и KeyPress
Опитайте се да стартирате програма, която си върши работата дълго време, без да ви обръща внимание. Например това:
НАЧАЛО повтаряйте WriteLn („Не ни интересува!“) До 2> 3 END.
Сядате пред компютъра и чакате той да завърши да пише текста. И никога няма да завърши. Започвате да удряте по клавишите, надявайки се да прекъсне безсмисления цикъл. Безполезно.
Само когато задържите бутона Ctrl, щракнете върху бутона Прекъсване, програмата ще прекъсне работата си.
Докато програмите се изпълняват, те няма да реагират на клавиатурата, освен ако не се погрижите специално за нея. И за да се погрижите, трябва да включите специалните функции ReadKey и KeyPress от модула CRT. Ще говорим за значението на функциите като цяло в 13.2 и сега ще анализираме тези две.
Нека добавим няколко реда към нашата упорита програма:
ИЗПОЛЗВА CRT;
НАЧАЛО
Повторете
ако KeyPress тогава WriteLn (‘Майсторът натисна клавиш!’)
друго WriteLn (‘Не ни интересува!’)
до 2> 3
КРАЙ.
Изразът „ако KeyPress тогава“ може да се преведе като „ако се натисне клавиш, тогава“. Когато Паскал се натъкне на този израз, той проверява дали на клавиатурата е натиснат клавиш. Когато стартирате тази програма, тя ще печата безкрайно Не ни пука! Но веднага щом щракнете върху който и да е клавиш, програмата ще печата безкрайно Собственикът натисна клавиша!