FUNCTION <функция аты> (CONST <тұрақты аты> :
<типі> ; ...): <нəтиже типі> ;
Параметр-тұрақтыны басқа ішкі программаға параметр ре-
тінде беруге болмайды.
Параметр-процедура жəне параметр-функция
Процедуралық типті хабарлау үшін, процедура (функция) аты
жазылмаған ішкі программа тақырыбы қолданылады.
Мысалы:
TYPE
TPR1= PROCEDURE( X,Y : REAL; VAR Z : REAL);
TPR2= PROCEDURE ;
TF1= FUNCTION: STRING;
TF2=FUNCTION ( VAR S: STRING) : REAL;
8.5 Атаулардың əсер ету аймағы
Кез келген ішкі программа өзінің сипаттау аймағы бар блок
болып саналады. Осы блоктың ішінде басқа процедура жəне
функцияны сипаттауға, шақыруы мүмкін. Қандай да бір блоктың
ішінде сипатталған объектілер, осы блоктың жергілікті объектісі
245
болып саналады жəне оған басқа сыртқы блоктан қол жеткізуге
болмайды. Оларға тек сипатталған блоктың ішінде ғана сілтеме
жасауға болады. Объект – тұрақты аты, типтер, айнымалылар,
процедуралар, функциялар. Сыртқы блокта сипатталған, бірақ
ішкі блокта сипат талмаған объектілер ауқымды объекті деп ата-
лады жəне оларды ішкі де, сыртқы да блоктан шақыруға болады.
Жергілікті жəне ауқымды айнымалылардың аттары бірдей болса,
жергілікті айнымалылар өз аумағында ауқымды айнымалылардың
қызметін тоқтатады.
Суретте жеке идентификаторлардың қызмет аумағы схема
түрінде көрсетілген:
•
Y – 4 блоктың жергілікті айнымалысы, оған 1,2,3 блоктан
қол жеткізуге болмайды.
•
K, L – 2 блоктың жергілікті айнымалысы, оған 1,3,4 блок-
тардан қол жеткізуге болмайды.
•
C – 3 блоктың ауқымды айнымалысы, 1 жəне 2 блоктан
қол жеткізуге болмайды.
246
•
B, D - 2,3,4 блоктардың ауқымды айнымалылары, 1,2,3,4
блоктардан қол жеткізуге болады.
•
T - жалпы тип.
А идентификаторы əр түрлі екі айнымалыны білдіреді: А –
қызмет аумағы 1 жəне 2 блоктар жəне А' айнымалысы – қызмет
аумағы 3 жəне 4 блоктар. Х атауы да дəл осы сияқты: Х айныма-
лысы – қызмет аумағы 1, 2 жəне 3 блоктар жəне Х' айнымалысы
қызмет аумағы тек 4 блок.
Егер ішкі программада параметрлер бар болса, онда формальді
параметрлер тізіміндегі идентификаторлар осы процедура (функ-
ция) үшін жергілікті параметр жəне процедураның (функция)
ішіндегі əр ішкі программа (бар болған жағдайда) үшін аумақты
параметр болып саналады.
8.6 Рекурсивті процедуралар жəне функциялар
Рекурсия - процедура немесе функция өз құрамына кіретін
операторларды орындау барысында, өзін өзі немесе басқа про-
цедура жəне функция арқылы өзін шақыратын есептеу процесін
ұйымдастыру тəсілі.
Рекурсия тікелей немесе жанама болуы мүмкін. Тікелей
рекурсия кезінде ішкі программаны шақыру операторы оның
орындалу бөлі мінде орналасады. Кез келген тікелей рекурсивті
процедураны (функ цияны) рекурсивсіз етуге болады. Рекурсивті
сипаттама əдетте қысқы жəне көрнекті, бірақ көп машиналық
уақытты (қайталап шақыру керек болғандықтан) жəне жадыны
(айнымалылардың бірнеше рет қайта лануынан) қажет етеді.
Рекурсивті ішкі программа бір рет сырттан шақырылады.
Рекурсивті процедура немесе функцияның жұмысының аяқталау
шарты оның өзінде жазылады.
Мысал қарастырайық. F=M! мəнін есептеу керек. Факториал
мəнінің рекурсивті анықтамасын төмендегідей түрде жазуға бо-
лады:
М=1 болғанда F=1
М> 1 болғанда F= M!= M*(M-1)!, демек М! (М-1)!
арқылы анықталады.
a) Рекурсивті функция
PROGRAM MAIN;
VAR M: INTEGER;
247
F:REAL;
FUNCTION FACT (N:INTEGER): REAL;
BEGIN
IF N=1 THEN
FACT:=1
ELSE
FACT:= N* FACT(N-1);
END;
BEGIN
READLN(M);
F:= FACT ( M );
WRITELN (‘ M!=’, F);
END.
b) Рекурсивті процедура
PROGRAM MAIN;
VAR M: INTEGER;
F:REAL;
PROCEDURE FACT(N:INTEGER; VAR F: REAL);
VAR Q : REAL;
BEGIN
IF N=1 THEN Q:=1
ELSE FACT(N-1,Q);
F:=N*Q;
END;
BEGIN
READLN(M);
FACT ( M, F );
WRITELN (‘ M!=’, F);
END.
Есептің а) нұсқасында М=4 болғанда келесі іс-əрекет орында-
лады:
FACT:=4*FACT(3); FACT:=3*FACT(2); FACT:=2*FACT(1);
FACT(1):=1.
Функция бірінші рет шақырылғанда жадыдан параметр-
мəнге сəйкес жергілікті айнымалылар үшін орын бөлінеді. Оған
нақтылы параметрдің (М) мəні меншіктеледі. Функцияға əр
кірген сайын жаңа жергілікті айнымалылар құрылады. FACT(1)=1
248
болғандықтан функцияның орындалуы тоқтатылады. Бұдан кейін
келесі іс-əрекеттер орындалады:
FACT(1):=1; FACT:=2*FACT(1);
FACT(2):=2; FACT:=3*FACT(2);
FACT(3):=3*2=6; FACT:=4*FACT(3); т.е. FACT=24.
8.7 Модуль құрылымы. Модульді іске қосу
Процедуралар мен функцияларды жеке модульге топтасты-
ру ға болады. Модуль (unit) – мəтіні компиляциядан жеке (негізгі
программаға байланыссыз) өтетін программалық бірлік. Егер мо-
дуль компиляциядан нақты режимде өтсе, онда оның кеңейтілуі
TPU болады. Қорғалған режим үшін – TPP.
Модуль құрылымы Турбо Паскаль тіліндегі программа құ-
рылымынан өзгеше. Модуль төрт негізгі бөлімнен тұрады: та-
қырып - UNIT қызметші сөзінен кейін жазылады; сипаттаушы
бөлім (интерфейс) - INTERFACE қызметші сөзінен кейін жазы-
лады (бұл жерде айнымалы, процедура, функция, тұрақты жəне
осы модуль қолданатын басқа программалық модульдер қол
жеткізе алатын мəндер типі сипатталады); орындалатын бөлім
(ішкі) – IMPLEMENTATION қызметші сөзімен асталады (мұнда
программа мəтіні жəне тек осы модуль ішінде қол жеткізуге бо-
латын жергілікті объектілер жазылды); міндетті емес бөлім (ини-
циализациялау секциясы) – орындалатын бөлімнен кейін BEGIN
жəне END сөздерінің арасында жазылады (егер модульді инициа-
лизациялау қажет емес болса, онда секцияға тек END қызметші
сөзі жазылады).
Модульдің ішкі программаларын сипаттаған кезде қыс
қар-
тылған тақырыптарды қолданған дұрыс (параметрсіз жəне функ-
ция үшін нəтиже типін көрсетпей), мысалы, FORWARD директи-
васын қолданғанда. Модуль UNIT қызметші сөзінен жəне модуль
атынан тұратын тақырыптан басталады. Модуль аты міндетті
түрде өзі тұрған файл атымен (PAS кеңейтілімі бар) сəйкес келу
керек. Модуль құрылымы төмендегідей болып келеді:
UNIT <модуль аты>;
INTERFACE
USES <қосылатын модульдер тізімі>;
TYPE <осы модульде анықталып, басқа модульдерден қол
жеткізуге болатын типтердің сипаттамасы >;
249
CONST < осы модульде анықталып, басқа модульдерден қол
жеткізуге болатын тұрақтылардың сипаттамасы >;
VAR < осы модульде анықталып, басқа модульдерден қол
жеткізуге болатын айнымалылардың сипаттамасы >;
PROCEDURE <осы модульде анықталып, басқа модульдер-
ден қол жеткізуге болатын процедуралар тақырыбы >;
FUNCTION < осы модульде анықталып, басқа модульдерден
қол жеткізуге болатын функциялар тақырыбы >;
IMPLEMENTATION
USES < қосылатын модульдер тізімі >;
TYPE < осы модульде анықталып, басқа модульдерден қол
жеткізуге болмайтын типтердің сипаттамасы >;
CONST < осы модульде анықталып, басқа модульдерден қол
жеткізуге болмайтын тұрақтылардың сипаттамасы >;
VAR < осы модульде анықталып, басқа модульдерден қол
жеткізуге болмайтын айнымалылардың сипаттамасы >;
PROCEDURE < осы модульде анықталып, басқа модульдер-
ден қол жеткізуге болатын процедураларды іске асыру >;
FUNCTION < осы модульде анықталып, басқа модульдерден
қол жеткізуге болатын функцияларды іске асыру >;
PROCEDURE < осы модульде анықталып, басқа модульдер-
ден қол жеткізуге болмайтын процедуралардың тақырыбы жəне
іске асыру >;
FUNCTION < осы модульде анықталып, басқа модульдерден
қол жеткізуге болмайтын функциялардың тақырыбы жəне іске
асыру >;
BEGIN <бұл түйінді сөз инициализациялау секциясында
операторлар бар болғанда ғана қажет >
<Модульдің міндетті емес бөлімі>
END.
Интерфейстік жəне орындалу бөлімдері бос болуы мүмкін,
міндетті түрде модуль құрамында болуы керек. Модуль іске
қосыл ған да алдымен инициализациялау секциясының оператор-
лары (бар болса) орындалады, сонан кейін осы модуль қосылған
бас програм маның негізгі блогының операторлары орындалады.
Мысал қарастырайық. Вектор көлемі жəне оның элементтері
енгізіліп, бүтін сандардан тұратын бір өлшемді жиымның эле-
менттерін өсу реті бойынша сұрыптайтын процедураны шақы-
17–1618
250
ратын негізгі программа жазу керек. Жиым элементтерінің саны
100-ден аспауы тиіс. Процедураны модуль түрінде ұйым
дас-
тырайық.
USES CRT,MODSORT;
VAR A:MAS;
I:BYTE;
N:BYTE;
BEGIN
WRITELN('ВВОД ИСХОДНЫХ ДАННЫХ:');
READLN(N);
FOR I:=1 TO N DO
READLN(A[I]);
SORT(A,N);
FOR I:=1 TO N DO
WRITELN(A[I]);
READKEY
END.
Программаның бірінші сөйлемі Uses. Мұнда стандартты Crt
модулі жəне сұрыптау процедурасы жазылған Modsort модулі
көрсетілген. Жиымды сипаттайтын тип негізгі программада емес
модуль де көрсетілген.
UNIT MODSORT;
INTERFACE
TYPE MAS=ARRAY[1..100] OF INTEGER;
PROCEDURE SORT(VAR A:MAS; N:BYTE);
IMPLEMENTATION PROCEDURE SORT;
VAR I,J:BYTE;
X:INTEGER;
BEGIN
FOR J:=1 TO N-1 DO
FOR I:=1 TO N-J DO
IF A[I]>A[I+1] THEN
BEGIN
X:=A[I]; A[I]:=A[I+1]; A[I+1]:=X
END;
END;
END.
251
Модульдің интерфейстік бөлімінде mas типі сипатталған жəне
сұрыптау процедурасының тақырыбы көрсетілген. Uses сөзінің
көме гімен модуль іске қосылған кезде процедура мен типтерге
кез келген программадан қол жеткізуге болады. Бұл негізгі про-
граммада көрсетілген.
Бақылау сұрақтары
1. Ішкі программа дегеніміз не?
2. Параметрсіз процедуралар қалай сипатталады?
3. Ішкі
программаның
Pascal
программасынан
негізгі
айырмашылығын
атаңыз.
4. Параметрсіз процедуралар қалай шақырылады?
5. Кіріктірілген ішкі программалар дегеніміз не?
6. Ауқымды жəне жергілікті айнымалылар дегеніміз не?
7. Ішкі программаны қолданудың артықшылықтарын атаңыз.
8. Процедура мен функцияны сипаттаудың негізгі айырма
шылық-
тарын атаңыз.
9. Программада функцияны шақыру қалай іске асырылады?
10. Қандай жағдайларда параметрсіз процедураны қолданған ың-
ғайлы?
11. Параметрлі процедуралардың артықшылығы неде?
12. Нақтылы жəне формальды параметрлердің айырмашылығы неде?
13. Формальды параметрлер тобы қалай сипатталады? Нақтылы
параметрлер тобы ше?
14. Параметр-мəндерді берудің ережесі қандай?
15. Параметр-айнымалыларды берудің ережесі қандай?
16. Параметр-тұрақтыларды берудің ережесі қандай?
17. Бір ішкі программада əр типті бірнеше параметр-айнымалыны
қолдануға бола ма?
Тапсырмалар
1. Экранға биіктігін 8 жол етіп өз атыңызды шығарыңыз. Əр əріптің
бейнесі жеке процедура көмегімен жазылуы керек жəне түстері
əртүрлі болсын.
2. Түрлі стильдегі, түсі жəне қалыңдығы əртүрлі сызықтарды
қол
данып экранға өзіңіздің фамилияңыздың, атыңыздың жəне
тегіңіздің бас əріптерін шығарыңыз. Əр əріптің бейнесі жеке про-
цедура көмегімен жазылуы керек.
3. Экранға көлемдері бірдей əр түсті 7 жұлдыз тізбегін салыңыз.
4. Калькулятор программасын жазыңыз. «+», «-», «*», «/» опера-
цияларының орындалуын жеке процедура ретінде құрас тырыңыз.
252
5. 10 бүтін саннан тұратын жиымды өңдейтін программа жазыңыз.
Жиымның элементтерінің қосындысын, арифметикалық ортасын
жəне ең үлкен элементін анықтаңыз. Программаның əр логикалық
блогын процедура ретінде құрастырыңыз.
6. 15 əр түсті дұрыс сегізбұрыштардан тұратын экран «диагоналін»
сызыңыз.
7. 36 əр түсті дұрыс бесбұрыштардан тұратын дөңгелек суретін
салыңыз. Кез келген пернені басқанда программа өз жұмысын
аяқтайтын болсын.
8. Əр түсті жəне əр түрлі өрнектермен өрнектелген, көлемдері
бірдей алтыбұрыштардан құрастырылған пирамида салыңыз.
Пирамиданың ең төменгі қатары 20 алтыбұрыштан тұрады.
9. Үшбұрыштардан құрастырылған бірнеше шыршалар қатарынан
тұратын орман суретін салыңыз.
10. Олимпиада жалауын салыңыз. Жалаудың əр дөңгелегі 36 шеңберден
құрастырылсын.
11. Көлемі 20x20 болатын əртүсті тікбұрышты үшбұрыштардан
құрастырылған тор суретін салыңыз.
Төмендегі тапсырмалардың барлығында параметрлі процедураны
қолданыңыздар.
1. Əртүсті 15 алтыбұрыштан тұратын экран “диоганалін” са-
лыңыз.
2. Əртүсті 10 ромбтан тұратын тізбек салыңыз.
3. Енгізілген сөз тіркесіндегі бос орындар санын анықтайтын про-
грамма құрыңыз.
4. Бүтін сандағы цифрлар санын анықтайтын программа құрыңыз.
5. Сағат, минут жəне секундпен берілген уақытты толығымен
секундқа айналдыратын программа құрыңыз.
6. Пернетақтадан енгізілген катеті бойынша үшбұрыштың гипоте-
нузасын, ауданын, периметрін есептейтін программа құрыңыз.
7. Іштері боялған əртүрлі сегізбұрыштардан құрастырылған, көлемі
8x8 тор суретін салыңыз.
8. Іштері боялған əртүрлі кіші ромбтардан үлкен ромб құрастырыңыз.
Үлкен ромб диагоналі 10 кіші ромбтан тұрады.
9. Ішінде өз атыңыз жазылған тікбұрыш салыңыз. Координаталар
мен түсті процедура параметрі ретінде беріңіз. Осы процедураны
параметрлерді өзгертіп бірнеше рет шақыру керек.
10. Іші боялған жұлдызшалармен синусоида салыңыз.
11. Экранға іші боялған дұрыс көпбұрыш салыңыз. Көпбұрыштың
бұрыштарының саны, түсі жəне толтыру стилі пернетақтадан
енгізілсін.
253
12. Келесі пернелерді басқанда сəйкес есептеулерді орындайтын про-
грамма құрыңыз. F1 – шеңбердің ұзындығын есептеу;
F2 – дөңгелектің ауданын есептеу;
F3 – шардың көлемін есептеу;
F5 - программадан шығу.
Төмендегі тапсырмалардың барлығында функцияны қолданыңыздар.
1. a,b,c,d нақты сандары үшін m(a,b,c)+m(b,c,d)+m(c,d,a) өрнегінің
мəнін анықтаңыз. Мұндағы m(x,y,z) – үш санның ең кішісін
анықтайтын функция.
2. x,y нақты сандары берілген. u = min(x,y), v = min(xy,x+y), z =
min(u+v
2
, 3.14) анықтаңыз.
3. a, b, c нақты сандары берілген.
max( ,
) max( ,
)
1 max(
,1.15)
a a b
a b c
a bc
+ +
+
+
+
есептеңіз.
4. Нақты s, t сандары берілген.
(1.2,
)
( , )
(2
1, )
g
s
g t s
g s
st
− +
−
−
есептеңіз.
Мұндағы
2
2
2
2
( , )
3
3
4
a
b
g a b
a
ab
b
+
=
+
+
+
5. Нақты s, t сандары берілген.
)
,
,
2
.
2
(
)
7
.
1
,
2
,
(
t
s
t
f
s
t
f
−
+
−
есептеңіз.
Мұндағы
2
sin( )
( , , )
5
a b
c
f a b c
c
− −
=
+
6. Нақты a,b,c берілген.
( , )
( , ) *
( , )
g a b
g a c
g b c
есептеңіз.
Мұндағы
cos(
) cos(
)
( , )
*
sin(
)
sin(
)
x y
x y
g x y
x y
x y
+
−
=
+
−
7. Бүтін типті 10 элементтен тұратын жиым берілген.
(
) 98
* (
)
(
) 98
t mas
t mas
t mas
+
−
есептеңіз. Мұндағы
)
(mas
t
- жиым
элементтерінің арифметикалық орташасы.
8. a, b сөз тіркестері берілген.
max( ( ),5) * max( ( ),10)
f a
f b
есептеңіз.
Мұндағы
( )
f s
- сөз тіркесіндегі бос орындар саны.
9. Градусты радианға айналдыратын функция жазыңыз.
10. Тəулікпен, сағат, минут, секундпен берілген уақытты секундқа ай-
налдыратын функция жазыңыз.
254
9. ФАЙЛДАРМЕН ЖҰМЫС ІСТЕУ
9.1 Файлдар жайлы жалпы мəліметтер
Мəліметтердің көлемді жиынын, мысалы, жұмысшылар ту-
ралы деректерді немесе бір қызметкерге қатысты ақпараттар
жиынын (жалақы, стаж, адрес, отбасы құрамы т.б.) тұрақты пай-
даланып отыру үшін магниттік дискіге жазып қойған тиімді.
Магниттік диск немесе таспа (лента) компьютердің жедел жадына
симайтын ақпараттың өте көлемді түрлерін сақтай алады. Алдын
ала жазылып қойылған мəліметтер жиыны оны пайдаланатын
программамен жұмыс істеу барысында компьютерге қосылған
магниттік дискіден біртіндеп оқыла бастайды. Сондай-ақ, про-
грамма жұмысының нəтижесін де дискіге жазып қойып, қажет
кезінде баспаға немесе дисплейге шығаруға болады.
Паскальда компьютерде мəлімет өңдеу кезінде ақпараттар
ЭЕМ-нің сыртқы жадына (дискіге) жазылып сақталады. Дискідегі
ақпараттармен жұмыс істеу үшін арнайы объектілер – файлдар
қолданылады. Файл деп тізбектеле орналасқан жеке компонент-
терден тұратын дискідегі біртектес мəліметтердің реттелген
жиынын айтады. Файл – белгілі бір мақсатқа жету жолында
өзіндік (біркелкі) ұйымдастыру жолымен бір-бірімен логикалық
байланыста құрастырылған мəліметтердің (жазбалардың) атау-
лы жиыны. Осы уақытқа дейін программада тек ІNPUT жəне
OUTPUT тəрізді стандартты файлдар пайдаланылды. Файлдағы
компоненттер саны алдын ала берілмейді жəне олардың жиымдар
(массивтер) сияқты индексі болмайды. Файлдың ортасындағы
компонентті оқу үшін алдыңғы компоненттерді біртіндеп ретімен
оқи отырып жетуге болады. Жалпы жағдайда файл программадағы
айнымалы түрінде беріледі. Файлды əрбір пайдалану кезінде
программаға тек бір компонент оқылады немесе жазылады.
Физикалық жазба – сыртқы жадымен бір рет қатынас құру
(пайдалану) кезінде оған жазылатын немесе одан оқылатын
мəліметтер жиыны, яғни сыртқы жады мен жедел жады арасын-
да тасымалданатын мəліметтердің ең кіші (минимальді) көлемі.
Физикалық жазба бірнеше логикалық жазбалардан тұрады.
255
Логикалық жазба – файлдардан мəлімет оқу немесе жазу опе-
раторларында пайдаланылатын мəліметтер бірлігі. Логикалық
жазбалар сыртқы құрылғыға жиі-жиі мəлімет жазбас (оқымас)
үшін көлемдірек физикалық жазбаларға біріктіріледі.
Сыртқы құрылғыдағы (магниттік дискідегі) файл жазбаларын
пайдалану үшін логикалық файл ұғымы қолданылады. Логикалық
файл немесе программадағы файл – бұл белгілі бір мақсатқа
жету жолында біріктірілген логикалық жазбалардан тұратын
мəліметтер жиыны.
Файлдарды сипаттау немесе жариялау олардың айнымалы
түрінде берілген атынан соң fіle of түйінді сөздерінен тұрады.
Түйінді сөздерден кейін оның компоненттерінің типі беріледі.
Мысалы:
Type
stroka: fіle of char;
number: fіle of іnteger;
Assіgn
түйінді сөзі программадағы файл мен сыртқы құрыл-
ғыдағы файлды байланыстыру үшін қолданылады, мысалы:
ASSІGN (F, 'ALMA.TXT')
Бұл процедура дискідегі ALMA.TXT файлын программадағы
F
атты файлмен байланыстырады, программада ары қарай бұл
файлды пайдалану үшін жай ғана F деп көрсету жеткілікті.
Файлдағы жазбалар саны əр түрлі бола береді, бірақ кез кел-
ген сəтте тек бір ғана жазбаны пайдалана аламыз. Файл ұзындығы
деп оған жазылған компоненттер санын айтамыз. Ішінде жазбасы
жоқ файл – бос файл болып табылады.
Файлдық типтегі əрбір айнымалы программаның VAR
сипат-
тау бөлігінде жариялануы тиіс. Мұндай айнымалыны өрнектерде
жəне меншіктеу операторларында пайдалануға болмайды. Файл
компоненттері типі файлдық типтен басқа кез келген тип бола
алады.
Турбо Паскальда алдын ала анықталған төмендегі стандартты
тип бар:
Достарыңызбен бөлісу: |