Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Read (f, <тізім>); readln (f, <тізім>); write(f, <тізім>); writeln(f, <тізім>).






Файлды жабу close(f) командасы арқ ылы жү зеге асырылады.

Шартты тү рде файлды бас жағ ы бар ал соң ы бекітілмейтін лента тү рінде бейнелеуге болады. Файлдың компоненттері лентағ а ретімен бірінен кейін бірі жазылады:

f0 f1 f2 f3 м.к.

^ т.м.

мұ ндағ ы т.м. - ағ ымдағ ы маркер, ол файлдың жұ мыс позициясын (терезені) кө рсетеді; м.к. (файлдың соң ын белгілейтін маркер) - файлдың соң ғ ы элементінен кейін автоматты тү рде қ алыптастырылатын арнайы код.

Мұ ндай тү рдегі файлдар тізбекті тү рде ену файлдары деп аталады. Тікелей тү рде енуді мысалы, seek функциясы арқ ылы жү зеге асыруғ а болады.

rewrite(f) – файлды жазу ү шін бұ йрығ ы – файлды жазу режимінің бастапқ ы қ алып-кү йіне орнатады; ағ ымдағ ы маркер файлдың соң ын белгілейтін маркерге орналастырылады. Егер f файлында осығ ан дейін ақ парат болса, онда ол жойылады. rеset(f) бұ йрығ ы арқ ылы оқ у ү шін ашылғ ан файлда ағ ымдағ ы маркер нө лдік қ алып-кү йіге орналастырылады, бырақ майлдағ ы нә рсе жойылмайды. Файлды жабу close(f) бұ йрығ ы міндетті, себебі бұ л бұ йрық файлдың соң ын белгілейтін маркерді қ алыптастырады, ол кө п жағ дайда қ ажетті болып табылады (мысалы, eof(f) функциямен жұ мыс жасау ү шін). Паскальда файлдармен жұ мыс жасауғ а арналғ ан кірістірілген функциялар кө зделген:

filesize (f) – ашылғ ан файл компоненттерінің ағ ымдық мө лшер саны;

filepos (f) – маркердің ағ ымдық позициясының нө мірі;

геnаmе (f, имя) – f-пен байланысқ ан файл аталуын ауыстыру;

erase( f) - файла файлды жою;

execute (f) - СОМ-файлды орындау;

chain (f) - СНМ-файлды орындау;

seek (f, N) - маркерді N позициясына орнатады;

eof( f) – файлдың соң ы табылса, TRUE қ айтарады;

eoln (f) - жолдың соң ы табылса, TRUE қ айтарады.

Тә жірибеде литерлік (логикалық) жолдардан тұ ратын мә тіндік файлдар кең пайдаланылады. Сондық тан, Паскальда TEXT стандартты файлдық тип кө зделген (ол file of char болып табылмайды, ол file of string[n] – ке жақ ындау). Логикалық жолдардың ұ зындығ ы ә ртү рлі болады, соның қ атарында, нө льдік. Ә р жолдың соң ында «жолдың соң ы» (eoln - «end of line») арнайы символ қ ойылады. Жолдың соң ын белгілейтін баспалық символ ретінде # литераны қ олданады. Мә тіндік файл (text) қ атаң тізбекті болып табылады, оғ ан кейбір кірістірілген, мысалы, seek сияқ ты функцияларды қ олдануғ а болмайды. Типтелген файлдармен салыстырғ анда, мә тіндік файлмен бір мезгілде оқ у (read) жә не жазу (write) операцияларын орындауғ а болмайды. Бырақ, writeln жә не readln операторлары рұ қ сат етілген. Сандық деректер, бү тін жә не нақ ты, мә тіндік файлда бос орын арқ ылы жазылуы тиіс.

Р33 программада деректерді принтерге (1st:) шығ ару мысалы келтірілген.

program Р33;

var

fal: text; x: real; name: string[25];

begin

assign(fal, '1st: '); rewrite(fal); x: =2.5; name: ='Салтанат';

writeln(fal, x: 8: 2);

writeln{fal, 'Сә лем, ', name); close(fal)

end. {файлдық fal айнымалы 1st: принтермен байланысады, fal файлына жазу негізінде баспағ а шығ аруды білдіреді}

 

Р34 программада 10 дан 20 дейін бү тін сандар тізбегі қ ұ рылады да «xxx.dat» файлда сақ талады.

program Р34;

var

f: file of integer; i: integer;

begin

assign{f, 'xxx.dat'); rewrite(f};

for i: =10 to 20 do write(f, i); close {f};

end. {Программа орындалып болғ аннан кейін сыртқ ы xxx.dat файлы қ алыптастырылады}

Р35 программада бар «xxx.dat» файлдан алғ ашқ ы бес компоненттері оқ ылып, осы мә ндердің квадраттары дисплейге шығ арылады.

program Р35;

var ff: file of integer; j, i: integer;

begin

assign(ff, 'xxx.dat'); reset(ff);

for j: =l to 5 do begin read(ff, i); writeln(i*i);

end;

close(ff);

end.

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

Айнымалыны орналастыру ү шін жадының қ ажетті кө лемін тек программаның орындалу барысында ғ ана анық тауғ а болатын жағ дайлар программалауда жиі кездеседі. Нұ сқ ағ ыштар айнымалыларды «жү ру барысында», яғ ни, динамикалық тү рде қ ұ руғ а мү мкіндік береді. Қ ажет болғ ан жағ дайда жадығ а жаң а айнымалыларды орналастырып, олар қ ажет болмай қ алғ ан кезде жадыны босатуғ а болады.

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

Сілтеуіш типті айнымалылар (нұ сқ ағ ыштар) пайдалану ү шін оларды айнымалылар бө лімінде сипаттау арқ ылы кә дімгі жолмен енгізіледі, ал олардың (программада қ ұ рылатын сә йкес динамикалық шамалардың типін кө рсететін) типі де айнымалыларды сипаттауда типті беру арқ ылы немесе ертерек сипатталғ ан типтің аталуын кө рсету арқ ылы анық талады. Динамикалық айнымалыларғ а сілтеу олардың жадыдағ ы адресі бойынша жү зеге асырылады. Динамикалық айнымалының адресін сақ тау ү шін сілтеуіш тип пайдаланылады, ал сілтеуіш типті айнымалы нұ сқ ағ ыш деп аталады. нұ сқ ағ ыштар типтелген жә не типтелмеген болады.

Нұ сқ ағ ыштың мә ні содан бастап сә йкес динамикалық шама жадыда орналаса бастайтын ұ яшық тың адресі болып табылады. Сілтеуіш типті беру келесі схема бойынша орындалады:

type< сілтеуіш типтің аталуы > = ^ < динамикалық шама типтің аталуы >

(^ белгі шаманың динамикалық болғ андығ ын кө рсетеді).

Мысалы:

type

р = ^ integer;

q = ^ record

х: integer;

у: string[20]

end;

Екі р жә не q сілтеуіш тип жарияланғ ан. Біріншісі – бү тінсанды мә ндерге нұ сқ ағ ыш, екіншісі - на екі ө рісі бар жазбағ а. Нұ сқ ағ ыштың динамикалық объектпен байланысын келесі тү рде бейнелеуге болады:

 
 


Бұ л схемада р – нұ сқ ағ ыштың аталуы; жұ лдызша арқ ылы нұ сқ ағ ыштың мә ні бейнеленген, ал стрелка нұ сқ ағ ыштың мә ні объекттің адресі болып табылатындығ ының фактін бейнелейді (объектке сілтеу), сол арқ ылы программада объектке қ ол жеткізуге болады.

Кейбір жағ дайларда нұ сқ ағ ыштың мә ні ретінде нұ сқ ағ ышпен ешқ андай объектті байланыстырмайтын «бос» сілтеуді қ абылдау қ ажеттілігі пайда болады. Мұ ндай мә н nil қ ызметші сө з арқ ылы беріледі де кез келген сілтеуіш типке тиесілі болады. p: =nil оператордың орындалу нә тижелерін келесі тү рде бейнелеуге болады:

 
 


Жарияланғ ан типтерге ие бола отырып, осы типті айнымалыларды кә дімгідей сипаттауғ а болады. Мысалы, var i: p; zap: q;.

Базалық типті динамикалық айнымалыларды тікелей «айнымалыларды сипаттау» бө лімінде енгізуге болады: var i: ^integer;,

Нұ сқ ағ ышты сипаттау сә йкесінше динамикалық объекттің мә ні ү шін жадыны ә лі резервтемейді. Мысалы, жоғ арыда келтірілген ә р сипаттау адресті * - сілтеніштің мә нін жазу ү шін жажыдан екі байт орын бө ліп береді, бырақ, жадыда р немесе q типті ешқ андай шама қ ұ рылмайды жә не тіпті * адрес те ә лі жоқ.

Оғ ан сілтеуіш і айнымалысы сілтеп тұ рғ ан динамикалық объектті туындылау ү шін, стандартты new(i) процедура қ ызмет атқ арады, мұ ндағ ы new - «жаң а» - процедураның аталуы, i – нұ сқ ағ ыштың аталуы. new(i) процедурасы аталуы і болатын сә йкес типті динамикалық объектті жайғ астыру ү шін жадыдан орын резервтейді, ал і нұ сқ ағ ышқ а динамикалық і объекттің адресін меншіктейді. Бырақ, writeln(i) процедура арқ ылы динамикалық объекттің адресін білуге болмайды.

Динамикалық объекттер стек типі бойынша жадының арнайы облысында орналастырылады, ол «ү йінді» деп аталатын программадан жә не статикалық айнымалылардан бос жадының орыны.

Жоғ арыда айтылғ андай нұ сқ ағ ыш аталуынан кейін қ ойылғ ан ^ символ мә селе сілтеуіш айнымалының мә ні туралы емес, ал осы сілтеуіш айнымалы сілтеп тұ рғ ан динамикалық объекттің мә ні туралы екендігін білдіреді. Сондай ақ, егер программада айнымалыны сипаттау var i: ^integer; бар болса, онда new(i) процедура орындалғ анда integer типті динамикалық айнымлы қ ұ рылады. Егер одан кейін меншіктеу i^: = 58 операторы орындалса, онда осы динамикалық айнымалығ а 58 мә ні меншіктеледі.

Одан кейін ^ символы қ ойылғ ан сілтеуіш айнымалының аталуын «нұ сқ ағ ышы бар айнымалы» деп атайды. Дә л сол синтаксикалық тұ рғ ыда динамикалық айнымалының рө лін атқ арады да типі динамикалық айнымалының типі болатындай айнымалыларды пайдалануғ а рұ қ сат етілген жерлерде тілдің кез келген конструкцияларында пайдалануғ а болады. Мысалы, егер j - integer типті статикалық айнымалы болса, онда келесі меншіктеу операторлар орынды: j: = j + i^ + 2; i^: =i^ div 3 + 7; i^: =sqr(i^) жә не с.с. Егер сілтеуіш b айнымалы массивке сілтейтін болса:

type mas = array[1..100] of integer; var b: ^mas

онда бұ жағ дайда нұ сқ ағ ышы бар айнымалылардың тү рі, мысалы: b^[2], b^[k+5] болуы мү мкін.

Егер new(p) оператордың орындалу нә тижесінде қ ұ рылғ ан кейбір динамикалық р^ объект программаның орындалу барысында қ ажет болмай қ алатын болса, онда стандартты dispose(p) процедура арқ ылы оны жоюғ а (жадыдағ ы оғ ан бө лінген орынды тазалауғ а) болады. dispose(p) тү рдегі оператордың орындалу нә тижесінде оғ ан сілтеуіш р айнымалы сілтеп тұ рғ ан динамикалық объект ө з тіршілігін аяқ тайды, ол алатын жадыдағ ы орын босатылады, ал р нұ сқ ағ ыштың мә ні анық талмағ ан (бырақ nil –ге тең емес) болып қ алады

Егер dispose(p) процедураны шақ ырудың алдында ол бос nil мә нге ие болғ ан, немесе осы процедураны шақ ырудың алдында р нұ сқ ағ ыш анық талмағ ан болса, онда бұ л апаттық аяқ талуғ а ә келуі мү мкін.

Бір нұ сқ ағ ыштың мә нін типі сондай болатын басқ а нұ сқ ағ ышқ а меншіктеуге болады. Сонымен қ атар, типтері бірдей болатын нұ сқ ағ ыштарды «=» немесе «< >» қ атынастарды пайдаланып бір бірімен салыстыруғ а болады.

Стандартты new жә не dispose процедуралары динамикалық тү рде программалық объекттерді қ ұ руғ а жә не оларды жоюғ а мү мкіндік береді, бұ л машина жадың тиімді пайдалануғ а мү мкіндік береді.

Деректердің байланысқ ан тізімдері. Деректердің байланысқ ан тү рлі қ ұ рылымдарының қ атарында массивтер мен файлдар стандартталғ ан, ал олардан басқ а жә не соларғ а ұ ү қ сас басқ а қ ұ рылымдар да қ ажет болуы мү мкін. Олар ү шін келесі қ асиеттер тә н:

· элементтерінің саны алдын-ала анық талмағ ан;

· жедел жадыда сақ тау қ ажеттілігі.

Мұ ндай қ ұ рылымдарды жү зеге асыруғ а арналғ ан қ ұ ралды динамикалық айнымалылар аппараты ұ сынады. Мұ ндай қ ұ рылымдардың ең қ арапайымы бір жақ қ а бағ ытталғ ан тізім болып табылады. Ол дә рігердің қ абылдауына тұ ратын кезек сияқ ты қ ұ рылады: пациенттер кез келген бос орындарда отыра береді, бырақ, ә рқ айсысы ө зінің кезегін біледі (яғ ни, деректер жадының бос орындарында орналасады, бырақ ә р элемент алдындағ ы немесе келесі элементке сілтеуді қ амтиды). Пациенттердің саны алдын-ала анық болмайтын себебіне байланысты, қ ұ рылым динамикалық болып табылады. Сонымен, байланысқ ан тізім жазбалар – тү йіндер тізбегі болып табылады, ол тізбектегі ә р жазба негізгі деректерді жә не тізбектегі келесі жазбағ а сілтеуді қ амтиды. Тізімнің басында тізімнің бірінші жазбасына сілтейтін нұ сқ ағ ыш («тү бір») орналасқ ан.

Тізімнің соң ғ ы жазбасындағ ы нұ сқ ағ ышқ а ә детте nil мә ні меншіктеледі, ол тізімнің соң ын білдіретін белгі. Мұ ндай қ ұ рылым динамикалық болып табылады, ол программаның орындалу барысында ө згере алады.

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

Ұ қ сама басқ а қ ұ рылым - стек. Стектің моделі ретінде оның ішіне шариктер домалатып кіргізілетін бір жағ ы дә некерленген тү тікті (трубканы) қ арастыруғ а болады. Бұ л жағ дайда LIFO (L ast I n F irst O ut – соң ында кірген – бірінші шығ ады) принципі жү зеге асырылады. Стектегі элементтердің мү мкін болатын саны бекітілмеген. Стек оғ ан тек тү бірлік нү ктесінде ғ ана қ ол жеткізуге болатын тізімнің жеке жағ дайы болып табылады. Жаң а элементті қ осу немесе жою амалдары тізімнің басында орындалады. Стек ү шін стекке енгізу жә не стектен алу операциялары анық талғ ан. Элементті стекке енгізу операциясы тек элементтің мә ні арқ ылы анық талады. Элементті стектен алу операциясының мағ ынасы - стектегі бірінші элементтік мә нін айнымалығ а меншіктеп сол элементті стектен жою.

Стекті программада жү зеге асыру мысалын қ арастырайық. Бұ л кезде техникалық тұ рғ ыда бір қ атар есептерді шешу керек, олардың ішінде ең ерекшелері:

· стектің келесі компоненттерін байланыстыру;

· стек бойынша ә р жылжығ ан сайын сілтеулерді ығ ыстыру.

Ә р элементтің мә німен қ атар келесі элементке сілтеуді де қ амту қ ажеттілігіне байланысты элементтердің ә рқ айсысы екі ө рісі бар жазбада сақ талады, одағ ы бірінші ө ріс – элементтің мә ні, ал екінші – келесі элементке сілтеу. Схемалы тү рінде бұ л қ ұ рылымды келесідей сипаттауғ а болады (бірінші келген элемент ешнә рсеге сілтей алмайды, ол туралы «бос сілтеу» nil білдіреді).

Нақ ытылық ү шін стектің элементтері – нақ ты сандар болсын, жә не тізбектеліп толтырғ ан кезде стектің 1-2-3 қ алып-кү йлері келесідей болсын:

                 
1, 75     35, 7 1, 75   -6, 94 35, 7 1, 75

Р36 программа екі процедураны қ амтиды: кезекті компонентті стекке қ осу жә не оны стектен алу. Программа кө рсетілген стекті қ алыптастырады жә не одан элементті алады. Ерекше назарды сілтеулерді жылжыту ұ йымдастырылуына аудару керек.

Ағ аш қ ұ рылымы сызық ты тізімнің жалпылануы болып табылады. Тізімде ә р тү йін басқ а тү йінге сілтейтін нұ сқ ағ ышты қ амтиды.Ағ ашта ә р тү йін бірнеше тү йіндерге сілтейтін бірнеше нұ сқ ағ ыштарды қ амтиды. Егер нұ сқ ағ ыштар саны екеу («оң жақ» жә не «сол жақ») болса, онда мұ ндай ағ аш бинарлы деп аталады. Нұ сқ ағ ыштардың біреуі nil –ге тең болуы мү мкін. Ағ аштың бастапқ ы нү ктесі тү бірлік тү йін деп аталады. Тү бірлік тү йіннің оғ ан кіретін бұ тақ тары жоқ, тек шығ атын бұ тақ тары бар. Басқ а тө беден осы тө беге сілтейтін нұ сқ ағ ышы бар тө бені сол тө бенің ұ рпағ ы, ал біріншісін сә йкесінше - тегі деп атайды. Егер тө бе ұ рпақ тарғ а ие болмаса, онда ол терминалды тө бе деп аталады. Бү тінсанды мә ндердің бинарлы ағ ашында сол жақ тағ ы бұ тақ тарда кіші сандар, ал оң жақ тағ ы бұ тақ тарда ү лкен сандар орналасуы тиіс деген келісімді ұ станады. Ағ аштарғ а қ олданылатын негізгі операциялар – элементті ағ ашқ а ендіру, элементті ағ аштан жою жә не ағ ашты айналып шығ у.

Лекция


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.013 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал