Жолдық процедуралар
Процедура деп атау берілген,арнайы амалдарды орындай-тын,
өзінше тəуелсіз бағдарламаны айтады. Процедура тақырыбынан жəне
оның денесінен тұрады. Процедураны оның атауы арқылы шақырады.
1. DELETE (S,M,N)-S-тің мəнінің Ь-ші орнынан бастап N симвал-
ды алып тастап нəтижені S-ке жазады.
51
Мысал . Нəтиже
…
S:= ‘абав’;
DELETE (S,2,2);
writeln(‘S=’,S); S= ‘ав’
2. INSERT (S1,S2,N)-S2-нің Nпозициясынан бастап S1 жолын S2
жолының арасына орналастырады да нəтижені S2-ге жазады.
Мысалы:
Берілуі Нəтиже
Var S1,S2:string [10];
…
S1:= ‘ физ.фак-T’;
S2:= ‘- мат. ’ ;
INSERT (S2,S1, );
write (S1); ‘физ-мат.фак-т’.
3. str (I,S)-I санын жолға айналдырады да S-айнымалысына
орналастырады.
Мысалы: Нəтиже
…
var I:real;
s:string [20];
I:=15;
str(I,S);
writeln (s); ‘15’
str(I:4,s);
writeln(s); ‘ 15’
4. Var (s,x,cod)- сандық S жолын бүтін немесе нақты санға ауда-
рады да нəтижесі I-ге жазады. cod- бүтін типтегі сан. Егер
cod≠0бонда аударылғаны дұрыс, cod≠0 қате,оның мəні I-ші қате
кеткен орынды көрсететін санға тең.
Мысалы:
Берілуі: Нəтиже:
Var
Lit:cuar;
st:string [6];
cod,I:integer;
begin
52
lit:= ‘f’;
st:= ‘1992’;
val (st,I,cod);
writeln (‘I=’,I, ‘Acod=’,cod); I=1992 cod=0
val (lit,I,cod);
writeln(‘I=’,I, ‘ cod’,cod); I- кез келген сан cod=1
9-Дəріс. Ішкі программалар жəне оларды класқа бөлу. Ішкі
программаларды ұйымдастыру əдістері. Ішкі программаларды
шақыру.
Практикалық есептерге бағдарлама құрғанда, ал үлкен
бағдарламаның белгілі бір бөлігін əр түрлі мəндер бойынша бірнеше
(тіпті одан да көп) рет қайталап пайдалануға тура келеді. Мұндай бір
типтес бағдарлама бөлігін бағдарламаның əр бөлігінде қайталап жаза
беруіне мақсатында оны жеке көмекші бағдарлама ретінде бөліп
тастау қолайлы.
Жеке бағдарлама түрінде бөлек жазылған, қажет кезінде оған
оралып, оны пайдаланып отыруға болады болатын негізгі бағдар-
ламаның арнайы бөлігін көмекші бағдарлама (ішкі бағдарлама)
дейді. Көмекші бағдарламаға автоматты түрде енуге жəне одан
шығуға болады.
Көмекші бағдарламаны пайдалану төмендегідей мүмкіндіктер
береді:
- негізгі бағдарламаның көлемі кішірейеді;
- негізгі бағдарламада пайдаланылған айнымалыларды көмекші
бағдарламада пайдалануға болады;
- көмекші бағдарламаға берілген жады ұяшықтарын, ол орын-
далмай тұрғанда бос ұяшық ретінде (бос айнымалы ретінде) пайда-
лануға болады;
- көмекші бағдарламаны пайдалану структуралық бағдарлама-
лауға мүмкіндік береді.
Паскаль тілінде алгоритмдік тіл тəрізді көмекші бағдарламаның
екі түрі пайдаланады. Олар процедура (PROCEDURE) жəне функция
(FUNCTION).
Бір бағдарламада бір немесе бірнеше процедура жəне функция
пайдалануы мүмкін. Паскаль тілінде процедуралар мен функциялар
бағдарламаның басында айнымалылар бейнеленіп болғаннан кейін
бейнеленеді, яғни жазылады.
53
Жоғарыда ескерілгендей негізгі жəне көмекші бағдарламада бір
айнымалы, мысалы К қатар пайдалануы мүмкін, бірақ əр бағ-
дарламада пайдаланғанда К-ның функциялық мағынасы бірдей болуы
шарт емес. Атау берілген операторлар тізбегін Паскаль тілінде
процедура дейді. Яғни: əр көмекші бағдарламаның (процедураның
немесе функцияның) атауы (аты болуы керек, көмекші бағдарламаға
сан атау негізінде оралады).
Процедуралар
Кез келген процедура бағдарламаға ұқсас түрінде жазылады.
Олардың басы, бейнелеу жəне операторлар бөліктері болады.
PROCEDURE аты (формалды параметрлер тізімі);
Бейнелеу бөлігі
BEGIN
Оператор бөлігі
END
Процедураны параметрсіз пайдалануға болады. Екі процедуралық
бағдарлама схемасы төмендегідей болады: PROGRAM Р ( INPUT,
OUTPUT);
Ортақ берілгендерді белгілеу бөлігі
PROCEDURE Р1;
Р1-дің процедураларын бейнелеу бөлігі
BEGIN
Р1-дің операторлар бөлігі
END;
PROCEDURE Р2;
Р2-нің процедураларын бейнелеу бөлігі
BEGIN
Р2 операторлар бөлігі
END.
BEGIN
Негізгі бағдалманың операторлар бөлігі
END.
Бағдарламаның орындалуы негізгі бағдарламалық операторының
орындалуынан басталады. Негізгі бағдарламада қашан процедураның
орындалуы қажет болғанда ғана процедураға көшеді. Бұл жағдай да
берілгендер негізгі бағдарламадан процедураға (енетін параметрлер)
беріледі.
54
Процедура орындалып болған соң оның нəтижесі ( шығатын па-
раметрлер), процедураға негізгі бағдарламадан қай жерден көшті,сол
жерге береді. Одан соң негізгі бағдарлама орындала бастайды.
Жеке бағдарламаларды бағдарлама кітапханасына жинап, қажет
кезінде процедура ретінде пайдалануға болады. Кітап ханадан қа-
жетті процедураны «ала тұру» үшін EXTERN (немесе EXTERNАL;)
операторын пайдаланады.
Кытапханадан қажетті процедураны «алу» үшін процедураның
басынан (тақырыбынан) соң (PROCEDURE атау) EXTERN; опера-
торы жазылады;
Функция
Паскаль тілінде функцияны арнайы бағдарлама ретінде жеке жа-
зуға болады, сондықтан оны көмекші бағдарлама ретінде қарауға бо-
лады. Функция- бағдарламаның, поцедура бағдарламадан ерекшелігі:
- функция бір ғана белгілі мəн қабылдайды, яғни функция -
бағдарламадан алатын нəтиже біреу-ақ;
- нəтиже функция аты арқылы алынады да, негізгі бағдарламада
пайдаланылады.
Функция- бағдарламаның жазылу үлгісі:
FUNCTION аты (формальді параметрлер):тип;
бейнелеу бөлігі;
BEGIN
параметрлер бөлігі
END;
Функция фактілі параметрлердің мəндері берілгеннен кейін өз аты
арқылы шақырылады. Сонымен қатар функцияны тікелей өрнектің
ішіне шақыруға болады.
Процедура мен функция айырмашылықтарын түсіну үшін екі
санды қосу бағдарламасын процедура жəне функция түрінде
жазалық.
Мысал: Екі санның қосындысын табу керек.
а) PROGRAM KPR;
VAR A: integer;
PROCEDURE KOS ( B,C: integer; VAR k:integer);
begin
k:= B+C;
end;
begin
55
kos (15,4,A);
WRITELN (‘kos=',A: 2);
END.
- процедура мен функцияның ұқсастығы олардың екеуінде де
айнымалыларды, белгілерді, тұрақтыларды бейнелеу бөліктері
боладыж
- олардың бір-бірінен бірінші өзгешелігі- 1-сінде PROCEDURE, ал
2-сінде FUNCTION қызмет сөздері пайдаланылады;
- процедурада, нəтиже (айнымалы) параметрінің типі процедура
атауынан соң тұратын кіші жақша ішінде бейнеленсе, ал функцияда
нəтиже үшін арнайы параметр алынбайды, нəтиже ( функция мəні)
функция атына меншіктеледі , сондықтан функция типі, аргументтер
типтері бейнеленген жақша сыртында, ":" арқылы көрсетіледі.
Мысалы:
function f (a:real,var b:real):real;
function f (var a,b: integer.):integer;
function f (a:integer): char;
- негізгі бағдарламада функцияның мəнін тек функция атауы
арқылы пайдаланады.
Мысал: F= m!-k! есептеу керек.
PROGRAM FAK;
VAR F: real; M,K: integer;
FUNCTION FACT ( N: integer): real;
VAR I: integer;
P: real;
begin
P:=1;
FOR I:=1 TO N DO
P:= P*I; FACT:= P
END;
BEGIN
READLN( M,K);
F:= FACT (M)- FACT (K);
WRITELN ('F=',F)
END.
56
10-Дəріс. Нақты параметрлерді тасымалдау. Жадының жалпы
облысын пайдалану. Стандартты ішкі функциялардың қоры
жəне процедуралары. Оларды шақырудың тəсілдері.
Турбо Паскальда сегіз стандартты модульдер бар. Бұл
модульдерде көптеген əртүрлі типтер, тұрақтылар, процедуралар мен
функциялар қолданылады. Оларға SYSTEM, DOS, CRT, PRINTER,
GRAPH, OVERLAY, TURBO3 жəне GRAPH3 жатады.
GRAPH, TURBO3 жəне GRAPH3 модульдері жеке TPU-
файлдарға белгіленген, ал қалғандары TURBO.TPL кітапханалық
файлдың құрамына кіреді. Тек қана бір SYSTEM модулі кез келген
программаға автоматты түрде қосылады. Басқа модульдерге USES
сөзінен кейін тізімде аттары көрсетілгеннен соң қатынас құруға
болады.
Стандартты модульдер
Негізгілері:-system, -crt, -graph, -dos, -printer.
Graph модулі жəне tpu-файлда, ал қалғандары turbo.tpl (tpl –Turbo
Pascal Library) кітапханалық файл құрамына кіреді. System модулі
ғана кез келген программаға автоматты түрде қосылады, қалған
модулдерді uses сөзінен кейін көрсету қажет.
System
модулі.
Турбо
Паскаль
стандартты
ішкі
программаларының негізгі кітапханасы. Онсыз бірде – бір программа
орындалмайды. Бұл модульге барлық негізгі стандартты функциялар
мен процедуралар (енгізу /шығару, қатармен жұмыс процедуралары,
математикалық амалдар жəне функцияға тəн процедуралар мен
функциялар) жатады.
crt модулі. Экран жұмысының мəтіндік режимін басқару,
кілтжиынды, дыбыстық жұмыстарға сəйкес процедуралар мен
функциялар қамтылады.
Graph модулі. Экранның графиктік жұмыс режимін басқаруға
қажетті типтер, тұрақтылар, процедуралар, функциялар жиынын
қамтиды. Түрлі графиктік көріністер құруға болатын ішкі
программалармен қамтылған.
dos модулі. MS-DOS амалдық жүйесінің барлық жабдықтарына
қатынас ұйымдастыратын процедуралар мен функциялар қамтылған.
printer модулі. Ақпаратты баспаға шығарудың қарапайым тəсілін
ұсынады.
57
Экранды басқарудың процедуралары мен функциялары
Textmode (mode); мəтіндік режимді орнату. Мұндағы, mode - word
бүтін типті тұрақты.
Терезелермен жұмыс. Терезені құру үшін қолданылатын
процедура: window (X1, Y1, X2, Y2); X1, Y1 - терезенің жоғарғы сол
жақ бұрышының координаталары;
X2, Y2 - терезенің төменгі оң жақ бұрышының координаталары.
Мысалы: window(1,1,80,25) – толық экранды алып тұратын терезе
құрылады.
Негізгі процедуралар мен функциялар:
-clrScr - активті терезені тазарту;
- clrEol активті терезедегі қатарды курсор тұрған жерден бастап
тазарту;
- GoTo (X, Y) - активті терезенінің шеңберінде X, Y координаталы
позицияға курсорды орнату;
- where X - курсордың ағымдық позициясындағы X -
координатасын қайтару функциясы;
- where Y - курсордың ағымдық позициясындағы Y координатасын
қайтару функциясы;
-delay (time) - компьютер жұмысын ақырындату процедурасы; -
time - миллисекундтағы кідіріс уақыты. Дыбысты басқару
процедуралары:
-sound (Hz) ішкі динамиканы қосу процедурасы. Hz - сигнал
жиілігі (герц-пен өлшенеді). Дыбыстық сигналды өшіру үшін nosound
процедурасы қолданылады.
11-Дəріс. Программаларды ұйымдастыру. Əртүрлі
құрылымдық ұйымдасқан программалардың мысалдары.
Ақпаратты компьютердің сыртқы құрылғыларында көрсету.
Файлдармен жұмыс істеу.
Файлдық тип. Турбо Паскальда файлдың үш түрі бар:
-мəтіндік файл (text типімен анықталады);
-типтелген файл (file of тип сөйлемімен беріледі);
-типтелмеген файл (file типімен анықталады).
Программада файлмен жұмыс үшін баяндау бөлімінде файлдық
айнымалыны (файлдық типті) анықтау қажет.
Ол былай беріледі:
type
Тип аты1 =text; Тип аты2 =file of Тип; Тип аты3 =file;
58
Var;
Айнымалы Аты1: Тип аты1; Айнымалы Аты2: Тип аты2;
Айнымалы Аты3: Тип аты3;
Немесе
Var; Айнымалы Аты1=text; Айнымалы Аты2=file of Тип;
Айнымалы Аты3= file;
Мұндағы, тип –Паскальдағы кез келген тип; (файлдардан басқа).
Мысалы:
Type file type= text {файлдық тип}
var
ftmp, f: filetype; {файлдық айнымалы} немесе var f1, lst: text;
f2: file;
Программада баяндалатын файлдық айнымалылар логикалық
файлдар деп аталады.
Деректерді енгізу/шығаруды қамтамасыз ететін барлық негізгі
процедуралар мен функциялар тек логикалық файлдармен жұмыс
жасайды. Сондықтан да, физикалық файлды қолданар алдында оны
логикалық файлмен (файлдың айнымалыларымен) байланыстыру
қажет. Файлды ішкі жəне сыртқы деп бөлуге болады. Программа
тақырыбында қамтылған файлдар сыртқы деп аталады (sbu f1-f4).
Ішкі файлдар сол программа ішінде құрылады, мұндай файлдар
программаның орындалуы кезінде ғана жұмыс істейтін болады.
Тізбектей қатынас құруға арналған файлдар үшін файлға деректерді
бір мезгілде жазу жəне оқуға тыйым салынған.
Файлға тікелей қатынас құру тəсілі. Мұнда файл элементтеріне
олардың адресі (нөмірі) арқылы қатынас құрылады. Қажетті
элементті іздеген кезде позициялық нөмірін көрсетсе жеткілікті. Бұл
тəсілде деректерді бір мезгілде оқуға жəне жазуға мүмкіндік бар.
Файлмен жұмыстың жалпы схемасы
Файлмен жұмыс істеуге арналған кез келген программаға тəн
қасиеттер:
файлдық типті (логикалық файлды) айнымалыны анықтау.
assign (белгілеу) процедурасының көмегімен программалаушы
қолданылатын физикалық файлдардың əрқайсысына файлдық типті
айнымалыны көрсетеді.
файлды иницирлеу (иницировать), яғни деректерді беру бағытын
көрсету.
Файлмен жұмыс файл құрылған жағдайда ғана мүмкін болмақ.
Файл жоқ болған жағдайда, оны құру қажет. Бұрыннан бар болса –
59
reset қайта құру процедурасы қолданылады (переустановка). Екінші
жағдайда –rewrite қайта
жазу
(перезапись)
процедурасы
қолданылады.
Файлды ашу жəне құру кезінде оның деректерін уақытша сақтау
үшін компьютердің жедел жадысынан автоматты түрде аумақ
бөлінеді, оны файл буфері деп атайды. Деректерді оқу, енгізу/шығару
инструкциялары: read, readln, write, writeln. Файлдық айнымалыны
жабу жəне деректерді жұмыс аяғында сақтау үшін close процедурасы
қолданылады.
Файлмен жұмысқа арналған процедуралар жəне функциялар
-assign (файлдық Айнымалы, файл Аты)-логикалық файлды
файлдық айнымалымен байланыстыру процедурасы. Ашық файлға
қолданылмайды. Файл Аты – қатарлық типті өрнек.
-reset (файлдық Айнымалы) процедурасы –бұрыннан бар файлды
оқу үшін ашады. Файлды оқу кезінде нұсқағышты оның басына
қайтару керек болса, онда reset процедурасын осы файлға қолданса
жетіп жатыр.
-ioresult функциясы файлдың дискіде бар-жоғын тексереді.
-rewrite (файлдық Айнымалы) процедурасы –деректер жазу үшін
жаңа файл құрады жəне ашады. Бұл процедура сəтті орындалған
жағдайда файлға бірінші элементті жазуға болады. Егер бұрыннан
бар файлға rewrite процедурасын қолдансақ, онда ол файл жоғалып
кетеді (ішіндегі деректер өшіп қалады) да, сол аттас бос жаңа файл
құрылады.
-close
(файлдық
Айнымалы)
процедурасы
–программа
өңделгеннен кейін программалаушы файлды жабу керек. Қарсы
жағдайда деректер жойылып кетуі мүмкін.
-rename (файлдық Айнымалы, файл Аты) процедурасы - кез
келген типті ашық емес файлдың атын өзгерту үшін қолданылады.
Жаңа ат файл Аты қатарында беріледі.
-erase (файлдық Айнымалы) процедурасы кез келген типті ашық
емес сыртқы файлды жояды, файлдық Айнымалы параметрімен
беріледі. Rename жəне erase процедураларын ашық файлдар үшін
қолдануға болмайды. Файлды алдымен жазып алу қажет.
-eof (файлдық Айнымалылар) логикалық функциясы- (End of File)-
файлдың соңы екенін тексереді (одан деректерді оқығанда).
~ функция true мəтін қайтарады, егер файл соңы болса;
~ қарама- қарсы жағдайда false болмақ.
60
Read (оқу файлдан) reset (f) процедурасының операторы орындал-
ғаннан кейін ғана қосылады.
12-Дəріс. Мəліметтердің динамикалық құрылымы.
Сілтемелер. Кезектер жəне ағымдармен жұмыс істеу.
Сілтемелер –деректердің ерекше типі. Сілтемелік типтер деп те
аталады.
Осы уақытқа дейін біз тек статикалық программалық объектілерді
қарастырдық. Бұл объектілер программа орындалмастан бұрын
туындап, программаның орындалуы барысында мəндер өлшемі
өзгерместен қалып отырады (машиналық жады көлемі өзгермейді).
Статикалық объектілер сол объектілерді баяндаумен туындайды.
Мысалы:
Var
X: array [1..10] of real;
Программаға реттік типті статикалық айнымалылар енгізіледі.
Статикалық
объектілер
программаның
орындалуына
дейін
туындайтындықтан жəне олардың мəндерінің өлшемі алдын-ала
белгілі болғандықтан да, осы мəндерді сақтау үшін қажетті машина
жадысындағы орын программаның бастапқы мəтінін машиналық
тілге трансляциялау кезінде бөлінеді.
Алгоритмдік тілде жазылған программада программалық
объектілерге сілтеме олардың аттары арқылы жүзеге асырылады,
яғни объектіге аты бойынша қатынас құрылады.
Қазіргі кездегі компьютерлерде бұл орын объекті адресі арқылы,
яғни жады ұяшығының көмегімен беріледі. Осы əрекеттердің
барлығы (статикалық айнымалыларға тəн) трансляция кезінде
орындалмақ. Дегенмен, программалауда тек статикалық объектілерді
қолданудың өзіндік қиындықтары (тиімді машиналық программа алу
көзқарасы тұрғысынан қарағанда) да жоқ емес.
/* Кейде біз программаны құру кезінде алдын-ала белгілі бір
программалық объектінің мəн өлшемін, мəн өлшемі тұрмақ сол
объектінің өзінің программа жұмысы кезінде болатынын немесе
болмайтынын біле алмаймыз*/.
Программаның орындалу процесінде туындайтын немесе
программаның орындалу барысында мəндерінің өлшемі анықталатын
объектілер динамикалық объектілер деп аталады.
Мысалы, берілген мəтіннен (кілең сөзден тұратын) бірінші сөзді
табу керек болсын.
61
Мəні ізделінетін сөз болып табылатын айнымалы, программаның
орындалу барысында мүлдем пайда болмауы мүмкін. Егер ол пайда
болса, онда осы айнымалының мəні болып табылатын сөз ұзындығы
алдын-ала белгісіз болуы мүмкін. Мұндай айнымалылар –
динамикалық программалық объектілер болып табылады.
Динамикалық объектілерді қолданудың да өзіндік күрделіліктері
бар:
Соның бірі, программаның орындалу процесінде динамикалық
объектілер пайда болады, ал олармен орындалатын əрекет
программаны жазу барысында берілуі қажет. Осыған байланысты, əлі
туындамаған объектіге программада қалай сілтеме жасауға болады
деген сұрақ туындайды. Ол үшін Паскальда динамикалық объек-
тілермен жұмыста қолданылатын –сілтемелік тип қарастырылады.
Бұл типтің мəні қандай да бір болмасын программалық объектіге
сілтеме болмақ. Машиналық тілдегі мұндай сілтеме сəйкес объектінің
жадыдағы орнын (адресін) көрсетеді.
Динамикалық объектілер жəне сілтемелер
Сілтемелік типті беру синтаксисі:
<сілтемелік типті беру>:= ↑ <тип Аты>,
↑ -сілтемелік тип белгісі, <тип Аты> -стандартты ат. Сілтемелік
типті айнымалылар айнымалыларды баяндау бөлімінде беріледі.
Мысалы:
type
массив = array[1 . . 100] of integer;
динмас =↑ массив;
var
p: ↑ integer
g: ↑ char
рабмас: динмас;
мұндағы, p–бүтін типті динамикалық объектіге сілтеме;
g
–литерлік типті динамикалық объектіге сілтеме.
Рабмас -100 саннан тұратын массивті құрайтын динамикалық
объектіге сілтеме. Барлық статикалық айнымалылардың ортақ қасиеті
–олардың мəндері сəйкес динамикалық объектінің жадыдағы
орындарын көрсету, сондықтан сілтемелік типті айнымалыларды
сілтемелер деп жиі атайды.
Кейбір жағдайларда нұсқағыш мəні ретінде ешқандай объектімен
байланыспайтын «бос» сілтемелер құру қажеттілігі туындайды.
Мұндай мəн Паскалда nil қызметтік сөзімен беріледі де, кез келген
62
сілтемелік типке жатады. /* Енді динамикалық объектілермен қалай
жұмыс жасауға болады, оған мəндерді қалай меншіктейміз, соны
қарастырайық*/.
Динамикалық объектіге сілтеме жасау үшін нұсқағышты
айнымалы деген түсінік қолданылады. <нұсқағышты айнымалы>:=
<сілтемелік айнымалы>↑
<сілтемелік айнымалы> - программадағы берілген динамикалық
объектіге сəйкес сілтемелік типті статикалық айнымалының аты.
Сілтемелік типтен кейін қойылған ↑ белгісі –сол сілтемелік
айнымалының мəнін емес, осы сілтемелік тип көрсететін
программалық объектінің мəнін көрсетеді.
Мысалы: программада p айнымалысы бар болсын:
var
p: ↑ integer;
new(p) процедурасының орындалуы нəтижесінде, integer типті
динамикалық объект туындайды. Одан соң: p↑:=58; меншіктеу
операторын жазатын болсақ, онда жоғарыдағы динамикалық
айнымалыға 58-ге тең мəн меншіктеледі. Егер r – integer типті
айнымалы болса, онда мынадай меншіктеу операторын жазуға
болады:
R:=r+p↑+2 ;
r –дің бастапқы мəні берілсе, онда 58+2 = 60 болады.
Сілтемелік айнымалы ретінде индексті айнымалыларды (массивке
байланысты) қолдануға болады;
A[2] немесе A[K+5] → A[2]↑ жəне A[k+5].
Достарыңызбен бөлісу: |