Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
AEP_LEKTsII.doc
Скачиваний:
90
Добавлен:
28.03.2015
Размер:
1.27 Mб
Скачать

Өрнектер – тұрақтылар. Паскаль өрнектер-тұрақтыларды пайдалануға мүмкіндік береді. Ол өрнекті программаны орындау қажеттіліксіз компилятор орындайды. Өрнектер-тұрақтылардың мысалдары:

100

'A'

256 - 1

(2.5 + 1) / (2.5 - 1)

'Turbo' + '' + 'Pascal'

Chr(32)

Ord('Z') - Ord('A') + 1

Тұрақтыларды сипаттаудағы өрнектер-тұрақтылардың мысалдары:

const

Min = 0;

Max = 100;

Center = (Max - Min) div 2;

Beta = Chr(255);

NumChars = Ord('Z') - Ord('A') + 1;

Message = 'Out of memory';

ErrStr = 'Error:' + Message + '.';

ErrPos = 80 - Length(Error) div 2;

ErrAttr = Blink + Red * 16 + White;

Ln10 = 2.302585092994095684;

Ln10R = 1 / Ln10;

Numeric = ['0'..'9'];

Alpha = ['A'..'Z','a'..'z'];

AlphaNum = Alpha + Numeric;

Өрнек-тұрақтының ең қарапайым жағдайы жай тұрақты болып табылады, мысалы, 100 немесе 'A'. Паскальда өрнек-тұрақтыларды пайдалануға рұқсат етілген. Компилятор өрнек-тұрақтыны компиляциялау барысында толығымен есептеу мүмкіндікке ие болуы тиіс болғандықтан өрнек-тұрақтылар ретінде келесі құрылымдарды пайдалануға болмайды:

  • айнымалылар мен типтелген тұрақтыларға сілтемелер;

  • функцияларды шақыру (ары қарай белгіленгендерден басқалары);

  • адресті @ алу операторы.

Өрнек-тұрақтылар үшін осы шектеулерден басқа кәдімгі өрнектер үшін синтаксикалық ережелер сақталады. Өрнек-тұрақтылар келесі стандартты функцияларды пайдалануға болады: Abs, Chr, Hi, Length, Lo, Odd, Ord, Pred, Ptr, Round, SizeOf, Succ, Swap, Trunc.

Бірдей бір идентификаторды көрсететін бірнеше орын бар кезде қажетті идентификаторды беру үшін сол идентификаторды модуль идентификаторы арқылы дәлдіктеу керек. Мысалы, UnitName идентификаторы арқылы Ident идентификаторын дәлдіктеу үшін UnitNamt.Ident деп жазу керек. Мұндай комбинирленген идентификатор құрама идентификатор деп аталады.

Түсініктемелер (комментарий)

Келесі конструкциялар программаға түсініктемелер болып табылады (оларды компилятор ескермейді):

  • оң жақты фигуралық жақшаны қамтымаған кез келген мәтін

  • жұлдызшаны/оң жақты жай жақшаны қамтымаған кез келген мәтін

Ашатын жақша немесе (* - дан кейін доллар ($) белгісін қамтыған түсініктеме компилятордың директивасы болып табылады. $ символынан кейін компилятор бұйрығының мнемоникасы ілеседі. Түсініктемелерді бірнеше жолдарда да орналастыруға болады, мысалы:

{Бұл бірнеше жолдарда

орналасқан, ұзын

түсініктеменің мысалы.}

6 Лекция

6.1 Блоктар, локальділік және амал жасау облысы

Блоктар сипаттаулар мен операторлардан тұрады. Жалпы түрде кез келген блок программа ие болатын форматқа ие, бырақ тақырыбы жоқ. Әр блок процедура немесе функцияның сипаттау бөлігі немесе программа немесе модульдің бөлігі болып табылады. Әрдайым идентификатор немесе таңба программада кездескен кезде олар осы сипаттаудың амал жасау облысында орналасуы тиіс. Идентификатор немесе таңбаның амал жасау облысы оларды сипаттау бөлімінен бастап ағымдағы блок құрамына кіретін барлық блоктарды қоса ағымдағы блоктың соңына дейін таралады; (кірістірілген (ішіне салынған) блоктағы қайта анықтаудан басқа). Ext ішіне басқа Int блогы кірістірілген блок болсын. Егер Ext және Int атаулары бірдей идентификаторларға ие болатын болса, мысалы, j, онда Int өзінің ішінде сипатталған j идентификаторға қол жеткізе алады, және ұқсама түрде Ext сипатталуын қамтыған j идентификаторға қол жеткізе алады. Идентификаторлар мен таңбаларды сипатталғанша пайдалануға болмайды.

uses сөйлемін қамтыған программалар мен модульдер uses-тің сол сөйлемдерінде көрсетілген модульдердің интерфейстік секцияларында сипатталған идентификаторларға қол жеткізе алады. uses сөйлеміндегі әр модуль басқа модульдер мен толық программаны қамтитын амал жасаудың өз облысын анықтайды.

Құрамына кірістірілген тұрақтылар, типтер, айнымалылар, процедуралар мен функциялардың идентификаторлары барлық пайдаланылатын модульдер мен бүкіл программаны қамтитын блокта сипатталғандай болып амал жасайды. Нақтылықта бұл стандартты объекттер System модулінде сипатталған. Ол модульді кез келген программа немесе модуль uses сөйлемінде көрсетілген кез келген модульден бұрын пайдаланады. Бұл келесіні білдіреді: кез келген программа немесе модуль стандартты идентификаторларды қайта анықтауы мүмкін, ал оларға сілтеме жасау құрама идентификатор арқылы жүзеге асырылуы мүмкін, мысалы, System.Integer немесе System.Writeln.

Нұсқағыштары бар операциялар. Типтелген нұсқағыштарға ^ аталуын алып тастау операциясын қолдануға болады: егер p T типке нұсқағыш болып табылса, онда p^ - оған р нұсқағыш сілтеп тұрған Т типтегі элемент.

Қатынас <, >, <=, >=, =, <> операциялары мен қатар типтелген нұсқағыштарға арифметикалық + және – операцияларын қолдануға болады.

+ операциясы типтелген нұсқағышқа және бүтін санға қолданылады: егер p ^T типке ие болып, T типтегі элементтерден тұратын бірөлшемді массивтін a[k] элементіне сілтеп тұрған болса, і – бүтін, онда p+i a[k+i] элементтің адресін қайтарады. Операция –типтері бірдей екі типтелген нұсқағыштарға қолданылады: егер p1 және p2 T типтегі элементтерден тұратын бірөлшемді массивтін элементтеріне сілтеп тұрса, онда p2-p1 осы нұсқағыштардың арасындағы элементтердің мөлшер санын қайтарады (егер p2-дегі адрес p1-дегі адрестен кіші болса таңбасы -). Мысалы:

var

a: array [1..10] of integer;

p: ^integer;

begin

p:=@a[1];

for i:=1 to 10 do

begin

p^:=i;

p:=p+1;

end;

...

Жиындарға қолданылатын операциялар. Жиындарға + (біріктіру), - (алу) және * (қиылысу) операциялары қолданылады:

var

s1,s2,s: set of byte;

begin

s1:=[1..4];

s2:=[2..5];

s:=s1+s2; // s=[1..5]

s:=s1-s2; // s=[1]

s:=s1*s2; // s=[2..4]

Жиындарға сонымен қатар қатынас = (тендік), <> (тенсіздік), <= (кірістірілген) және >= (қамтиды) операцияларын қолдануға болады:

var

s1,s2,s: set of byte;

b: boolean;

begin

s1:=[1..4];

s2:=[2..5];

s:=[1,2];

b:=s1=s2; // b=False

b:=s2<>s; // b=True

b:=s<=s2; // b=False

b:=s1>=s; // b=True

in операциясы элемент жиынның құрамына енетіндігін анықтайды:

1 in [2..5] // False

3 in [2..5] // True

Нұсқағыш тип (Pointer, нұсқағыш тип) базалық тип деп аталатын, белгілі бір типтегі динамикалық айнымалыларға сілтейтін мәндер жиының анықтайды. Нұсқағыш типті айнымалы жадыдағы динамикалық айнымалының адресін қамтиды. Егер базалық тип әле сипатталмаған идентификатор болып табылса, онда ол нұсқағыш типі сипатталған типтерді сипаттау бөлімінде сипатталуы тиіс. Нұсқағыш-айнымалыға New процедурасы, @ операция немесе Ptr функция арқылы мәнді меншіктеуге болады. New процедурасы динамикалық айнымалылар үшін динамикалық түрде таратылатын облысынан жадының жаңа облысын бөліп береді де осы облыстың адресін нұсқағыш айнымалыда сақтайды. @ операция нұсқағыштің айнымалысын идентификаторларға ие болатын айнымалыларды қоса, бар болатын айнымалыны қамтитын жады облысына бағыттайды. Ptr функциясы нұсқағыштің айнымалысын жадыдағы белгілі бір адреске бағыттайды. Резервтелген nil сөзі нұсқағыштің мәні ешнәрсеге сілтемейтін тұрақтыны белгілейді.

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