Файлдар деп сыртқы жад құрылғыларына (дискілерге) белгілі бір атпен жазып қоятын кез-келген мәліметтер жиынтығын айтады. Бағдарламаның өзі де файл болып табылады. Кейбір өте үлкен бағдарламаларда мәліметтерді қайта-қайта өңдеу бағдарламалаушының ұзақ уақытын алады, және оны шаршатып жібереді де жұмыс барысында көптеген қателердің жіберілуіне әкеп соғады. Сондықтан көп мәліметтерді енгізу мен шығаруды қажет ететін бағдарламаларды файлдарға жазып, дискілерге сақтап қойған жұмысты көп жеңілдетеді. Тurbo Pascal-да файлдар бір типті элементтердің тізбегінен тұрады, олардың негізгі 3 түрлі ерекшеліктері болады:
- оның белгілі бір аты болады, бұл бір мезгілде бірнеше файлдармен жұмыс істеуге мүмкіндік береді;
- оның компоненттері бір типті болады, мысалы жазулардан немесе жолдық қатарлардан тұратын файлдар жасауға болады;
- бір файлдың ішінде екінші файл жасауға болмайды, файлдардан тұратын файл жасауға болмайды;
- файлды жасаған кезде оның бастапқы көлемі берілмейді, ол жазылатын дискінің сыйымдылығымен анықталады.
Көптеген жағдайларда файлдар жолдық қатарлар мен жазулардан тұрады. Бағдарламада файлдар FILE OF қызметші сөздері арқылы сипатталады. Turbo Pascal бағдарламаларында файлдар идентификатормен белгіленетін арнайы файлдық айнымалының көмегімен ашылады. Файлдық айнымалылар типі файлдың құрамындағы элементтер арқылы анықталады. Егер файлдар жазулардан тұрса, онда жазу аты ретінде белгіленетін идентификатор да сипатталуы тиіс.
Файлдардың жалпы сипатталуы:
а) бірден айнымалылар бөлімінде:
VAR файлдық айнымалы: файл элементтерінің типтері;
ә) типтер бөлімінде:
TYPE типі=файл элементтерінің типтері;
VAR файлдық айнымалы: типі;
Файлдарды сипаттау мысалдары:
TYPE A=File Of Char;
VAR X:A; {символдардан тұратын X файлы(А-типті)}
Y:File Of Real; {нақты сандардан тұратынҮ файлдық айнымалысы}
TYPE Dosye=RECORD
A:String; B:lnteger; C:Char; D:Byte; END; VAR X:Dosye; {Dosye-типті X жазуы}
Y:File Of Dosye; {Х жазуының элементтерінен тұратын Y файлдық айнымалысы}
Turbo Pascal-да файлдар құрамындағы элементтер типтеріне байланысты үш түрге жіктеледі:
1. Әртүрлі символдардан құралған қатарлар тізбегінен тұратын файлдарды текстік файлдар деп атайды, олардың файлдық айнымалысы VAR бөлімінде ТЕХТ стандартты типімен сипатталады, мысалы:
VARX:Text;
Y:String;
Текстік файлдар әртүрлі текстік немесе сандық шамалардын тұратын мәліметтерді сақтау үшін қолданылады. Олардың құрамындағы элементтер саны мен ұзындықтары әртүрлі болып келеді. Әр қатардың соңы арнаулы қатардың соңын білдіретін EOLN (End Of Line), ал бүкіл текстің соңы файлдың соңын білдіретін EOF (End Of File) белгілерімен аяқталады.
2. Құрамындағы элементтер типтері алдын - ала типтер бөлімінде сипатталатын файлдарды типтері анықталған файлдар тобына жатқызуға болады, мысалы оларға жазулардан тұратын файлдарды жатқызуға болады:
TYPE Karta=RECORD
A, B: Integer;
C:Real;
D:String
End;
X: File Of Karta;
Y:Array[1.. 10] Of Karta;
Типтері анықталған файлдарды көбінесе деректер қорын жасайтын бағдарламаларда қолданылады. Егер текстік файлдардың құрамын бірыңғай символдардың жиынтығы болса, онда типтелген файлдардың құрамын реттелген белгілі бір мәліметтердің жиынтығы деп қарастыруға болады.
3. Құрамындағы элементтер типтері көрсетілмей, тек қана файлдық айнымалысы ғана File-типті болып сипатталатын файлдар типтері анықталмаған файлдар тобына (немесе типтелмеген файлдар тобына ) жатады, сипатталу мысалы:
VAR X:File;
Y:lnteger;
Типтері анықталмаған файлдарды символдар мен байттардың жиынтығы ретінде қарастыруға болады. Бұл файлдардың типтерінің жоқтығы оларды кез-келген басқа типті файлдармен сәйкестендіріп байланыстыруға және дискі мен жад арасындағы мәлімет ауыстыру жылдамдығын арттыруға мүмкіндік береді.
10.1. Файл өңдеудің негізгі процедуралары мен функциялары
ASSIGN және CLOSE процедуралары.
Файлмен жұмыс алдында оның атын файлдық айнымалымен байланыстырып алу үшін ASSIGN процедурасы қолданылады:
Assign(X,N);
мұндағы: X - файлдық айнымалы,
N - ашылатын файлдың аты.
Жоғарыдағы процедураның орындалу нәтижесінде компьютер жұмыс істеу үшін ашылатын файлдың атын файлдық айнымалыға бepiп (X:=N), әрі қарай кездесетін амалдарда ашылған файлдың атын X деп алып қатысады. Бағдарламада ашылған файлға қолданған файлдық айнымалыны екінші бір файлды ашуға Assign процедурасында қолдану үшін міндетті түрде бірінші ашқан файлды жабу керек немесе екінші ашылатын файлдың файлдық айнымалысын басқа идентификатормен белгілеу керек.
Файлды жабу үшін CLOSE процедурасы қолданылады.
CLOSE(X);
мұндағы: X - файлдық айнымалы.
ASSIGN және CLOSE процедураларын қолдану мысалдары:
а) бірінші ашылған файлды жауып, екінші файлдың атын қайтадан X файлдық айнымалысына беру:
Assign(X, N); //Х-ке ашылатын N файлының атын беру
Assign(X,M); //Х-ке келесі ашылатын М файлының атын беру
ә) бірінші ашылған файлды жаппай-ақ екінші файлдың атын басқа идентификатормен белгіленген файлдық айнымалыға беру:
Assign(X,N); //Х-ке ашылатын N файлының атын беру
..........................................
Assign(X1,M); //X1-ге келесіашылатын М файлыныңатын беру
.........................................
Close(X); ...........................
ASSIGN процедурасының көмегімен файлдың атын файлдық айнымалымен байланыстырғаннан кейін, олармен көптеген амалдар жүргізуге болады, мысалы:
1. Дискіге жаңа файл жазу
2. Дискіде бар файлдың мәліметтерін өшіріп, басқа мәліметтер жазу;
3. Файлды дискіден оқу;
4. Файлдың атын өзгерту;
5. Файлды дискіден өшіру;
6. Файлдан берілген элементті іздеп табу;
7. Файл элементтерін өзгерту;
8. Файлға жаңа элемент қосу;
9. Бір файлдың элементтерін екінші бір файлға көшіріп жазу т.б..
REWRITE процедурасы.
Дискіден бос орын ашып, жаңа файл жазуға дайындау үшін стандартты REWRITE процедурасы қолданылады. Процедураның орындалу нәтижесінде жаңа бос файл ашылып арнаулы файлдық сілтеме-көрсеткіш файлдың басына барып орналасады да (бастапқы 0 нөмірлі элементке), әрі қарай ендірілетін мәліметтер жаңа файлға сол жерден бастап ендіріледі. Бұл процедураның көмегімен дискіде бұрыннан бар файл ашылып жазылған жағдайда, ескі файлдағы мәліметтер өшіріледі де орнына жаңа мәліметтер жазылады, жалпы жазылуы:
REWRITE(X);
мұндағы: X - дискіге жазылатын файл аты.
Жаңа файлдың ішіне мәліметтер READ және WRITE енгізу-шығару процедураларының көмегімен толтырылады.
WRITE('Teкст') ;//файлға жазылатын текстік мәлімет Read(Y); // Ү - файлға жазылатын айнымалы
Ендірілген мәліметтер файлда сақталып жазылып қалуы үшін WRITE процедурасы қолданылады:
WRITEfX, Ү); //Ү айнымалысының мәні X файлында сақталады
Дискіге файл жазу мысалы:
VAR X:.Text;
Y,N: String;
BEGIN Write('файл атын енгіз:');
Readln(N); {жазылатын файлдың атын енгізу}
{файлдыңатын файлдык, айнымалымен байланыстыру:}
Assign(X.N);
Rewrite(X); {дискіден X файлын жаңа файл жазу үшін ашу}
Write('Y қатарын енгіз:');
Readln(Y); {Ү айнымалысының мәнін енгізу}
Write(X, Ү); {X файлында Үайнымалысының мәнін сақтап жазу}
Close(X);
Readln END.
RESET процедурасы
Дискіде бар файлды ашу үшін стандартты RESET процедурасы қолданылады. Бұл процедура дискідегі файлды оқуға дайындап ашады да, арнаулы файлдық сілтеме-көрсеткішті файлдың басына апарып орналастырады(бастапқы 0 нөмірлі элементке). Егер файлдық айнымалы дискіде жоқ файл атын қабылдаса, онда бағдарлама орындалуы тоқтайды, жалпы жазылуы:
RESET(X); //X - дискіден ашылатын файл аты.
Ашылған файлдағы айнымалылар мәндерін оқу үшін READ процедурасы қолданылады, жалпы жазылуы:
READ(X, Ү); //X ашылған файл, Ү - файлдағы айнымалы
Файлдағы айнымалылардың мәндерін экранға шығару үшін WRITE процедурасы қолданылады, жалпы жазылуы:
WRITE(Y); //Ү - файлдағы айнымалы
Ашылған файлға қайтадан жаңа мәліметтер READ және WRITE процедураларының көмегімен жазылады.
Дискідегі файлды оқу мысалы:
VAR X:Text;
Y,N:String;
BEGIN Readln(N); {оқылатын файлдың атын енгізу}
{файлдыңатын файлдықайнымалымен байланыстыру:}
Reset(X); Read(X,Y);
Write('Y=',Y);
Assign(X,N);
Close(X);
Readln END.
BLOCKREAD процедупасы
File-типті файлдардың элементтерін оқу ушін BLOCKREAD процедурасы қолданылады, жазылуы:
BLOCKREAD(X, Y, B, N);
мұндағы:
X - файлдық айнымалы,
Ү - оқылатын айнымалы,
В - дискіден оқылатын мәліметтер көлемі(байт),
N - процедура орындалып болғандағы өңделген мәліметтер көлемі(бұл параметрді көрсету міндетті емес).
BLOCKWRITE процедурасы
File-типті файлдардың енгізілген элементтері дискіге жазылып сақталуын қамтамасыз ету үшін BLOCKWRITE процедурасы қолданылады. Бұл процедура параметрлері дәл BLOCKREAD процедурасындай, жазылуы:
BLOCKWRITE(X, Y, B, N);
APPEND процедурасы.
Текстік файлдың соңына жаңа мәліметтер ендіру үшін APPEND процедурасы қолданылады. Процедураның орындалу нәтижесінде дискідегі файл ашылады да, арнаулы файлдық сілтеме-көрсеткіш файлдың ең соңына барып орналасады(соңғы нөмірлі элементтен кейін). Әрі қарай, файлдың соңына жаңа мәліметтерді Reset, Rewrite процедураларының көмегімен ашылған файлдардағыдай ендіреді, жазылуы:
APPEND(X);
мұндағы: X - Text-типті файлдық айнымалы.
FLUSH процедурасы
Файлдың ішкі буферін тазалап, соңғы енгізілген мәліметтердің дискіде сақталуын қамтамасыз ету үшін FLUSH процедурасы қолданылады. Бұл процедураны тек Rewrite немесе Append процедураларының көмегімен ашылған текстік файлдарда ғана пайдаланады, жазылуы:
FLUSH(X);
мұндағы: X - Text-типті файлдық айнымалы.
TRUNCATE процедурасы
Файлдың көрсетілген компонентінен бастап соңына дейін өшіру үшін TRUNCATE процедурасы қолданылады. Бұл процедура типі анықталған файлдарда қолданылады, жазылуы:
TRUNCATE(X);
мұндағы: X - типі анықталған файлдық айнымалы.
RENAME процедурасы.
Дискідегі кез-келген ашылмаған файлдың атын өзгерту үшін RENAME процедурасы қолданылады, жалпы жазылуы:
RENAME(X,New);
мұндағы: X – файлдық айнымалы, New - файлдың жаңа аты.
ERASE процедурасы.
Дискідегі кез-келген ашылмаған файлды өшіру. үшін ERASE процедурасы қолданылады, жалпы жазылуы:
ERASE(X); //дискіден X файлын өшіру
FILESIZE функииясы.
FILESIZE(X) - X файлының элементтерінің санын анықтау функциясы. Бұл функцияны да текстік файлдарға қолдануға болмайды.
FILEPOS функциясы.
FILEPOS(X) - X файлының орындалайын деп жатқан элементінің реттік нөмірін анықтау функциясы. Бұл функцияны да текстік файлдарға қолдануға болмайды.
SEEK процедурасы.
SEEK(X.N) - файлдық сілтеме-көрсеткішті N нөмірлі элементіне апаратын процедура. Процедураны қолданғанда файлдың 1-ші элементінің нөмірі әрқашан 0-ге тең екенін ескеру қажет. Бұл процедураны текстік файлдарға қолдануға болмайды.
EOLN, EOF және IORESULT логикалык функциялары.
EOLN(X) - Егер файлдық сілтеме-көрсеткіштің позициясы қатардың соңында болса, онда функция нәтижесі "Ақиқат" болады.
EOF(X) - Егер файлдық сілтеме - көрсеткіштің позициясы X файлының соңында болса, онда функция нәтижесі "Ақиқат" болады.
IORESULT - Егер файл қатесіз дұрыс ашылса, онда функция нәтижесі 0-ге тең болады.
SEEKEOLN, SEEKEOF логикалык функциялары.
SEEKEOLN(X) - Егер файлдық сілтеме-көрсеткіш қатарда кездесетін барлық бос орын мен табуляция символдарын жіберіп қатардың соңына барып орналасса, онда нәтиже "Ақиқат" болады.
SEEKEOF(X) - Егер файлдық сілтеме-көрсеткіш тексте кездесетін барлық бос орын мен табуляция символдарын жіберіп файлдың соңына барып орналасса, онда нәтиже "Ақиқат" болады.
10.2. Файлдармен жұмыс
Бағдарламаның орындалу кезеңінде файл элементтерімен файлға тізбекті және тікелей ену деп аталатын екі түрлі тәсілмен еніп жұмыс жасауға болады.
Файлға тізбекті ену тәсілінде файл элементтерін шығару, олармен әртүрлі амалдар орындау, олардың файлға жазылған ретімен жүргізіледі. Бұл тәсіл текстік файлдарда кеңінен қолданылады.
Тікелей ену тәсілінде файл элементтерімен амалдар олардың файлдағы реттік нөмірі бойынша шақырылып орындалады. Файлдың барлық элементтерінің өздерінің файлда тұрған орнына байланысты реттік нөмірлері болады, бастапқы элемент нөмірі 0-ге тең деп есептеледі. Файлға тікелей ену тәсілі типтері анықталған және анықталмаған файлдарда қолданылады.
Бақылау сұрақтары мен тапсырмалар
1. Файлдар дегеніміз не, олардың атқаратын қызметі?
2. Turbo Раsсаl да жасалынатын файлдардың қандай ерекшеліктері бар?
3. Файлдардың сипатталуы.
4. Процедуралар дегеніміз не және оның құрылымы?
5. Файлдық айнымалылар не үшін қолданылады?
6. Файлдық айнымалылар типі неге байланысты анықталады?
7. Turbo Pascal-да жасалынатын файлдар типтеріне байланысты нешеге бөлінеді?
8. Қандай файлдарды текстік файлдар тобына жатқызады?
9. Қандай файлдарды типтері анықталған файлдар тобына жатқызады?
10. Қандай файлдарды типтері анықталмаған файлдар тобына жатқызады?
11. Assign процедурасы не ушін қолданылады?
12. Close процедурасы не үшін қолданылады?
13. Rewrite процедурасы не үшін қолданылады?
14. Reset процедурасы неүшін қолданылады?
15. Blockread процедурасының атқаратын қызметі.
16. Blockwrite процедурасының атқаратын қызметі.
17. Файлдың атын қалай өзгертуге болады?
18. Дискіден файлды қалай өшіруге болады?
19. Файлдың құрамындағы элементтер саны қалай анықталады?
20. Файл элементінің реттік нөмірін қандай функциямен анықтауға болады?
21. Файлды ашуда жіберілген қатені қандай функцияның көмегімен анықтауға болады?
22. Жаңа элементтерді файлдың қай жерінен бастап енгізуге болады?
23. Бір мезгілде файлдың элементтерін оқып және файлға жаңа элемент жазуға бола ма?
11. Текстік режимде жұмыс
Экранда символдардың шығуы мен түзілуі монитордың видеоадаптерінің жұмысына байланысты болады. Компьютерде орнатылған видеоадаптердің көмегімен символдарды текстік немесе графиктік режимде шығаруға болады.
Көптеген бағдарламаларда текстік мәліметтерді Read, Readln, Write, Writeln процедураларының көмегімен енгізу-шығару бағдарламаның көрнекі және ыңғайлы болып шығуына жеткіліксіз болып табылады. Сондықтан Turbo Pascal-да текстік режимде жұмыс істеу үшін қолданылатын арнаулы функциялар мен процедуралар қарастырылған. Олар арнаулы CRT (Cathode Ray Tube display – электронды - сәулелі дисплей) кітапханалық модулі құрамында жазылған. Оларды текстік режимде жұмыс істеуге пайдалану үшін бағдарламаның басында CRT модулін USES қызметші сөзінде жазып кету керек. Сонда ғана бағдарламалауда CRT модулінің барлық процедуралары мен функцияларын пайдалануға болады.
Текстік режим кодтық кестенің барлық символдарын экранға шығару үшін қолданылады. Текстік режимнің ең кішкене өлшем бірлігі символ болып табылады. Символдар бірнеше пиксельдерден (нүкте) құралады. Экранда символдар мен терезелердің әртүрлі шығу режимдерін компьютерде орнатылған адаптерлердің типтері анықтайды. Қазіргі шығып жатқан видеоадаптерлердің барлығы да текстік режимде жұмыс істеуге мүмкіндік береді.
11.1. CRT модулінің процедуралары мен функциялары
Текстік режимді орнату үшін TEXTMODE процедурасы қолданылады. Бағдарламалау барысында соңғы орнатылған режим нөмірін LASTMODE функциясымен білуге болады, мысалы:
TEXTMODE(X); //X - режим нөмірі
WRITE(LASTMODE); //экранға режим нөмірін шығару
(Текстік режим нөмірлері мәндері монитор мен адаптерлер типтеріне байланысты қойылады (мысалы Х-ке 0, 1, 2, 3, 7 немесе Bw40, Co40, Bw80, Co80, Mono, Font8x8 тұрақтыларын беруге болады)
Экрандағы көріністі өшіріп тазалау үшін CLRSCR процедурасы қолданылады. Бұл процедура экранды немесе ағымдағы терезені тазалап, курсорды экранның сол жақ жоғарғы жағына апарып қояды.
Курсор тұрған жерден бастап қатардың аяғына дейінгі символдарды өшіру үшін CLREОL процедурасы қолданылады.
DELLINE процедурасы курсор тұрған қатардың барлығын өшіреді, нәтижесінде төменгі қатарлар жоғары бір позицияға жылжиды
INSLINE процедурасы курсор тұрған жерге бір бос қатар қояды, нәтижесінде кейінгі қатарлар бір позиция төмен жылжиды
Экранда курсорды керекті жерге апарып қою үшін GOTOXY процедурасы қолданылады. Бұл процедура курсорды координаттары өзінде көрсетілген X және Ү мәндері болатын орынға апарып қояды. Координаттарға тек бүтін сандар ғана беруге болады. Текстік режимде координаттардың басы ретінде экранның сол жақ жоғарғы бұрышын Х=1 және Ү=1 деп алады. Х-тің мәндері солдан оңға қарай, Ү-тің мәндері жоғарыдан төмен қарай өседі. X және Ү ең үлкен мәндері монитордың адаптерінің жұмыс режиміне байланысты болады. Мысалы 80x25/CGA, EGA, CO80 адаптерлері үшін текстік режимде Хmах=80; Үmах=25.
GOTOXY( 10, 15);
//курсорды Х=10, Ү= 15 позициясына апарып қояды.
Курсордың тұрған жерін анықтау үшін WHERE функциясы қолданылады, жазылуы:
Write(WHEREX, WHERY);
//экранға курсор тұрған жердің координаттарының мәндері шығады
Сондай-ақ текстік режимде пернетақтаның жұмысын басқаратын KEYPRESSED және READKEY логикалық функциялары қолданылады.
KEYPRESSED - Егер клавиатураның кез-келген клавишы басылса, онда функцияның мәні "ақиқат" болады мысалы төмендегі фрагментте цикл пернетақтадан кез-келген перне басылғанша орындалады:
USES Crt;
Begin Clrscr;
Repeat
Writeln('TEXT-);
Until Key pressed; END.
READKEY - Егер Пернетақтадан берілген символ клавишы басылса, онда функцияның мәні "ақиқат" болады| мысалы төмендегі фрагментте цикл Пернетақтадан "д" символынан басқа символдар басылса қайталанып орындала береді, ал "д" символы басылған заматта тоқтайды:
USES Crt;
VARN:Char;
Begin Clrscr; N:='g';
Repeat
Writeln('TEXT');
Until N=Readkey; END.
TEXTBACKGROUND процедурасының көмегімен текстің, экранның немесе ағымдағы терезенің түстерін орнатуға болады, жазылуы:
TEXTBACKGROUND(M);
//экранды М нөмерлі түспен шығарады М - 0(қара)-ден 7(ақ сұр)-гедейін өзгереді.
TEXTCOLOR процедурасының көмегімен символдардың экранға шығатын түсі орнатылады, бағдарламада жазылуы:
TEXTCOLOR(M);
//тексті М нөмірлі түспен шығарады, М - 0(қара)-ден 15(ақ)-ке дейін өзгереді.
TEXTBACKGROUND және TEXTCOLOR
процедураларымен орнатуға болатын түс кодтарының
шкаласы
0 – Қара
1 - Көк
2 – Жасыл
3 - Көгілдір
4 - Қызыл
5 - Күлгін
6 - Қоңыр
7 - Ақсұр
8 - Қapacұp
9 - Ашық көк
10 - Ашық жасыл
11- Ашық көгілдір
12 - Ашық қызыл
13- Ашық күлгін
14 - Сары
15 - Ақ
128 - Символдарды жыпылықтату
LOWVIDEO процедурасы экранға символдардың жарығын азайтып шығару режимін орнату үшін қолданылады, жазылуы:
LOWVIDEO;
Writeln('TEXT');
//ТЕХТсөзі экранға ең төменгі жарық режимінде шығады
NORMVIDEO процедурасы символдардың қалыпты жағдайдағы жарық режимінде шығу режимін орнату үшін қолданылады, жазылуы:
NORMVIDEO;
Writeln('TEXT');
//TEXT сөзі экранға қалыпты жағдайдағы жарық режимінде шығады
HIGHVIDEO процедурасы экранға символдардың жарығын көбейтіп шығару режимін орнату үшін қолданылады, жазылуы:
HIGHVIDEO;
Writeln('TEXT');
//ТЕХТ сөзі экранға ең жоғарғы жарық режимінде шығады
Текстік режимде кей жағдайларда бүкіл экран қажет болмай, бір кішкене терезе шығарып алып, тек қана сол терезе аумағында жұмыс істеуге болады. Ол үшін экранға терезе шығаратын WINDOW процедурасы қолданылады. Бұл процедура орындалу нәтижесінде экранға өзінде берілген координаталар бойынша терезе шығарады, жазылу түрі:
WINDOW(X1, Ү1, Х2, Ү2);
Процедура орындалу нәтижесінде экранға диагоналының сол жақ жоғарғы төбесінің координаттары Х1, Ү1 болатын, ал оң жақ төменгі төбесінің координаттары Х2, Ү2 болатын тік төртбұрыш шығарады, мысалы:
USES Crt;
VARXString;
BEGIN Textbackground(6);
WINDOW(5,8,25,21); Clrscr; Readln(X); END.
WINDOW процедурасы орындалысымен орнатылған терезе тазаланып, ол бүкіл экран секілді қарастырылып, курсор терезенің сол жақ жоғарғы позициясына барып орналасады. Әрі қарай енгізілген символдар оңға қарай шығарылады. Терезенің оң жақ шекарасына жеткеннен кейін курсор келесі қатарға өтеді. Ал курсор соңғы қатардың оң жақ шекарасына жеткенде текст мазмұны жоғарыға қарай бір орынға жылжиды да, курсор сол қатардың басына барып орналасады (текст айналып тұрады). Кей жағдайларда бұл процедураның параметрлерінің мәндері ретінде төмендегі стандартты функцияларды қолдануға болады:
X:=Lo(WindMin)+ 1;
X терезенің сол жақ ең жоғарғы нүктесіндегі мәнін меншіктейді.
Y:=Hi(WindMin)+ 1;
Ү терезенің сол жақ ең жоғарғы нүктесіндегі мәнін меншіктейді.
X:=Lo(WindMin)+ 1;
X терезенің оң жақ ең төменгі нүктесіндегі мәнін меншіктейді.
Y:=Lo(WindMax)+1;
Ү терезенің оң жақ ең төменгі нүктесіндегі мәнін меншіктейді.
Мысалы төмендегі процедураның орындалу нәтижесінде екінші шығатын терезе параметрлері Х1=15, Ү1=2, Х2=30, Ү2=12 мәндерін қабылдайды.
USES Crt;
VARXString;
BEGIN Clrscr; Textbackground(2);
WINDOW(15,2,60,24);
Clrscr; Textbackground(5);
Wlndow(Lo(WindMin)+1 ,Hi(WindMin)+1,
(Lo(WindMax)+1) Div 2, (Hi(WindMax)+1) Div 2);
Clrscr;
Readln(X); END.
CRT модулінің құрамына дыбыс шығару үшін қолданылатын келесі процедуралар кіреді:
Белгілі бір жиілікпен дыбыс шығару үшін SOUND процедурасы қолданылады, жазылуы:
SOUND(X);
мұндағы: X - жиілікті анықтайтын бүтін шама.
Нота дыбыстарының жиіліктері
Октавалар :
Үлкен
Кіші
Бірінші
Екінші
До
Ре
Ми
Фа
Соль
Ля
Си
Орнатылған дыбысты өшіру үшін параметрсіз NOSOUND процедурасы қолданылады, жазылуы:
NOSOUND;
Дыбыстық сигналды белгілі бір уақыт бойы ұстап тұру үшін бағдарлама орындалуын уақытша тежейтін DELAY процедурасы қолданылады, жазылуы:
DELAY(T);
мұндағы: Т - бағдарламаның орындалуын тежеу уақыты (милисекунд)
Жоғарыда берілген үш процедураның көмегімен текстік режимде әртүрлі дыбыстық эффектілер жасауға болады (сиреналар, құстар әні, музыкалық шығармалар т.б.), мысалы төмендегі бағдарламаның фрагментінің орындалу нәтижесінде кез-келген клавишаны басқанша кезек-кезек жеті нотаның дыбысы шығып тұрады:
Сондай-ақ DELAY процедурасы циклдік операторлардың көмегімен текстік объектілерді жылжытуда қолданылады. Ол үшін алдымен текстік объект циклдің бастапқы координаттарымен DELAY процедурасының көмегімен кішкене уақыт экранда көрініп тұрады да CLRSCR процедурасымен өшіріледі. Циклдің келесі мәнінде жаңа координаттарымен ол тағы да жаңа орыннан кішкене уақыт көрініп тұрады да қайтадан өшіріледі, цикл аяқталғанша осындай процестер жүріп сырт көзге текстік объект жылжып бара жатқандай болып көрінеді.
Бақылау сұрақтары мен тапсырмалар
1. CRT модулі процедураларын және функцияларын пайдалану үшін не істеу қажет?
2. Текстік режимді орнату.
3. Экранды тазалау үшін қолданылатын процедуралар және олардың атқаратын қызметтері.
4. Курсорды басқару үшін қолданылатын процедуралар және олардың атқаратын қызметтері.
5. Клавиатураны басқару үшін қолданылатын функциялар және олардың атқаратын қызметтері.
6. Экранның түстерін басқару үшін қолданылатын процедуралар және олардың атқаратын қызметтері.
7. Экранның жарығын реттейтін процедуралар.
8. Жарық режимдерін орнату.
9. Экранда терезе шығару процедурасы.
10. CRT модулінің дыбыстық мүмкіндіктері.
11. Бағдарлама орындалуын уақытша тежеу процедурасы.
12. Текстік объектілерді қалай жылжытуға болады?
13. Экранның төменгі жағынан оңға қарай дыбыс шығарып жылжитын текст бағдарламасын құрыңыз.
14. Экранда оңға қарай өлшемдері кішірейе беретін тіктөртбұрыш шығаратын бағдарлама құрыңыз.
15. X осі бойымен өз атыңызды 7 рет шығарыңыз.
16. Ү осі бойымен кездейсоқ 5 сан шығару бағдарламасын құрыңыз.
17. Экранның ортасына бес секунд сайын басқа түске өзгеріп тұратын қабырғасы 100-ге тең квадрат терезе шығару бағдарламасын құрыңыз.
18. Экранның ортасына қарай өлшемдері кішірейіп қайтадан үлкейіп тұратын терезе шығару бағдарламасын құрыңыз.
19. Текстік процедуралардың көмегімен экранға шахмат тақтасын шығарыңыз.
20. Экранның екі жағына екі терезе шығарыңыз. Цикл көмегімен 1- мен 100-дің аралығында кездейсоқ 50 сан шығарып, егер шыққан сан жуп болса, оң жақ терезенің ішіне, ал сан тақ болса, онда сол жақ терезенің ішіне орналастыратын бағдарлама құрыңыз
12. Графиктік режимде жұмыс
Компьютердің мониторы нүктелердің (пикселдердің) жиынтығынан тұрады. Ал символдарды нүктелердің жиынтығы құрайтыны алдыңғы тарауда қарастырылды. Егер текстік режимде тек символдармен ғана жұмыс жасалса, графиктік режимде әрбір нүктелермен жұмыс жасауға болады. Мысалы текстік режимде символдар түсін өзгертуге болатын болса, графиктік режимде әрбір нүктенің түсін немесе нүктелерден құралған әртүрлі фигуралар мен текстердің түстерін әртүрлі қылып шығаруға болады. Компьютердің графиктік режимдегі жұмысы монитор мен оның видеоадаптерімен тығыз байланысты. Монитор кәдімгі телевизор секілді жұмыс істейді. Экрандағы бейнелер секундына 25 рет жоқ болып кетіп қайта құралады. Адамның көзі мүндай кадрлардың тез ауыстырылып жатқанын сезбейтіндіктен, оған экрандағы бейне бір орында тұрғандай болып әсер етеді.
Графиктік режимде экранға бейнелер шығару үшін координаттар жүйесі қолданылады. Бейнелерді құрайтын нүктелер экранда қатарлар бойынша реттеліп орналасатындықтан, бір қатардағы нүктелер X осі бойынша солдан оңға қарай өзгереді деп, ал қатарлар - Ү осі бойынша жоғарыдан төмен қарай өзгереді деп алынады. Нүктелердің басы ретінде экранның сол жақ жоғарғы бұрышынан Х=0 және Ү=0 деп алынады. Ал барлық қатарлар(МахҮ) мен ондағы орналасқан нүктелер саны (МахХ) видеоадаптердің типі мен оның жұмыс режиміне байланысты болады.
Turbo Pascal-да графиктік режимде жұмыс істеуге арналған арнаулы функциялар мен процедуралар GRAPH кітапханалық модулінің құрамында жазылған. GRAPH модулі 80-ге жуық графикалық функциялар мен процедуралардан және оншақты стандартты тұрақтылардан тұрады.
Ол процедуралар мен функцияларды текстік режимде пайдалану үшін бағдарламаның басында келесі амалдар орындау қажет:
1. USES қызметші сөзінде GRAPH модулі жазылады:
USES Graph;
2. Графиктік режим орнатылады:
VAR d1, d2: Integer; BEGIN d1:=Detect; lnitGraph(d1, d2, 'C:\Turbo\Graph');..........
d2 - видеоадаптердің жұмыс режимінің нөмірін анықтайтын тұрақтылар.
Бұл шамалар монитор мен видеадаптер типтеріне байланысты болады. Егер бағдарламада графиктік режим драйверінің типіне Detect стандартты тұрақты шамасы берілсе, онда InitGraph процедурасы автоматты түрде өзіне керекті графиктік драйвердің типін және монитор мен видеоадаптердің типтеріне сәйкес келетін графиктік жұмыс режимін анықтап алады. Апострофтардың ішінде орналасқан үшінші параметр Graph.tpu файлының дискіде орналасқан жолын көрсетеді. Егер ол Turbo Pascal терезесін ашқан Turbo. Ехе файлымен бірге бір каталогта орналасатын болса, онда Graph.tpu файлының орналасқан жолы орнына бос екі апостроф қойылып кетеді.
11.1. Экранды басқаратын процедуралар мен функциялар
Экранның фоны SETBKCOLОR процедурасының көмегімен орнатылады, жазылуы:
SETBKCOLOR(C);
мұндағы: С - түс коды 0-ден 15-ге дейін өзгереді
Бұл процедураның орындалу нәтижесінде экран С номерлі түске боялып шығады. Бұл процедурамен орнатылған түс кодының мәнін GETBKCOLOR процедурасының көмегімен анықтауға болады.
Экрандағы барлық салынған графиктік объектілерді өшіріп тастау үшін параметрсіз CLEARDEVICE процедурасы қолданылады. Бұл процедураның орындалу нәтижесінде графиктік режимде орнатылған барлық параметрлер (фон түсі, курсор орны, терезелер т.б.) күшін жойып, экран тазарып курсор қайтадан координаттары (0,0) болатын экранның сол жақ жоғарғы бұрышындағы нүктеге апарылады.
Графикалық режимнің көзге көрінбейтін сілтеме-көрсеткіш курсоры болады. Курсорды басқару ушін MOVETO және MОVEREL процедуралары қолданылады.
MОVETO процедурасы курсорды координаттары өзінде көрсетілген орынға апарып қояды, мысалы:
MOVETO(X,Y);
//курсорды А(Х,Ү) нүктесіне апарып қояды
MOVEREL процедурасы курсорды бұрынғы тұрған жерінен X және Ү осі бойынша өзінде көрсетілген сәйкес шамаларға тең нүктелерге жылжытып апарып қояды, мысалы:
Курсордың тұрған жерін анықтау үшін GET функциясы қолданылады, мысалы:
A:=CetX; //курсор тұрған жердің X осіндегі координатын анықтау
B:=GetY; //курсор тұрған жердің Ү осіндегі координатын анықтау
X және Ү осіндегі барлық нүктелер санын анықтау үшін GETMAX функциясы қолданылады. Бұл функцияларды монитор мен видеоадаптердің типін білмегенде пайдаланған ыңғайлы, мысалы:
A:=CetmaxX; //А - X осінің ең үлкен мәнін меншіктейді
В:=CetmaxУ; //В - У осінің ең үлкен мәнін меншіктейді
Бұдан басқа Getmax функциясын экран ортасының координаттарын анықтау үшін де қолдануға болады, мысалы:
Xc:=GetmaxX Div 2;
Yc:-GetmaxY Div2;
Putpixel(Xc, Yc, 5);
//экранның қақ ортасынан нүкте шығару немесе:
Circle(GetmaxX Div 2, GetmaxY Div 2,30);
//экранның қақ ортасынан шеңбер шығару
Текстік режимдегідей графиктік режимде де графиктік фигураларды бөлек терезелер ішіне салуға болады. Терезе орнату үшін SETVIEWPORT процедурасы қолданылады. Терезе орнатылғаннан кейін координаттар басы ретінде терезенің сол жақ жоғарғы бұрышы(0,0) алынады, жазылуы:
SETVIEWPORT(X1, Y1,X2, Y2, Clip);
мұндағы: Х1.Ү1 - орнатылатын терезенің сол жақ жоғарғы бұрышының координаттары;
Х2, Ү2 - орнатылатын терезенің оң жақ төменгі бұрышының координаттары;
Clip - салынатын графиктік объектінің терезенің сыртына шығатын бөлігін экранда көрінуін анықтайтын бульдік шама. Егер Clip:=True болса, онда ол бөлік көрінбей кесіліп қалады, егер Clip:=False болса - көрініп тұрады.
Ағымдағы терезенің ішін тазалау үшін CLEARVIEWPORT процедурасы қолданылады. Процедураның орындалу нәтижесінде терезе ішіндегі барлық объектілер өшіріліп, курсор терезенің сол жақ жоғарғы бұрышына барып орналасады.
SETVIEWPORT процедурасының көмегімен орнатылған терезе тек қана экранның SETBKCOLOR процедурасымен орнатылған түсімен шығады. Сондықтан ол терезе көзге көрінбейді. Терезе көзге көріну үшін өлшемдері орнатылатын тереземен бірдей іші экранның түсінен бөлек түспен боялған тік төртбұрыш шығарып алынады.
Орнатылған терезе параметрлерінің мәндерін текстік режимге шығып GETVIEWSETTING процедурасынының көмегімен алуға болады, мысалы:
VAR X:Viewporttype;
.................................
Getviewsettings(X);
With XDo Begin Writeln('X1=;X1); Writeln('X2=',X2);
Графикалық режимнен шығу үшін параметрсіз GLOSEGRAPH процедурасы қолданылады. Бұл процедураның орындалу нәтижесінде компьютердің жадынан орнатылған графиктік режим драйверлері тазаланып, экранның графиктік режим орнатылар алдындағы жұмыс режимі қайта орнайды, мысалы:
..............................; Closegraph END
Кей жағдайларда текстік режимнен графиктік режимге, одан қайтадан текстік режимге бірнеше рет өтетін бағдарламалар құру керек болады. Ол үшін экранда орнатылған графиктік және текстік режимдерді қалыпқа келтіретін SETGRAPHMODE және параметрсіз RESTORECRTMODE процедуралары қолданылады.