Программа денесі(операторлар тізбегі)


Пайдаланушы дайындаған толтыру қалыптары



бет8/18
Дата21.06.2016
өлшемі4.26 Mb.
#151685
түріПрограмма
1   ...   4   5   6   7   8   9   10   11   ...   18

Пайдаланушы дайындаған толтыру қалыптары

Егер Turbo Pascal ұсынған дайын қалыптар ұнамаса, онда пайдаланушы өзінің қалпын жасауына болады. Бұл жағдайда SetFillPattern процедурасы қолданылады.

SetFillPattern процедурасы жеке толтыру қалпын анықтауға көмектеседі. Тақырыбы:

Procedure SetFillPattern(Pattern:FillPatternType; Color:Word);

Мұндағы Pattern – FillPatternType типіне жататын және пайдаланушының толтыру қалпын анықтайтын мән; Color – толтыру түсі.

FillPatternType типі GRAPH модулінде анықталған. Оның сипаттамасы келесі түрде:

Type

FillPatternType = array[1..8] of Byte;



Byte типінің 8 мәнінен тұратын массивті көрсететін FillPatternType типі 8х8 пиксельдер матрицасының жарықтануын басқаруға мүмкіндік береді. Егер осы 64 биттің қайсыбірі 1-ге тең мәнге ие болса, сол пиксель жарықтанады; 0-ге тең болса, жарықтанбайды. Толтыру амалы орындалған кезде экран әрбіреуі осындай матрица болатындай торкөздер жиынына бөлінгендей болады. Бұл кезде әрбір матрицаның жарықтанған және жарықтанбаған пиксельдері экранды қайталанған өрнекке толтырады. Осындай дайындалған қалыптардың екеуін 2-суреттен көруге болады.

Бұл жерде 8х8 матрицалары бар екі шаблон көрсетілген. Матрицалардың сәйкес байттарының ондық мәндері жанынан көрсетілген.

SetUserCharSize процедурасы тек векторлық мәтіндерге ғана әсер етеді.
Қозғалатын бейнені шығару

Қозғалатын бейнені бейнелеу кезінде видеожады парақтар деп аталатын аумақтарға бөлінеді. Бұл кезде уақыттың әр мезетінде бір ғана парақ бейнеленеді, ал шығаруды кез-келген параққа орындауға болады. Осылайша алдын-ала дайындалған парақтарды тізбекті түрде экранға шығару қолайлы. Бұл тәсіл көбінесе әртүрлі анимацияларды жасау кезінде қолданылады. Graph модулінде парақтармен жұмыс істеуге арналған екі процедура бар. SetActivPage процедурасы видеожадының бір бір парағын белсендіреді. Тақырыбы:

Procedure SetActivPage(Page:Word);

Мұндағы Page – парақ номері.

Барлық графикалық шығарулар Page номерлі белсенді параққа бағытталады. Көппарақты шығару тек EGA, VGA және т.б. сәйкес видеоадаптерлердің бар болуында ғана жүзеге асады.

SetVisualPage процедурасы номері процедура параметрі ретінде көрсетілген графикалық парақты көрсетеді. Тақырыбы:

Procedure SetVisualPage(Page:Word);

Мұндағы Page - парақ номері.

Көрінетін парақ – экранда бейнеленетін парақ. Ал белсенді парақ шығарылу жүзеге асатын парақ. Басқаша айтқанда, программа графикалық құрауларды көрінбейтін (бірақ, белсенді) параққа орындайды да, соңынан осы процедураның көмегімен осы парақты шығарады, осымен сол мезетте экранда бейнені бейнелейді.

Төмендегі мысалда көппарақты шығаруды қолданатын программаны көруге болады.

Program SetPage;

Uses graph, crt;

Var I, j, r, Dx, Dy, Err:integer; x,y:word;

Begin


I:=3; j:=0;

initGraph(I,j,’’);

if Err<>grOk then

Writeln(GraphErrorMsg(Err))

Else

Begin


GetAspectRatio(x,y);

R:=5;


For i:=0 to 15 do

Begin


SetActivePage(i);

Circle(320, 100, 100);

Dx:=320+Round(30*Cos(i*2*Pi/16)*y/x);

Dy:=100-Round(30*Sin(i*2*Pi/16));

FillEllipse(Dx, Dy, R*Round(y/x),r);

End;


While not KeyPressed=True do

for I:=0 to 15 do

begin

SetVisualPage(i);



Delay(200);

End;


CloseGraph;

End


End.

Бұл программаның жұмыс нәтижесін 28-суреттен көруге болады.

Бұл программада EGA драйвері үшін 0 режимі таңдалынған. Егер 2-кестеге қарайтын болсақ, бұл режим 4-парақты шығаруды қолдайды – қозғалыс эффектісін жасауға ең қолайлы режим. Осы программада екі цикл ұйымдастырылған. Бірінші циклда парақтар толтырылады, екіншісінде – демонстрацияланады. Парақтардың кезектесуі ірі нүктелердің шеңбер бойынша айналу эффектісін қамтамасыз етеді.

Программаны аяқтау үшін кез-келген пернені басу жеткілікті.


10-ДӘРІС Деректердің файлдық типтері.

  1. Файлдармен жұмыс істеу.

  2. Мәтіндік файлдар.

  3. Типтік файлдар.

  4. Типтік емес файлдар.

Осы уақытқа дейін біз танысқан мәліметтер типтері компьютердің оперативті жадысындағы ақпаратпен жұмыс істеуге арналған болатын. Дегенмен оперативті жадының мәліметтерді уақытша ғана сақтауға қабілетті екенін білеміз.

Ал тиімдірек жұмыс істеу үшін ақпарат ұзақ сақталатын тәсіл қажет.

Ақпаратты ұзақ уақыт сақтау үшін оперативті жадыдан файлдарға жіберу керек.

Файл сыртқы жадыда атауы бар орын. Сыртқы жады ретінде әртүрлі дисктерді алуға болады.

Сол сияқты MS DOS операциялық жүйесінің басқаруымен жұмыс істейтін компьютердің оперативті жадыларында виртуалды дисктер құруға болады. Файлдың «ұзақ уақыттылығынан» басқа тағы бір ерекшелігі бар: олардың анықталмаған көлемі. Егер басқа құрылымда қанша элементтен тұратындығы әрқашан нақты көрсетілетін болса, файлдық типтерді жариялау кезінде оның қанша элементтерден тұратындығы көрсетілмейді. Файлдың максимум ұзындығы тек қана дисктегі бос орынмен шектеледі және бұл массивтен басты айырмашылығы болып табылады.



Файдың типтер, файлдық айнымалылар

Turbo Pascal – да ақпаратты сақтау үшін файлдық типтер мен файлдық айнымалы анықтау мүмкіншілігін қарастырылған. Осыдан кейін соңынан қажет болатын ақпаратты дискідегі файлға орналастыруға болады. Файлдық типті анықтаудың үш тәсілі бар.

f=file of a;

f=text;


f=file;

Бұл 3 тәсіл Turbo Pascal амалдауға мүмкіндік беретін файлдың үш түріне сәйкес келеді: типтендірілген, текстік және типтендірілмеген файлдар. Жоғарыда көрсетілген файлдық типтерді жариялаудың мағынасы мынадай:

File және of – резервтелген сөздер, олардың мағынасы «файл және осыдан».

Text – бұл резервтелген сөз емес, мәліметтердің стандартты типінің идентификаторы болып табылады.

f - жарияланған файлдық типтің атауы.

а - файлда қамтылған элементтер типі (Файлдық типтен басқа кез-келген тип).

Файл элементтері файлдық немесе элементтері файлдар болып табылатын құрылымдық типтерден басқа кез-келген типті мәндер бола алады, яғни, «файлдар файлы» болмайды.

Файлдық айнымалыларды жариялау мысалдары:

Type

Arrays=array of integer;



Data=record

Day:1..31;

Month:1..12;

Year:1900..2000;

End;
Var

f 1:=file;

f 2:text;

f 3:file of integer;

f 4:file of arrays;

f 5:file of date;

Бұл жерде 5 файлдық айнымалы жарияланған. Бұлардың арасында f1 - типтендірілмеген файл, f2 – тестік, ал f3, f4 және f5 - типтендірілген файлдар. Және де егер типтендірілген файлдардың арасында f3 файлының элементтері стандартты integer типіне жататын болса, ал f4, f5 файлдарының элементтері пайдаланушы жариялаған типке жатады (Arrays типі – бүтін сандар массиві, Datе типі – жазба). Әр түрлі типтерге жататын файлдардың өзіндік ерекшеліктері бар, дегенмен барлығына ортақ ерекшелік те бар. Яғни файлда әрбір мезетте бір элементке ғана қатынас жасауға болады.

Мысалы, жоғарыда жарияланған файлдық айнымалыларды алатын болсақ, онда f3 файлында әр мезетте бір бүтін санға, f4 файлында - бір массивке, f5 файлында - бір жазбаға қатынас жасауға болады. Және де барлық файлдар файл соңы маркерімен аяқталады (EoF – End of File).

Әдетте файл элементтеріне қатынас оларды кезекпен таңдау арқылы тізбектей жүргізіледі. Басқаша айтқанда ең соңғы элементке «жету» үшін алдымен барлық алдыңғы элементтерін өңдеуге (оқуға немесе жазуға) тура келеді. Ал типтендірілген және типтендірілмеген файлдар үшін белгілі бір элементке өту мүмкіндігі бар.

Файл элементтерінің саны оның көлемін, ұзындығын анықтайды. Жоғарыда айтылғандай файл ұзындығы оны жариялаған кезде бекітілмейді. Мұнда және де бірде – бір элементі жоқ файлдар болуы мүмкін - мұндай файлдар бос файлдар деп аталады.




Бұл 1-суретте 5 элементтен тұратын файл бейнеленген. Файл f әріпімен белгіленген идентификатордан басталады. Содан кейін файлда қамтылған бірнеше ақпарат элементтері бар, және файл файл соңы маркерімен (EoF) аяқталады. Суреттегі бағдарша файлдың ағымдағы позициясын нұсқауыш болып табылады. Егер файлға жазуды немесе файлдан оқуды елестететін болсақ, файлға жазу алдында нұсқауыш тұрған элементтен басталады. Бұл файлдан оқуға да қатысты. Файл ұзындығының шектелмегендігін көрсету үшін бейнеленген сектор оң жағынан тұйықталмаған. Әрине файлды осылай визуалды түрде көрсету шартты түрде орындалған. Көбінесе файл жол бөлігін емес, бірнеше жолдарды алады. Бұл файлды визуалды түрде көрсету файл үстінен орындалатын әр түрлі амалдарды оқып – үйрену үшін қажет.


Фйлдармен орындалатын амалдар

Turbo Pascal – да басқа мәліметтер типіне қарағанда файлдармен жұмыс істеуге арналған кіріктірілген операторлар болмайды. Мысалы, меншіктеу операторының көмегімен файлдық айнымалыға қандай-да бір мән меншіктей алмаймыз. Осыған байланысты сәйкес амалдар процедура және функция түрінде орындалады.

ФАЙЛДАРҒА ҚАТЫНАСТЫ ҰЙЫМДАСТЫРУ

Басқа мәліметтер типінен айырмашылығы файлдар дисктерде жазылатындықтан оларға қатынас жасау үшін файлдық айнымалы жариялау жеткіліксіз. Нақты файлға қатынас жасау үшін оны алдын ала жариялайтын файлдық айнымалымен байланыстыру қажет. Мұндай байланыс Turbo Pascal –дың стандартты процедурасы болып табылатын Assign процедурасы арқылы орындалады.

Assign процедурасының тақырыбы:

Procedure Assign (var f; FileName: string);

Мұндағы f – FileName деп аталатын дискідегі файлмен байланысты кез-келген түрдегі файлдық айнымалының атауы (FileName параметрі STRING типіне жатады).

Атауға арналған ережелер

Файл атауының жалпыланған түрі MS DOS операциялық жүйесінің атау ережесі бойынша құрылып, төмендегідей болады.

диск: \жол\ файл_атауы

Мұндағы диск: - бұл компьютер дискілерінің біреуінің атауы.

Жол – бұл каталог.

Файл_атауы – осы каталог аясындағы белгілі файл идентификаторы.



Файл атаулары

Файл атауы сегіз символға дейін қамтып, кеңейтілумен толықтырылуы мүмкін (үш символға дейін). Файл атауы мен кеңейтілу нүкте арқылы ажыратылады. Файл атауында латынның үлкен кіші әріптері, цифрлар, сол сияқты !, @, #, $, %, ^, &, *, (, ),’,~, -, _ символдары болуы мүмкін. Және де файл атауларында ? . , ; : * / \ + « | символдары кездеспеу керек. Файл атауларына мүмкін символдарды каталог атауларына да қолдануға болады.

Turbo Pascal программасында дисктегі файлды жарияланған файлдық айнымалымен былай байланыстыруға болады.

Var


f1:file;

Begin


...

Assign (f1,’c:\sys\into.sys’);

...

end.


Assign процедурасының параметрі ретінде дисктегі файл атауының орнына белгілі құрылғыларға резервтелген құрылғының символдық атауын қолдануға болады.

6-кесте

Символдар

Құрылғылар

CON

Консоль

PRN, LPT1, LPT2, LPT3

Принтерлер

AUX, COM1, COM2

Коммуникативті каналдар

NUL

Жалған (фиктивті) құрылғылар

CON- консольдың символдық атауы. Консоль деп – бір мезетте пернетақта да және монитор да аталады. CON логикалық атауын assign процедурасында файл атауының орнына көрсетуге болады, яғни, ақпаратты пернетақтадан енгізу және экранға шығару қажет болған жағдайда қолданылады.

PRN – принтердің символдық атауы. Оны assign процедурасының параметрі ретінде ақпаратты принтерден басып шығру қажет болған жағдайда қолданамыз. Және де бірнеше принтерлер жалғанған болса, тағы да бірнеше символдық атаулар бар: PRN, LPT1, LPT2, LPT3 - өзара синоним атаулар.

AUX – коммуникациялық каналдың символдық атауы. Коммуникациялық канал басқа компьютермен, құрылғылармен ақпарат алмасуға арналған канал. AUX атауын assign процедурасының параметрі ретінде ақпаратты басқа компьютерге жіберу немесе сырттан қабылдау қажет болған жағдайда қолданамыз. MS DOS–та AUX-тан басқа тағы да бірнеше коммуникациялық каналдардың символдық атауы бар: СОМ1,СОМ2

NUL – жалған (фиктивті) құрылғының символдық атауы. Айталық, қандай да бір программаның қателіктерін түзеу процедурасы жүріп жатыр. Бұл программада басқаларымен қатар нәтижені шығару амалы бар. Ал дискідегі орын шектеулі. Бізге қажетсіз ақпаратты шығару қажет болсын. Мұндай жағдайда шығару құрылғысы ретінде жалған құрылғыны қолдану қолайлы.

Әртүрлі логикалық құрылғылармен файлдық айнымалыларды байланыстыру мысалы:

Var

f1, f2, f3, f4, f5:file;



begin

Assign (f1,’CON’);



Assign (f2, ‘LPT1’);

Assign (f3, ‘PRN’);

Assign (f4, ‘AUX’);

Assign (f5, ‘NUL’);

End.
Файлдардың үстінен қандай да бір әрекеттер орындау үшін Assign процедурасын шақыру керек. Assign процедурасын шақырғаннан кейін көрсетілген файл мен файлдық айнымалы арасында осы программа жұмысы аяқталғанға дейін байланыс болады.



ФАЙЛДАРДЫ АШУ, ЖАБУ, ЖОЮ

Қандай-да бір нақты файлды файлдық айнымалымен байланыстырғаннан кейін осы файлдың мазмұнына қатынас жасау үшін оны ашу қажет.

Тurbo Рascal-да файлды оқу үшін, жазу үшін, және де бір мезетте оқу үшін де, жазу үшін де ашуға болады. Файлды ашу кезінде алдымен дискіде бар файл ізделінеді немесе жаңадан жасалынады (егер файл жазу үшін ашылса) және ағымдағы нұсқауыш файл басына орнатылады. Файлдарды ашу үшін RESET және REWRITE процедуралары қолданылады.

RESET процедурасы – текстік файлдарға қолданыла отырып, оны тек оқу үшін ашады. Ал типтендірілген немесе типтендірілмеген файлдар үшін RESET процедурасын қолдансақ, оны оқу үшін де және оған жазу үшін де ашуға болады.

RESET процедурасының тақырыбы төмендегідей көрсетіледі.

Procedure RESET (var f [ : file; RecSize:word ] )

Мұндағы f - кез-келген типтегі файлдық айнымалы; RecSize – міндетті емес параметр, ол тек қана типтендірілмеген файлдар үшін анықталады және жазбаның өлшемін көрсетеді. Егер Assign процедурасын шақыру кезінде Recsize параметрі анықталмаған болса, онда үнсіз келісім бойынша жазба өлшемі 128 байтқа тең деп қабылданады.

RESET процедурасының көмегімен ашылатын файл міндетті түрде бар болуы керек. Егер көрсетілген каталогта мұндай атауы бар файл жоқ болса, онда қателік көрсетіледі. Сол сияқты құрылғылардың символдық атауы да қолданылатын кезде міндетті түрде мәліметтердің көзі бола алатын құрылғылар көрсетілуі қажет. Мысалы, егер ақпаратты принтерден оқу қажет десек, онда қателік көрсетіледі.

RESET процедурасының көмегімен ашылған файл 5-суретте көрсетілген.

REWRITE процедурасы – текстік файлға қолданылса, оны тек жазу үшін ашады. Осы процедураны типтендірілген немесе типтендірілмеген файлдарға қолданылса, оны оқу үшін де, жазу үшін де ашады.

REWRITE процедурасының тақырыбы:

Procedure REWRITE (var f [ :file , RecSize: word ] );

RESET процедурасындағы f және recsize параметрі туралы айтылғандардың барлығы REWRITE процедурасына да қатысты.

RESET және REWRITE процедураларының типтендірілген және типтендірілмеген файлдарға қолданылғандағы айырмашылығы неде? Егер RESET процдурасын жоқ файлға қолдансақ, онда қателікті көрсетеді. Ал мұндай жағдайда REWRITE процедурасы жаңа файл құрады. Егер RESET процедурасын дисктегі бар фалға қолдансақ, онда файл ашылады. Ал REWRITE процедурасы бұл жағдайда ескі файлдың мазмұнын өшіріп тастап, сол атаумен жаңа файл жасайды. Яғни REWRITE процедурасы бар файлға қолданылса, оның мазмұнының жойылуына әкеледі. Сондықтан, осы процедураны өте ұқыптылықпен қолдану керек.



REWRITE процедурасының көмегімен ашылған файл 6-суретте бейнеленген.

Файлды ашқаннан кейін (RESET немесе REWRITE) оның мазмұнын өңдеу жүргізіледі, өңдеу жұмысы аяқталғаннан кейін файл жабылып, кейде жойылады. Файлдарды жабу үшін Close процедурасы қолданылады, ал жою үшін Erase процедурасы қолданылады. Бұл процедуралар кез-келген түрдегі файлдарға қолданылады.

Close процедурасы RESET және REWRITE процедуралары ашқан файлдарды жабады.

Procedure Close (var f);

Erase процедурасы дискідегі файлды жояды.

Procedure Erase (var f);

Екі процедураның тақырыбында да бар f параметрі кез-келген типтегі файлдық айнымалыны көрсетеді.

Close процедурасын файлды жабу үшін қолдану міндетті емес, барлық ашылған файлдар программасы жұмысын аяқтаған кезде автоматты түрде жабылады. Дегенмен Close процедурасының көмегімен файлды жабу, сол файлды басқа процедурамен ашу үшін қажет болуы мүмкін (айталық, RESET процедурасының орнына REWRITE процедурасын қолдану қажет болса).

Қандайда бір файлды ашып, оны өңдеп, артынан жауып және жоюдың схемалық түрі төмендегідей болады.

Program file processing;

Var

f:file of char; {файлдық айнымалыны жариялау}



Begin

Assign (f,’b.pas’); {айнымалыны нақты файлмен байланыстыру}

Rewrite (f); {файлды ашу}

… {файл мазмұнын өңдеу}

Close (f); {файлды жабу}

Erase (f); {файлды жою}



End.

Мұнда FILE OF CHAR типіне тиісті f файлдық айнымалы жарияланады (бұл файл символдар тізбегінен тұрады). Осыдан кейін осы айнымалы b.pas файлымен байланыстырылады. Осыдан кейін файл ашылады (REWRITE процедурасының көмегімен). Ары қарай файл мазмұнына қандай-да бір өңдеулер жүргізіледі. Ең соңында B.PAS файлы жабылып (Close процедурасы), жойылады (Erase процедурасы).


Жазу-оқу

Turbo Pascal-да файлға ақпаратты жазуды және файлдан оқуды жүзеге асыру үшін текстік және типтендірілген файлдар үшін Read және Write процедуралары, ал типтендірілмеген файлдар үшін BlockRead және BlockWrite процедуралары қолданылады. Және де Read және Write процедураларын қолдану файл түріне байланысты (текстік әлде типтендірілген бе) ерекшеліктерге ие.

Read және Write процедураларынан өзге текстік файлдар үшін ReadLn және WriteLn процедуралары қолданылады.

Файл мазмұнымен жұмыс істеу

Айталық, файлдық айнымалы жариялап, оны дисктағы қандай-да бір файлмен байланыстырдық, содан кейін оны RESET немесе REWRITE процедурасының көмегімен аштық. Ары қарай не істеуге болады? Файлдың мазмұнымен оны оқу мен оған жазудан басқа не істеуге болады?


Файлдарды әр элементтері бойынша өңдеу

Айталық, қандай-да бір файлдың әр элементін қалай-да өңдеу керек. Мысалы, егер файлдың бұл элементтері – сандар болса, онда оларды қандай-да бір коэффициентке көбейту керек, ал егер бұл жолдар болса, әр жолдың соңына символдар қосу керек. Мұндай есептерді шешу үшін файлды ашу керек, содан кейін файл соңы маркеріне жеткенше оның әрбір элементін өңдеу керек. Бірақ файл соңына жеткенімізді қалай анықтау керек (яғни, ағымдағы позиция нұсқауышы соңының белгісінің алдында тұрғанын)? Ол үшін Turbo Pascal-да EoF стандартты функциясы бар.

Егер ағымдағы позиция нұсқауышы соңғы элементтен кейін тұрса немесе файл бос болса, онда EoF функциясы TRUE мәнін қабылдайды. Кері жағдайда функция FALSE мәнін қабылдайды. Бұл функцияның тақырыбы типтендірілген және типтендірілмеген файлдар үшін төмендегідей болады.

Function EoF (var f):Boolean;

Текстік файлдар үшін.

Function EoF (var f: Text):Boolean;

Мұндағы f – файлдық айнымалы (текстік, типтендірілген немесе типтендірілмеген).

7-суреттегі үш бейнеге назар аударайық.



Осы жерде көрсетілген үш жағдайдың алғашқы екеуінде EoF функциясы FALSE мәнін қабылдайды, ал үшінші жағдайда - TRUE мәнін қабылдайды.

EoF функциясы қолданылған программаны төмендегі мысалдан көруге болады.

Program EndOfFile;

Var f:text;

Symb:char;

Begin

Assign(f, ‘C:\autoexec.bat’);



Reset(f);

Repeat


Read(f, symb);

Write(Symb);

Until EoF(f)

End.


Бұл мысалда Text типті f файлдық айнымалы жарияланып, ол С түпкі каталогындағы Autoexec.bat файлымен байланыстырылады. Осыдан кейін файл оқу үшін ашылады (Reset процедурасы арқылы). Содан кейін Repeat цикл операторы арқылы ондағы символдарды циклық оқу орындалады. Цикл денесі болатын құрылымдық оператор өзіне кезекті символды оқу операторын (Read процедурасы) және осы символды экранға шығару операторын (Write) қамтиды. Нәтижесінде Autoexec.bat файлының түгел мазмұны экранға шығарылады.

Autoexec.bat файлының орнына Assign процедурасының параметрі ретінде кез-келген басқа текстік файлды алуға болады. Нәтижесінде бұл файлдың да мазмұны экранға шығарылады.


Файлды қию

Кейде белгілі позициядан бастап файлдың соңын жою қажеттілігі туындайды. Мұндай жағдайда Turbo Pascal-да Truncate стандартты процедурасы бар.

Truncate процедурасы ашық файлға қолданыла отырып, оның мазмұнын ағымдағы позициядан бастап, соңына дейін жояды.

Procedure Truncate (var f);

Мұндағы f - Text типінен өзге кез-келген типті файлдық айнымалы. Нұсқауышты файлдағы белгілі бір элементтің алдына орналастыру мүмкіндігі бар ма? Жалпы Turbo Pascal-да ол үшін Seek процедурасы бар. Дегенмен, бұл процедурамен таныс болмағандықтан, параметрлі цикл операторының (For) көмегімен файлдағы (типтендірілген немесе типтендірілмеген) белгілі элементтер санын оқуды ұйымдастырып, соңынан Truncate процедурасын қолдануға болады. Truncate процедурасы қолданылған программа келесі мысалда көрсетілген.

Program Trunc;

Var f:file of char;

i:integer;

j:char;

procedure out;



begin

Reset(f);

While not EoF(f) do

Begin


Read(f, j);

Write(j)


End

End; {Out}

Begin {Program}

Assign(f, ‘FILE.TXT’);

Rewrite(f);

{A, B, C, D, E, F енгізу}

FOR J:=’A’ to ‘F’ do Write(f, j);

WriteLn(‘Қиғанға дейінгі файл:’);

Out;

Reset(f);



{3 жазбаны оқу}

For i:=1 to 3 do Read(f, j);

Truncate(f); {Файлды қию}

WriteLn;


WriteLn(‘Қиғаннан кейінгі файл:’);

Out; {Файл мазмұнын шығару}

Close(f);

Erase(f)


End. {Program}

Бұл программада типтендірілген f файлдық айнымалы жарияланып, соңынан FILE.TXT файлымен байланыстырылған. Осыдан кейін осы файл Rewrite процедурасының көмегімен ашылады (егер мұндай файл болмаса, Rewrite процедурасының жаңа бос файл жасайтынын білеміз). Егер файлдық айнымалымен файлды байланыстырған кезде каталог көрсетілмесе, үнсіз келісім бойынша ағымдағы каталог қолданылады. Сонымен FILE.TXT файлы Turbo Pascal файлдары орналасқан каталогта құрылады. Бірақ программа соңында шақырылған Erase процедурасы бұл файлды жояды.

Осылайша файл құрылды, ашылды, енді оған алты элемент – ‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’ символдары енгізіледі де, файл мазмұны экранға шығарылады. Осыдан кейін файлдың үш элементі оқылады да, Truncate процедурасының көмегімен файлды қию орындалады. Содан кейін файл мазмұны тағы да экранға шығарылады, осымен Truncate процедурасын қолдану нәтижесі көрінеді. Ең соңында басында құрылған FILE.TXT файлы жабылып (Close процедурасы), жойылады (Erase процедурасы). FILE.TXT файлын экранға шығару Out процедурасы арқылы орындалған. Ол программа денесінде екі рет шақырылады (толық файлды және қиылған файлды экранға шығару үшін).

Trunc программасының экранға шығарылуы төмендегідей көрінеді.

Қиғанға дейінгі файл:

ABCDEF


Қиғаннан кейінгі файл:

ABC

Trunc программасының әрекетін 8-сурет бейнелейді.

Қалауыңызша келесі операторлардағы ‘F’ және 3 мәндерін өзгерте отырып, файлға жазылатын символдар ұзындығы мен Truncate процедурасы қолданылғаннан кейін қалатын әріптер санын өзгертіп көруге болады.

FOR J:=’A’ to ‘F’ do Write(f, j);

және


For i:=1 to 3 do Read(f, j);
11–ДӘРІС. Нұсқама типтер және динамикалық жады.

  • Статикалық және динамикалық айнымалылар.

  • Айнымалылардың моделі.

  • Адрестер және нұсқамалар. Нұсқамаларды хабарлау.

  • Нұсқамаларды қолдану.

  • Динамикалық жады.

  • Динамикалық жадыларды ерекшелеу және босату.

  • Динамикалық жадылармен жұмыс істеу процедуралары мен функциялары.

  • Үйме администраторы.

Осы уақытқа дейін біз статикалық мәліметтер және айнымалылармен жұмыс істедік. Мұндай айнымалылар программаның басында жарияланып, программаның жұмысы аяқталғанша бар болады – бұл статикалық айнымалылар. Сәйкесінше, бұл айнымалыларды сақтауға арналған жады бөлініп, ол программа жұмысы барысында босамайды. Әрине, бұл компьютер жадысын пайдаланудың тиімді емес тәсілі. Бұл дәрісте мүмкін тәсілді қарастырамыз – ол динамикалық айнымалылар, яғни мұндай айнымалылар оларды қолдану алдында жасалып, оларды қолданып болғаннан кейін бірден жойылады (алып тұрған жадыны босатады).

Әрине, Turbo Pascal тілінде мұны жүзеге асыруға болады және осы мақсатта динамикалық жады қолданылады.

Динамикалық жады үйме (куча) деп те аталып, Turbo Pascal тілінде шамамен 300000 байт көлемі бар байттар массиві ретінде қарастырылып, әлдеқайда үлкен мәліметтер құрылымдарын өңдеуге мүмкіндік береді. Алдыңғы дәрістерде кәдімгі жадыны қолдана отырып, LongInt типті 20000 элементтен тұратын массив жасай алмадық (ол үшін 80000 байт жады қажет, ал құрылымданған типтер үшін максималды өлшем 65520 байт). Дегенмен, динамикалық жадының көмегімен әлдеқайда үлкен массивті өңдеуге болады. Әрине, мәліметтерді динамикалық түрде орналастыру кезінде статикалық мәліметтер сияқты оларға атаулары бойынша қатынас жасай алмаймыз. Сол сияқты динамикалық түрде орналасқан мәліметтердің саны мен типі алдан ала белгілі болмайды. Мәліметтер үшін динамикалық жады программаның жұмысы барысында бөлінеді (босатылады). Turbo Pascal-да динамикалық жадыны басқару үшін нұсқауштар деп аталатын қолайлы құрал пайдалынады.



Достарыңызбен бөлісу:
1   ...   4   5   6   7   8   9   10   11   ...   18




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет