- •1. ТУРБО ПАСКАЛЬ ПРОГРАММАЛАУ ОРТАСЫ
- •2.1. Паскаль тілінің негізгі элементтері
- •Паскальдағы сөздер
- •Идентификатор
- •Тұрақтылар және айнымалылар
- •2.2. Берілім типтері
- •Турбо Паскальдағы берілім типтерінің тізбесі
- •Логикалық тип
- •2.4. Амалдар, математикалық функциялар, өрнектер
- •2.5. Программаның құрылымы
- •2.6. Енгізу-шығару процедуралары
- •Экранға шығару форматтары
- •2.7. Қарапайым операторлар
- •2.8. Алгоритмдеудің негізгі құрылымдары
- •2.9. Тізбектеу құрылымды алгоритмдер
- •2.10. Тармақталу құрылымды алгоритмдерді ұйымдастыру
- •Құрамды оператор
- •Күрделі шартты операторлар
- •CASE таңдау операторы
- •2.11. Қайталау құрылымды алгоритімдерді ұйымдастыру
- •FOR параметрлі цикл операторы
- •Whіle алдыңғы шартты цикл операторы
- •Repeat кейінгі шартты цикл операторы
- •Фибоначчи сандарын есептеу
- •Евклид алгоритмі
- •2.12. Процедуралар және функциялар
- •Функциялар
- •Рекурсивті программалау мысалдары
- •3. ҚҰРЫЛЫМДЫ БЕРІЛІМ ТИПТЕРІ
- •Жолдық өрнектертер
- •Жолдық процедуралар және функциялар
- •3.2. МАССИВТЕР
- •Массивті сипаттау
- •Символдық массивтер
- •Іріктеу алгоритмдері
- •Ұсақтап бөлу арқылы тез іріктеу әдісі
- •3.3. ЖИЫНДАР
- •Жиындарға қолданылатын амалдар
- •3.4 ЖАЗБАЛАР
- •Типті сипаттау
- •Сатылы жазбалар
- •Файлдық типтер және айнымалылар
- •Сыртқы файлды программамен байланыстыру
- •Файлдан оқу
- •Файлға жазу
- •Файлды толықтыру
- •Мәтіндік файлдар
- •Қолданылған әдебиеттер
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