Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
AEP_LEKTsII.doc
Скачиваний:
90
Добавлен:
28.03.2015
Размер:
1.27 Mб
Скачать

7.1 Ординалды типтер

Бұл бөлімде жоғарыда қарастырылған айнымалылардың типтеріне қосымшалар қамтылған. Паскальда өз қалауымыз бойынша элементтерін санақтап шығу арқылы жаңа типті анықтауға болады. Санақтап шығу типі жай ординалды типтер қатарына жатады. Санақтап шығу типінің қажетті сипатталуы типтер бөлімінде 256-ға дейін атауларды қамтыған тізім түрінде жүзеге асырылады. Мысал:

type operator = (plus,minus,multi,divide);

color = (white,red,blue,yelow,purple,green);

Санақтап шығу типі ординалды типтер қатарына жататындығына байланысты ол элементтерге ord(x), pred(x), succ(x) функцияларын және қатынас операцияларын қолдануға болады. Бұл типтегі деректерді енгізу/шығару функциялары арқылы енгізуге және шығаруға болмайды, оларды программаның ішінде оның оқылуының және түсініктілігін жоғарылату үшін пайдаланады. Санақтап шығу типтермен жұмыс жасау мысалы Р21 программасында көрсетілген.

Интервалды (аралық) тип – ол базалық деп аталатын, басқа алдын-ала анықталған ординалды типтің ішкі жиыны. Интервалды ілескен екі нүктелер арқылы ажыратылған ең үлкен және ең кіші мәндерін көрсетіп типтерді сипаттау бөлімінде беруге болады, мысалы:

type days=(mon,tue,wed,thu,fri,sat,sun);

workdays=mon..fri; index=l..30; letter='a'..'z';

Интервалды айнымалылар бөлімінде беруге болады: var а:1..100; b:-25..25;

Қолданылатын операциялар мен функциялар базалық типке қолданылатындай. Программада интервалдық типтерді қолдану жадыны үнемдеуге және программаның орындалу барысында меншіктеулерді қадағалауға мүмкіндік береді. Мысалы: егер k – жылдағы айдың нөмірі болатын болса, онда var k:integer; сипаттаудың орнына var k:l..12 жазуға болады.

7.2 Құрама құрылымдар

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

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

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

Жоғарыда құрама тип – массив қарастырылған еді. Ол біртипті элементтердің фиксацияланған мөлшер санынан тұратын тізбек. Массивтің барлық элементтері ортақ атуға (массив атауы) ие және индекстері арқылы ажыратылады. Индекстерді есептеуге болады, олардың типі ординалды болуы тиіс. Егер массивтер бірдей сипатталған болатын болса, онда оларды көшірмелеуге болады, мысалы: b:=a.

Программа Р22, массивті қолданып, а[1]=а[2]=1; a[k]=a[k-1]+a[k-2] к>2 схема бойынша экранда Фибоначчидің алғашқы 20 санын шығарады.

Кейбір қасиеті бойынша сандық тізбектің мүшелерін реттеу жиі кездесетін есебін қарастырайық.

Программа Р23, массивті қолданып, сандық тізбектің мүшелерін «көпіршік» әдісі арқылы өсу бойынша реттейді. Көршілес элементтердің жұптары ретімен оң жақтан сол жаққа қарай қарап шығарылады да егер олар дұрыс орналаспаған болса жұптағы элементтердің орындарын ауыстырады.

5,3,2,4,1 → 5,3,2,1,4 → 5,3,1,2,4 → 5,1,3,2,4 → 1,5,3,2,4.

Қарап шығудың басында кейбір логикалық р айнымалыға мән меншіктеледі:

p:= true;

егер жұптарды қарап шығу барысында кемінде бір орын ауыстыру орын алған болса, р мәні қарама-қарсы мәнге ауыстыралады: p:=false; ол тізбектіліктің реттелгендігін және жұптарды қарап шығуды қайталау керек екендігін білдіреді. Егер кезекті қарап шығудан кейін p=true шарты орындалса қарап шығу циклі аяқталады. Бастапқы тізбектілік программада 10 элементтен – бүтін сандардан тұратын тұрақтылар массиві ретінде берілген.

Есептерді шешу барысында символдар тізбектерін пайдалану қажеттілігі жиі кездеседі. Оны символдар массиві ретінде сипаттауға болады, бырақ, Паскальда мұндай мақсаттар үшін арнайы тип бар: string[n] - n символдардан тұратын жол, мұндағы n ≤ 255. Айнымалы-жолдарды сипаттау тәсілдері массивтерді сипаттауға ұқсас.

  • жолдық тип типтерді сипаттау бөлімінде, бұл типтегі айнымалылар – айнымалыларды сипаттау бөлімінде анықталады: type word:string[20]; var a,b,c: word;

  • жолдық типті және айнымалыларды сипаттау бөліміндегі сәйкес айнымалыларды сипаттауды беттестіруге болады: var a,b,c: string[20]; d:string[30];

  • жолдық айнымалыны және оның бастапқы мәнін тұрақты-жол ретінде анықтауға болады: const l:string[11]='информатика'.

Жолды құрайтын символдар сол жақтан оң жаққа қарай нөмірленген, оларға бірөлшемді массив элементтеріне сияқты индекстер арқылы сілтеме жасауға болады.

Бір жолдық типтегі айнымалылар үшін лексикографикалық рет анықталған, ол символдық типтің реттелгендігіне байланысты:

'fife' < 'tree' {себебі 'f'<'t'}; 4 > '237' {себебі '4' > '2'}.

Жолдық типтегі шамалар үшін логикалық <, >, = операциялардан басқа коммутативті емес біріктіру операциясы анықталған, ол плюс таңбасы арқылы белгіленеді:

а:='кол ' + 'о'+'кол'; {нәтижеде а='колокол'}

Жолдық шамалар үшін келесі төрт стандартты функциялар анықталған:

  • біріктіру - concat(s1,s2,..,sk); функцияның мәні - s1,s2,...,sk жолдарды біріктіру нәтижесі, егер ол қамтыған символдар саны 255-тен аспайтын болса;

  • ерекшелеу - copy(s,i,k); s жолдан i-ші символдан бастап k символдар ерекшелінеді: а:=сору('крокодил',4,3) ; {нәтижеде а='код'};

  • жолдың ұзындығын анықтау - length(s); s жолдың ағымдағы мәнін құрайтын символдар саны есептеледі: b:=length('автоматика'); {b=10};

  • позицияны анықтау - pos(s,t); s жол t жолға бірінші рет кірген позиция нөмірі есептеледі; егер s жол t жол құрамына кірмеген болса, онда нәтиже 0-ге тең: с:=pos('ом','компьютер'); {с=2}.

Сонымен қатар, Паскальда жолдық шамаларды өндеуге арналған төрт стандартты процедуралар анықталған:

  • жою - delete(s,i,k); s жолдан i-ші символдан бастап k символдар жойылады: s:='таракан'; delete(s,5,2); {нәтижеде s='таран'};

  • кірістіру - insert(s,t,i); i-ші позициядан бастап s жол t жолға кірістіріледі t:='Tapaн’; insert('ка',t,5); {t='таракан'};

  • санды символдар жолына түрлендіру - str(k,s). k санына апострофтарды қосу арқылы s жолы пайда болады: str(564,s); {s='564'};

  • цифрлардан тұратын жолды санға түрлендіру - val(s,k,i); егер s жолда цифрлардан өзге символдар болмаса і саны i=0, керісінше жағдайда i цифрдан өзге бірінші символдың позициясына тең: val('780',k,i); {k=780; i=0}.

Р24 программасында жолдық шамаларды пайдаланып 100 символдан аспайтын мәтіндегі дауысты әріптер саны анықталады. Бұл жерде 18 кіші және үлкен әріптерден тұратын тұрақты-жолды анықтап, берілген мәтіннің кезекті символы тұрақты-жолдың элементі болатындығын цикл ішінде тексерген ыңғайлы. Р25 программасында sqr функциясы ехр функцияға алмастырылады, оған delete және insert процедураларын ретімен қолдану арқылы қол жеткізеді. Р26 программасында 10 латын сөздері енгізіліп алфавит бойынша реттеледі. 10 элемент-жолдардан тұратын массив анықталған және оның элементтері көпіршік әдісі арқылы реттелген.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]