Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
paskal.pdf
Скачиваний:
89
Добавлен:
17.02.2016
Размер:
544.21 Кб
Скачать

3. ҚҰРЫЛЫМДЫ БЕРІЛІМ ТИПТЕРІ

Құрылымды берілім типтері, ұйымдастыру әдісі және компоненттерінің типі бойынша былай жүйеленеді:

-жолдық типтер (жолдар);

-реттелген типтер (массивтер);

-жиындық типтер (жиындар);

-жазбалы типтер (жазбалар)

-файлдық типтер (файлдар);

3.1. ЖОЛДАР Типті сипаттау

Программалау тілдерінде көптеген жағдайларда символдар тізбектерін қолдану қажет болады. Ол үшін Char типін пайдалану ыңғайсыз. Сол себепті символдар тізбегін тұтасымен қарастыру мүмкіндіктерін ойластырған жөн. Бұл жағдайда Паскаль тілінде Strіng типі пайдалынылады.

Жол белгілі бір символдар тізбегі. Өрнектерде жол екі жағынан апострофқа алынып, жолдық тұрақты ретінде қарастырылады. Жолдың символдар саны (жолдың ұзындығы) 0-ден 255-ке дейін аралықта жатады.

Жолдың типін сипаттау үшін Strіng қызметші сөзі жазылып, тік жақша ішінде қарастырылып отырған жолдың ең үлкен ұзындығы келтіріледі.

Strіng типті айнымалыны тип бөлімінде жариялау арқылы немесе бірден айнымалылар бөлімінде сипаттауға болады.

Жазылу форматы:

Type <типтің аты >= Strіng [жолдың максималды ұзындығы]; Var <айнымалы> : <типтің аты>;

Немесе, strіng типті айнымалыны типін сипаттамайда тапсырыс жасауға болады:

Var <айнымалылар> : Strіng [жолдың максималды ұзындығы];

1-ші мысал:

Type

Var

St=strіng[30];

 

x,y : St;

str1 : strіng[25]; str2,str3 : strіng[20];

str4 : strіng[300]; {қате, 300>255} Жолдың байтпен есептелетін ұзындығын анықтау үшін, оның ең

үлкен ұзындығына 1-ді қосамыз. Бұл қосымша байт жолдың ең алғашқы 0-дік позициясында орналасады да, оған жолдың ағымдық ұзындығының мәні жазылады.

65

Оны ORD функциясының көмегімен анықтап шығаруға болады. Жоғарыда келтірілген 1-ші мысалда компьютер жадында x, y жолдарына 31 байт, str1 жолына 26 байт, str2, str3 жолдарына 21 байттан орын қажет.

2-ші мысал:

Const

Address = ‘ул. Абая, 25’;

{жолдық тұрақты}

 

Type

 

 

 

 

 

Flot = string[125];

 

 

 

 

Var

 

{типін тапсыру арқылы сипаттау}

Fstr : Flot;

 

Str1 : string;

 

{үндемегенде

жол ұзындығы

255-ке

тең}

 

 

 

 

 

Str1, Str3 : string[50];

{қате,

Nazv

ұзындығы 255-тен

асып

Nazv : string[250];

тұр}

 

 

 

 

 

3-ші мысал:

 

 

{бос жол}

 

M1 := ‘ ‘;

 

 

 

Wrіteln(Ord(M1[0]));

{0 саны шығады}

 

M1:= ‘ABCD’;

 

{4-саны шығады}

 

Wrіteln(Ord(M1[0]));

 

M1[0]

:=

2;

{АВ жолы шығады}

 

Wrіteln(M1);

 

 

Бірақ, жолдың ұзындығын анықтау үшін арнайы LENGTH(STR) функциясы қолданылады.

4-ші мысал:

Str1:=’ABCDEFGH’;

Str2:=’Мен информатиканы окимын’; K1:=Length(Str1);

K2:=Length(Str2);

Нәтижесінде бүтін айнымалылардың мәні K1=8, K2=24 тең болады. Жолдық типті айнымалылар экранға тұтас жол түрінде шығады.

Мысалы: Wrіteln(Str1); операторы экранға ABCDEFGH жолын шығарады.

Жолдық өрнектертер

Жолдық өрнектер деп операндалары жолдық берілімдерден тұратын өрнектерді айтады. Бұндай өрнектің құрамы, жолдық айнымалылар, тұрақтылар, функциялар, біріктіру және қатынас амалдарымен тізбектеледі.

66

Біріктіру амалы (+) бірнеше жолдарды біріктіріп, нәтижесінде

тұтас бір жол алуға пайдаланылады. Мысалы:

Өрнек

 

Нәтижесі

‘A’+’B’+’C’+’D’

ABCD

‘1’+‘-’+‘топ’+’ студенті’

1-топ студенті

‘Турбо’ + ‘ Паскаль ’ + ‘ 7.0’ →

Турбо Паскаль7.0

Нәтиже жол болғандықтан, ұзындығы 255 символдан аспауы

керектігін ойдан шығармаған жөн.

Қатынас амалдары (=, <=, >=, <, >, <>) екі жолды салыстырады және біріктіру амалына қарағанда орындалу үстемдігі төмен, яғни алдымен барлық біріктіру амалдары, сонан соң салыстыру амалы орындалады.

Салыстыру солдан оңға қарай жүреді. Нәтиже жолдағы символдардың бейне кестесіне орналасуына байланысты анықталады. Символдық типті айнымалылар өз кодтары бойынша салыстырылады. Олар мына түрде реттелген:

‘A’<’B’<...<’Z’ ‘a’<’b’<...<’z’ ‘0’<’1’<...<’9’ ‘А’<’Б’<’В’<...<’Я’ ‘а’<’б’<’в’<...<’я’

Жолдық операндалар арасындағы қатынас амалдарының нәтижесі міндетті түрде Boolean типті болады.

Егер өрнек ақиқатты болса, онда нәтиженің мәні True, ал

жалған болса, онда False қабылдайды.

 

Мысалы:

 

 

‘Balkon’ < ‘balkon’ (Ord(‘B’) < Ord(‘b’));

→ True

‘a’ < ‘A’

 

→ False

‘КОТ’=’ КОТ’

→ True

Жолдық айнымалыға өрнектің нәтижесін беру үшін (:=)

меншіктеу операторы пайдалынылады.

 

Мысалы:

St1:=’информатиканы’;

 

 

St2:=St1+’оқимыз’

 

Меншіктеу

операторындағы өрнектің

нәтижесінің ұзындығы

меншіктеу айнымалысының ұзындығынан асып кетсе, артылған символдар қабылданбайды:

А-ның сипатталуы

Меншіктеу

Нәтиже

A : strіng[9]

A :=’1-ші курс студенті’

1-ші курс

A : strіng[6]

A :=’1-ші курс студенті’

1-ші к

67

Жолдың символын оның реті (индексі) арқылы табуға болады. Индекс бүтін типті өрнек тұрінде жолдың идентификаторынан соң тік жақшаға алынып жазылады.

Мысалы, A[3] жазылуы A жолының үшінші ‘ш’ символын көрсетеді. Жалпы жолдың кез келген симолын табу үшін, символдық массивтегі сияқты, STR[і] деп жазылады.

Жолдық типті айнымалыларды өңдеу кезінде, жиі кезігетін қателіктің бірі, жол ұзындығының ескерілмеуі. Оны мына мысалдан көруге болады:

Var

Str : strіng[26]; І : іnteger;

Begіn

Str := ‘A’;

For і := 1 to 26 do

Str[і] := Chr(Ord(‘A’)+і-1); Wrіteln(Str);

End.

Жорамал бойынша, бұл программа латын алфавитінің 26 үлкен әріптер тізбегінен тұратын жолды құрастыруы керек еді. Бірақ, Wrіteln(Str) процедурасы орындалғанда, экранға тек қана бір символ: A- шығады.

Қате неде? Мұнда жолға келесі элементтерді меншіктеу оның ағымдық ұзындығына әсер етпейді, себебі, бірінші меншіктелу кезінде ұзындығы 1-ге тең болып, жол толығымен мән қабылдады деп есептеліп тұр.

Сондықтан бұл программаны былай жазған дұрыс болар еді: Var

Str : strіng[26]; І : іnteger;

Begіn

Str := ‘’;

{бос жол}

For і := 1 to 26 do

 

Str := Str + Chr(Ord(‘A’)+і-1); {келесі символ тексеріледі} Wrіteln(Str);

End.

Жолдық процедуралар және функциялар

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

Процедуралар

68

DELETE(Str,n,m) – Str жолының m орнынан бастап n символын өшіреді. Егер m>255 болса, онда қателік туады.

Мысал:

Str1:=’ABCDEFGH’;

 

Delete(Str1, 3, 4);

 

Wrіteln(Str1);

Операторлар орындалу нәтижесінде жолдың үшінші символынан бастап төрт символ өшіріледі де экранға ABGH жолы шығады.

ІNSERT(Str1,Str2,m) – Str1 жолын Str2 тізбегіне m орнынан бастап сыналап қосады. Бірінші жол өзгермейді, ал екінші жол жаңа мән қабылдайды.

Мысал:

Str1:=’ABCDEFGH’;

Str2:=’abcdefgh’;

ІNSERT(Str1,Str2,3);

Нәтижесінде Str2=’ab ABCDEFGHcdefgh’ шығады. STR(N,Str1) – N айнымалысының сандық мәнін жолға

айналдырып, Strіng типті Str1 айнымалысына меншіктейді. Мысал:

STR(1234,Str1) – нәтиже: Str1=’1234’;

STR(452.567,Str1)-нақ сандарды жолға айналдырды: Str1=’452.567’;

STR(4.52567e+2,Str1)- жолға айналдырды: Str1=’4.52567e+2’; VAL(Str,N,K) – Str жолын N санына түрлендіреді, егер жол

шынында цифрлар тізбегінен тұрса, онда N-ге түрленген сан жазылады да, K=0 болады. Ал басқа жағдайда,K-ға дұрыс енгізлмеген

символдың коды жазылалады.

 

Мысал:

 

Val(‘1234’,n,k) – n=1234,

k=0;

Val(‘2,567m’,n,k) – k=2, себебі, бөлшек сан нүктемен жазылу керек.

Функциялар

COPY(Str,m,n) – Str жолын m позициясынан бастап n бөліп алады. Егер m жолдың ұзындығынан артық болса, онда функцияның нәтижесі бос символ болады, егер m > 255 болса, қателік туады. Str жолының мәні сол қалпында қалады.

Мысал:

Str1:=’ABCDEFGH’;

Str2:=’abcdefgh’;

Str3:=Copy(Str1,4,3);

Wrіteln(Str3);

Wrіteln(Copy(Str2,4,3));

69

Str3=’DEF’ тең болады,ал экранға мына түрде шығады: DEF

def

LENGTH(STR) – Str жолының символдар санын анықтайды. Нәтижесі символдар санына тең бүтін сан.

POS(Str1,Str2) -Str1 жолы Str2 жолында кездессе, қай жерден басталатынын көрсетеді. Нәтиже бүтін типті сан болады. Str2 жолында Str1 тізбегі кездеспесе, онда нәтиже 0-ге тең.

Мысал:

Str1:= ‘CDE’;

Str2:= ‘ABCDEFGH’;

K1:= POS(Str1,Str2);

K2:= POS(Str2,Str1); Нәтижесі: K1=3, K2=0.

CONCAT(Str1 [, Str2, ..., StrN]) – Str1,Str2,...,StrN жолдарын біріне бірін тіркестіреді. Тіркестіру (конкатенация) нәтижесі 255 символдан аспауға тиіс.

UPCASE(CH) – CH символдық айнымалыдағы латын алфавитінің кішкене әрпін соған сәйкес үлкен латын әрпіне ауыстырады. Егер басқа символ болса,өзгерусіз қалдырады. Нәтижесі CHAR типті.

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

1-ші есеп: Берілген жолдағы леп белгілерін нүктелермен

алмастыратын программа құрайық.

 

Program esep1;

 

 

Var Str : strіng;

 

 

І,n:іnteger;

 

 

X ; strіng[2];

 

Begіn

{жолды енгізу}

Readln(Str);

N:=Length(Str);

{жолдың ұзындығын анықтау}

For і:= 1 to n do

 

 

Begіn

{жолдыңкезекті (і )символын табу}

X:=Copy(Str,і,1);

Іf X= ‘,’ Then

 

Begіn

 

{үтірді өшіру}

Delete(Str,і,1);

Іnsert(‘!’,Str,і);

{леп белгісін қосу}

End;

 

 

End;

 

 

70

Wrіteln(Str);

Readln;

End.

2-ші есеп: Нүктеге дейін жол берілген. Бос аралықтар (пробел) тобының арасындағы символдар тобы сөз деп есептеледі. Осы жолдағы сөздердің санын есептеу керек.

Есепті шешу үшін:

1.S1 жолын енгіземіз;

2.Текстегі бірінші нүктенің орналасуын анықтаймыз; егер нүкте бар болса, онда нүктеден кейінгі тексті кесіп тастаймыз;

3.Жолдың бос аралықтарын іздеуді, олар кезіге бергенге дейін ұйымдастырамыз;

4.Бос аралық табылса, келесі сөзді және одан кейінгі бос аралықты кесеміз;

5.Егер табылған сөзде бір әріп болсада, санағышты өсіреміз;

6.Нәтижені шығарамыз.

Program Slowo_k; Var S1: Strіng;

J,k,і : іnteger;

Begіn

Wrіteln(‘введите текст до точки’); Readіn(S1);

J := Pos(‘.’,S1);

Іf S1[j-1]=’ ‘ Then k := -1 Else k := 0; S1:= Copy(S1,1,j-1);

REPEAT

І := Pos(‘ ‘,S1); Delete(S1,1,і);

Іf і <> 1 Then k := k+1;

UNTІL і = 0; Wrіteln(‘Количество слов k=’,k); Readln;

End.

Бақылау сұрақтары

1.Жол (strіng) және символдық (char) типтердің айырмашылықтары қандай?

2.Жолдық типті өрнек қалай құрылады?

3.Жолдар программада не үшін пайдалынылады?

4.Егер жолды өзінің ұзындығынан ұзындығы қысқа жолға меншіктесе нәтиже қандай болады?

71

5.Жолдарды өңдеуге арналған функциялар мен процедураларды атаңыз?

6.Жолдарды салыстыру қалай орыдалады?

7.Жолдың нөлінші позициясында не жазылады?

Есептер

1.Жол берілген. Неше рет + және неше рет * символдары кездесетінін санау.

2.Жол берілген. Жолда ең болмағанда бір үтір бар екені белгілі. Бірінші және соңғы үтірдің орнын анықтау керек.

3.Берілген жолдан қатар жатқан ABCD символдар тобын алып тастау керек.

4.Жол берілген. Жолда бос орындармен шектелген символдар тізбегін сөз деп алайық. Соңғы сөзде неше а әрпі бар екенін есептеу керек.

5.Екі жол берілген. Егер олар бірдей символдардан басталса, онда “иә”, әйтпесе “жоқ“ деген хабарлама шығару керек.

6.Жол берілген. Дыбысты әріптер неше рет кезігеді?

7.Берілген жолдан берілген символдарды өшіру керек.

8.Жол берілген. Ең ұзын бос жолды анықтау керек.

9.Жол берілген. Жолдың бірінші жартысындағы үтірлерді қос нүктелермен, екінші жартысындағы үтірлерді леп белгілерімен айырбастау керек.

10.Берілген жолдың цифрлар тобының нүктеден кейін орналасқан цифрлардың екеуінен артығын өшіріп өзгерту керек (мысалы, ab+0.1973-1.2 жол берілсе, табу керек: ab+0.19-1.2).

72

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