Қайталау операторының түрлері
Қойлатын талаптар
ПАСКАЛЬ ТІЛІНІҢ НЕГІЗГІ ҚҰРЫЛЫМДЫҚ ТИПІ. МАССИВТЕР
Дәріс жоспары:
“Массив” түсінігі
Массивті сипаттау
Массивті енгізу және шығару
Векторді өңде»тән базалық алгоритмдер
Іздеу алгоритмі
Матрицаларды өңдейтін базалық алгоритмдер
Массивті сорттайтын алгоритмдер
Векторды өңдейтін базалық алгоритмдер
Массивті қолданатын бағдарлама мысалдары
Нақтылы есептерді бағдарламалау арқылы шешуде негізгі шарт болып мәліметті дұрыс негізде таңдай алу формасы ұсынылады. Әр мәліметтің типі онымен қалай жұмыс жасау керектігін анықтайды. Өңделетін ақпараттың құрылымын дұрыс құру бағдарламаның тиміді нәтиже беретіндігінің жемісі болады. Демек бағдарлама көлемі де соған балйнасты болады.
Массивтер
Скалярлы мәліметтер (қарапайым) үшін (айнымалы және тұрақты) жадының бір ұяшығын алу мінездемесі берілген. Десек те ол бірнеше байтты алып тұруы мүмкін. Сақталған мәнге талап атауы бойынша жасалады. Осы мәнді қанша рет талап етілсе сонша рет оқуға болады, бірақ жазу кезінде соңғы мән қайтарып әкелусіз жойылады. Осындай қарапайым мәліметтер оның құрылымы қарапайым болғандықтан осылай аталады (құрылуы, құрылымы): бір мәлімет – жадының бір ұяшығы.
Осындай қарапайым мәліметтермен бірге күрделі мәліметтердің бағдарламалауда кездеседі. Олардың құрылымы да құрлыуы да қарапайым мәліметке қарағанда күрделі. Күрделі мәліметтер құрылымы бірнеше жады ұяшығын алып тұрады. Күрделі мәліметтердің типінің ішінде ең көп тарағаны массив болып табылады.
Массив біртипті мәліметтерді бір құрылымға біріктіреді. Массивке біріккен мәліметтер элементтер деп аталады. Әр элементке жадының бір ұяшығы бөлінеді. Бір массивтің элементтері тізбекті түрде жадыдан орын алады. Массивтің барлық элементі массив атауынан тұрады, олардың типтері де біреу ғана болады. Элементтердің саны массив өлшемін білдіреді. Массивтің өлшемі жадындан орын алу кезінде үлкен роль атқарады. Жадыдан массив элементтері үшін орын алу керек болған жағдайда массивтің элементінің саны белгілі болуы керек. Егер жадыдан орын алу бағдарламаны орындау кезінде іске асса, онда бұл массивтің орындалу алгоритмін өзгертпейді, бірақ осындай жадыны бөлу статикалық деп аталады, және оларға сәйкес массив статикалық массив деп аталады. Осындай жадыны бөлу жиі кездеседі, демек ол кеңінен таралған болып табылады. Паскаль тіліндегі массив статикалық болып табылады.
Жадыны динамикалық бөлу бағдарламаны нағыз орындау кезінде іске асады. (оларды сәйкесінше диниамикалық массивтер деп атайды). Паскаль тілінде олармен жұмыс жасау үшін көрсеткіштер жұмыс жасайды. Енді әрі қарай статикалық массивтің жұмысын қарастырайық. Ақпаратты әр массивтің элементінен іздеу үшін оларды индекс деп аталатын мән балйныстырып тұрады. Массивтің атауы және индекс массивтің элементін білдіреді. Индекс массивтің элементініңі нақтылы орнын көрсетеді. Егер индекстің мәні ретінде наурал қатардың бір өлігі қолданылса, онда индес массивтағы элемент нөмірімен сәйкес келеді. Егер массив элементіне талап жасау үшін бір ғана индекс қолданылатын болса, онда ол бір өлшемді массив деп аталады. Оны математикадағы вектор (модель) ретінде қарастыруға болады. Егер массив элементіне талап жасау үшін екі индекс қолданылатын болса, онда массив екі өлшемді деп аталады. Оны математикадағы матрица ретінде қарастыруға болады. Бағдарламалау тілі екі индекстен көп индексті қолдануды жоққа шығара алмайды, бірақ десек те бір өлшемді немесе екі өлшемді массивтің қызметі жеткілікті болып табылады.
1 суретте А массиві берілген, ол жеті эелемнттен тұрады, оның әрқайсысы бүтін сан. Бұл жерде индекстің үш нұсқасы келтірілген: -3 тен 3 ке дейінгі бүтін сан, 1 ден 7- ге дейінгі натурал сан, а дан g ға дейінгі символ.
Элемент нөмірі
|
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
М А С С И В
|
А:
|
-7
|
13
|
2
|
-40
|
52
|
2
|
-3
|
Индекстер:
|
1)
|
-3
|
-2
|
-1
|
0
|
1
|
2
|
3
|
|
2)
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
|
3)
|
a
|
B
|
c
|
D
|
e
|
f
|
g
|
Сурет 1. Бір өлшемді массив және оның мүмкін болатын
индекс мәндері
Массивтің құрылымы күнделікті өмірде қалай қолданылатыны барлығымызға белгілі. Мысалы массивтің мысалы ретінде ұшақтағы жолаушылар санын, топтағы студенттер санын және т.б. Осы топтардың барылығының бір атауы бар. Топтың әр мүшесіне талап жасау үшін оның реттік нөмірін жалпы тізімде көрсетіп қоюға болады. Кітап те массив бола алады. Ол беттерден, оның нөмірі болады. Әр бетке нөмірі арқылы талап жасалады.
Массивті біріктірудің қолайлығы сол, оған операцияны қолдану кезхінде барлығына дерлік бірдей шақыра салуға болады. Мысалы «Сенбілікке АЖ-12 тобы шығады» деген хабарландыруға осы топтың барлық студенті шығады. Осындай хабарламаны АЖ-12 тобының студенттірінің тізімін оқып жатқанша жеңіл болады.
Индексті қолдану массивтің элементімен тікелей жұмыс жасау үшін қажет болады. Тікелей мүмкіндік дегеніміз, ол i-нші элементке талап жасау деген сөз, Ол үшін алдыңғы және артқы элементті қарастыру қажеті жоқ. Индекстің мәні болып өрнек табылады, ол массивті бағдарламалау құралының ең мықтысына айналдырады.
Массивті сипаттау
Массив – жадыда тізбектей орналасқан және атауы бар жүйелі түрдегі құрылым.
Массив – компоненттерінің саны бірдей типтен тұратын мәліметтердің құрылымыдық типі.
Массивтер әдетте үздікті (дискертті) сандар тізбегімен жұмыс жасау үшін қолданылады (оларды векторлар немесе матрицалар деп атайды). Массивті хабарлау кезінде келесі екі талапты қатаң сақтау керек:
Егер диапазон сандық болса, ол Word типінен аспауы керек;
Массив компонентінің саны компонент өлшемі 65520 байттап аспауы керек (64 Кбайт). Осы талап Паскаль тіліндегі мәліметтер типінің құрылымына қатысты.
Массивті хабарлау үшін тілдің арнайы конструкциясы қолданылады. Ол келесі түрде жазылады:
Var <Массив атауы >:
array [<Индекстің бастапқы мәні > ..
<Индекстің соңғы мәні >] of <Массив элементінің типі >;
Var a: array [1..10] of Real;
Осылай жадыда 10 нақты саннан тұратын бір өлшемді массив сақталады.
Массивті хабарлау мысалдары:
1).{10 Real типті векторды хабарлау }
const N = 10;
var a: Array [ 1 .. N ] of Real;
2). (* осындай хабарлау өте ыңғайлы *)
const N = 10;
Type Vector = Array [ 1 .. N ] of Real;
var a: Vector;
b: Array [1..n] of Real;
c,d: Vector;
Паскаль тілінің трансляторы бойынша a және b әртүрлі, ал c және d бірдей және топтық меншіктеуді орындай алады: (операцилар).
3). Const nmax = 10;
nmin = -2;
Type Vector = Array [ nmin .. nmax ] of Real;
{ 13 элемент }
VectorChar = array [‘a’..’z’] of char; { 26 элемент }
var a: Vector;
b: VectorChar;
Switch : Array [ Boolean ] of Byte;
Үшінші мысалдан көрініп тұрғандай массивтің индекс диапазоны 1 мен N арасындғы аралықта болуы мүмкін. Индекс ретінде кез-келген реттелген типті қолдануға болады.
Бір өлшемді массивтердің компоненттері скалярлы болып табылады. Массив ішіндегі массивті сипаттауға рұқсат етілген (матрицалар).
const N = 5;
M = 6;
Type Matrix = array [ 1 .. N , 1 .. M] of Real;
Type Matr_Sqr = array [ 1..N, 1..N] of Real;
var a: Matrix; {матрица n x m}
b : Matr_Sqr; {квадратдық матрица}
Екі өлшемді матрицаны сипаттау төмендегәдей көрсетіледі:
const n = 5; m = 6; {матрицаны n x m өлшемімен хабарлау}
Type Vector = array [1..m] of Real;
Matrix = array [1..n] of Vector;
var a: Vector;
b: Matrix; Компьютер жадысындағы матрицаның орналасуы
…
1жол ( m элемент) 2 жол (m элемент)
aij – матрицаның i-нші жолының j-нші элементі
Матрицаны сипаттаудың бірінші варианты көрнекі, ол әрі матрицаның өлшемін білдіреді.
Ескерту: Массивті сипаттау кезінде тұрақтылар бөілімін қолдану дұпрыс болады.
Типтер мысалы:
const n=12;
type vector = array [1..n] of real;
matrix1 = array [1..n] of array [1..n] of boolean;
matrix2 = array [1..3,1..6] of integer;
mas2 = array [1..2*n] of vector;
days = (mon, tue, wed, thu, fri, sat, san);
var a : vector;
b : array [-7..12] of char;
c : matrix1;
d : matrix2;
e,f : mas2;
g,h : array [mon..fri] of string;
Типтерді сипаттау бөлімінде келесі мәліметтер типі көрсетілген:
- бір өлшемді массив vector, ол n (12) элементтен тұрады, типі real;
- екі өлшемді массив matrix1, ол n·n (144) логикалық элементінен тұрады және n жолы және n бағаны бар;
- екі өлшемді массив matrix2, ол 18 элементтен тұрады және бүтін типті оның 3 жолы 6 бағаны бар;
- бір өлшемді массив mas2, ол 2·n (24) элементінен тұрады, типі vector, осы массивті екі өлшемді массив ретінде қарастыруға болады әр элементтің типі real (барлығы 288 элемент);
- анықталған типі days ол апатаның анықталған күндерінен тұрады.
Көңіл аударатын жағдай ол массивтің өлшемін берудің орнына тұрақты n сипатталған, ол 12-ге тең. Осындай қарапайым мүмкіндік массивтің элементінің санын өзгертуде тек бағдарламада бір ғана жерде өзгертуді талап етеді. Қалған жерде тұрақтының атауы сақталады.
Айнымалыны сипаттау бөлімінде келесі айнымалылар сипатталған: а массиві оның типі vector; b бір өлшемді массиві, 12-(- 7)+1=20 элементтен тұратын char типті; с массиві, оның типі matrix1; d массиві, оның типі matrix2;
Папскаль тіліндегі массив статикалық болғандықтан оның элементтерінің саны трансляциялау кезінде белгілі болуы керек. Егер динамикалық массивті қолдану керек болса, онда массивтің мүмкін болатын маскимальды мәнімен толтыру керек.
Бағдарлама мәтінінде массивтің нақты элементіне талап жасау үшін оған нақты атауды беру керек, сосын үтір арқылы квадраттық жақшада элемент индексін беру керек. Осы жерде индекстер типке сәйкес өрнекпен берілген болуы керек.
b массивінің элементіне b[-3], b[0], b[10] деп талап жасау керек. b[i] деп жасалған талап дұрыс болады, егер i мәні -7 ден 12-ге дейін өзгерген жағдайда.
d массивінің элементіне d[i,j] деп талап жасау керек. Мұндағы бірінші индекс жолдың нөмірін көрсетеді, екінші – бағанды көрсетеді. Бірінші индекс 1 ден 3-ке дейін, ал екінші 1 ден 6-ға дейін өзгере алады.
Паскаль тіліндегі бір типті массивке меншіктеу операциясын қолдануға болады. Сондықтан массивтің бірінші элементі бірінші элементке меншіктеледі, екінші екіншіге, үшінші үшіншіге және т.б. Массивтер бір типті болып саналады.
Массивке қолданылатын операциялар элемент бойыфнша орындалады.
Массивті енгізу және шығару
Массивті енгізуді әртүрлі қолдануға болады: бір өлшемді массив үшін (вектор) – жол және баған арқылы; ал екі өлшемді массив үшін (матрица) – жол және баған бойынша енгізуге болады.
{Баған бойынша векторды енгізу }
for i = 1 to n do RealLn(a[i]); { Болады бірақ қажет емес! }
{ Енгізуді негізі былай жасаған дұрыс болады: }
WriteLn(‘Вектордың элементін енгізіңіз:’);
for i := 1 to n do begin
Write(‘a[‘, i, ’] = ’);
ReadLn( a[i] );
end;
{ Векторды шығару: }
Writeln(‘Нәтижелі вектор: ’);
for i := 1 to n do Write(a[i], ‘_‘);
WriteLn;
{Жол бойынша матрицаны енгізу }
for i = 1 to n do Begin
for j := 1 to m do
Real(a[i,j]);
ReadLn;
End;
{ Матрицаны енгізу үшін мынаны қолданған дұрыс болады: }
WriteLn(‘Матрицаның элементін енгізіңіз:’);
for i := 1 to n do begin
WriteLn( ‘Матрицаның i-нші жолының элементін енгізіңіз’);
for j := 1 to m do Begin
Write( ‘a[‘, i, ‘,’ , j,’] = ’);
ReadLn(a[i,j]);
End;
End;
{Матрицаны жол бойынша енгізу }
Writeln(‘Нәтижелі матрица’);
for i := 1 to n do begin
for j := 1 to m do Write(a[i,j], ‘_‘);
WriteLn;
end;
Векторды өңдеудің базалық алгоритмі
Сипаттау бөлімі
var a: array [1..n] of ;
min, max : ;
Number : Byte;
1). Массив элементтерінің қосындысы:
1 вариант
S:=0;
For i:=1 to n do S:=S+a[i];
2 вариант
S:=a[1];
For i:=2 to n do S:=S+a[i];
2). Жұп сандардың қосындысын табу керек:
p:=1;
for i:=1 to n do
if a[i] mod 2=0 then p:=pa[i];
3). Массивтің минимальды элементін табу керек:
min:=a[i];
for i:=2 to n do
if a[i]
4). Минимальды элементті және оның нөмірін табу керек:
{1 вариант}
min:=a[1]; number:=1;
for i:=2 to n do
if a[i]
min:=a[i];
number:=i;
end;
write(min,’ ’,number);
{2 вариант}
number:=1;
for i:=2 to n do
if a[i]
write(a[number],number);
Іздеу алгоритмі
1). Берілген элементті реттелмеген массивтен табу керек:
i:=1;
while (i<=n) and (a[i]<>x) do inc(i);
if n>i then
write(‘Ондай элемен жоқ)
else
write(‘Ол элемент осындай нөмірлі’ ,i);
i := 0;
Repeat
inc(i);
Until (i >n) or (a[i] = x);
if i > n then
write(‘Осындай элемент жоқ’)
else
write(‘Ол элемент осындай нөмірлі’ ,i);
Алгоритм келесі қателіктен тұрады: массивтің шекарасынан шығып кету.
i := 1;
While a[i] <> x do
inc(i);
i := 1;
While (a[i] <> x) and (i <= n) do
inc(i);
Бағдарламаны орындау кезінде жасырын қателіктер шығуы мүмкін (оны циклдың ішінде өзгерту ұсынылмайды).
k := 0;
for i := 1 to n do
if a[i] = x then begin
k := i;
i := n; { <— Мүмкін қате }
end;
2). Массивтен жұп максимальды элементті табу керек:
i:=1; {Вектор элементінің бірінші жұп элементін іздеу }
while (i<=n) and (a[i] mod 2=1) do inc(i);
if i>n then write(‘Жұп элементтер жоқ’)
Else begin {жұп элемент табылды}
max:=a[i];
for k:=i+1 to n do
if (a[k] mod 2=0) and (a[k]>max) then max:=a[k];
Write(‘max=’, max);
end;
3). Соңғы теріс элементті іздеу алгоритмі.
Дұрыс және тиімді алгоритм.
i := n+1;
repeat
dec(i);
until (i < 1) or (a[i] <0);
Дұрыс бірақ тиімсіз алгоритм.
k := 0;
for i := 1 to n do
if a[i] = x then k := i;
4). Векторды инвертирлау.
Басқа векторға
For i : = 1 to n-1 Do
B[n-i+1] : = a[ i ];
Өз өзіне
For j : = 1 to n div 2 Do begin
v := a[i];
a[i] := a[n-i+1];
a[n-i+1] := v;
end;
Матрицаны өңдеу үшін базалық алгоритмдер
1). Матрицаның элементтерінің қосындысы.
S := 0;
for i := 1 to n do
for j := 1 to m do
S := S + a[i,j];
2). Негізгі диогональ бойынша массив элменеттерінің қосындысы (диагональ есептелу керек).
S := 0;
for i := 1 to n do
for j := 1 to i do
S := S + a[i,j];
3). Негізгі диогональ бойынша массив элементтерінің қосындысы (диагональ есептеледі).
S := 0;
for i := 1 to n do
for j := i to n do
S := S + a[i,j];
4). Жанама диогональ үстіндегі қосынды.
S := 0;
for i := 1 to n do
for j := 1 to n-i+1 do
S := S + a[i,j];
5). Жанама диогональ астындағы қосынды.
S := 0;
for i := 1 to n do
for j := n-i+1 to n do
S := S + a[i,j];
6). Негізгі және жанама диогональ үстіндегі элементтер қосындысы.
S := 0;
for i := 1 to (n+1) div 2 do
for j := 1 to n-i+1 do
S := S + a[i,j];
7). Негізгі және жанама диогональ астындағы элементтер қосындысы.
S := 0;
for i := n div 2 +1 to n do
for j := n-j+1 to i do
S := S + a[i,j];
8). Негізгі және жанама диогональдың сол жағындағы үстінгі элементтер қосындысы.
S := 0;
for i := 1 to (n+1) div 2 do
for j := 1 to n-i+1 do
S := S + a[i,j];
9). Негізгі және жанама диогональдың оң жағындағы үстінгі элементтер қосындысы.
S := 0;
for i := n div 2 +1 to n do
for j := n-j+1 to i do
S := S + a[i,j];
10). Негізгі диогональ элементтерінің қосындысы.
S := 0;
for i := 1 to n do S := S + a[i,i];
11). Жанама диогональ элементтерінің қосындысы.
S := 0;
for i := 1 to n do S := S + a[i,n-i+1];
12). Матрицаны транспонирлау.
var a: array [1..n,1..m] of ; {T – берілген тип}
b: array [1..m,1..n] of ;
...
Begin
for i := 1 to n do
for j := 1 to m do
b[i,j] := a[j,i];
End.
13). Өз өзінен матрицаны транспонирлау (бас диогональға қарағанда).
var a: array [1..n,1..n] of ;
V: ;
...
Begin
for i := 2 to n do
for j := 1 to i-1 do begin
V := a[j,i];
a[j,i] := a[i,j];
a[i,j] := V;
end;
14). Матрицаны көбейту ( A(n x m) x B(m x l) = C(n x l))
For i:=1 to n do
For j:=1 to m do begin
c[i,j]:=0;
For k:=1 to l do c[i,j]:=c[i,j]+a[i,k]b[k,j]
End;
15). Матрицада k және l жолдарын ауыстыру:
Const n_max=10; m_max:=15;
Type
Matrix=array[1..n_max,1..m_max] of Real;
Var A, B, C: Matrix;
R: real; i, n, k,l : Byte;
|
Const n_max=10; m_max:=15;
Type vector=array[1.n_max] of Real;
Matrix=array[1..m_max] of vector;
Var A, B, C: Matrix;
R: Vector; k, l :Byte;
|
Begin
For i:=1 to n do Begin
R:=a[k,i]; a[k,i]:=a[l,i]; a[l,i]:=R;
End;
End.
|
Begin
R:=a[k];
a[k]:=a[l];
a[l]:=R;
End.
|
Ескерту: Массивті сипаттау алгоритмді орындауға ерекше әсер етеді.
Массивті сорттау алгоритмі
Массивті әртүрлі сипаттамаларына байланысты реттецге болады (өсуі, кемуі бойынша және т.б.) Осы үшін сорттау алгоритмі қолданылады. Ол массив элементтерінің орынын ауыстырады. Ол сорттауды ұйымдастыру шарытна байланысты болады.
1). Разряд бойынша ауыстыра отырып сорттау (сортировка “пузырьком”).
Вектор үшін n элементі (n-1) бөлінеді, ол әр көру кезінде элементті жұбы бойынша салыстырады, егер алдыңғы элемент үлкен болған жағдайда оларды орнымен ауыстырады. Әр осындай көру арқылы кезектегі үлкен элемент өз орнына барып тұрады. (Осыны өсуі бойынша орналасу деп атайды).
{Негізгі алгоритм }
For k:=1 to n-1 do
For i:=1 to n-k do
If a[i]>a[i+1] then begin
R:=a[i];
a[i]:=a[i+1];
a[i+1]:=R;
end;
{Модифицирланған алгоритм}
k:=1;
Repeat
Flag :=False;
For i:=1 to n-k do
If a[i]>a[i+1] then begin
R:=a[i]; a[i]:=a[i+1]; a[i+1]:=R;Flag:=True
end; Inc(k);
Until Not Flag Or (k=n)
Таңдау арқылы сорттау
Массив элементініңі ішінен минимальды элемент табылады, оны біріншімен ауыстырады. Арасында қалған элементтер өздерінің ішінен минимальды элементті іздеп тауыс бірінші элементтен кейін орналастырады. Осылай процесс массив элементінің индексіне дейін жалғасып, аяқталады.
For i:=1 to n-1 do Begin
min:=i;
for j:=i+1 to n do
if a[j]
r:=a[min]; a[min]:=a[i]; a[i]:=r;
End;
Матрица және векторды өңдеудің біріккен алгоритмі
1). А(n x m) матрицасынан векторды алу керек, оның элементті матрица жолының элементтерінің қосындысына тең:
For i:=1 to n do Begin
S:=0;
For i:=1 to m do S:=S+a[i,j];
b[i]:=S;
End.
2). А(n x m) матрицасынан векторды алу керек, оның минимальды элементі матрицаның жолына сәйкенс келуі керек:
For i:=1 to n do Begin
min:=a[i,1];
For j:=2 to m do
If a[i,j]
b[i]:=min;
End.
Бекіту сұрақтары:
Массивтің бағдарламалауда қолданылуы
Массивке қойлатын талаптар
Массивтің жалпы форматы
МӘЛІМЕТТЕРДІҢ ЖОЛДЫҚ ТИПІ (string)
Дәріс жоспары:
Жолдық айнымалыны сипаттау.
Жолға қолданылатын операциялар: Операции выполняемые над строками: тіркелу (конкатенация), салыстыру.
Жолмен жұмыс жасайтын функциялар.
Жолды өңдейтін процедуралар.
Осы типтің мәні болып әртүүрлі ұзындықтағы симводлдардың тізбегі табылады. Бұл жерде компьютердегі код кестесі бар кез-келген символ қолданылуы мүмкін. Әр жол өзінің ағымдағы ұзындығын сипаттайды. Үнсіздік бойынша жол үшін максимальды ұзындық анықталған, ол 255 символға тең, бірақ оны өзгертуге болады, оны сипаттау кезінде string[сан] деп жазуға болады. Егер жол ұзындығы максимальды ұзындықтан ұзын болса, онда сыймаған симаолдар алынып тасталады.
Жоғарыда аталғандардан осы типтің скалярлы еместігін байқауға болады. Демек, мәлімет екі бірлікпен анықталады: тұрақтиы ішінде ұзындықпен және символдың орналасуымен. Сондықтан символдардың тізбектелуі қарапайым құрылымнан тұрмайды, әр символ үшін жолда сол жақтағы және оң жақтағы көршіні көрсетуге болады. (егер олар боған жағдайда). Осы типтің мәні лексикографикалық ретте реттелген ол кодтық кестеге сәйкес.
Жолдың компьютер жадысында орналасуы екі тәсілмен жүруі мүмкін. Алғашқы тәсілде жолдың ұзындығы сақталған алдыңғы элемент көрсетіледі. Мысалы,
'ЖАДРА' немесе '' (бос жол).
Екінші тәсіл бойынша жолдың аяқталғанын білдіретін арнайы белгіні сұрайды. Мысалы,
'ЖАДРА немесе '' (бос жол).
Жолдық тұрақтылар апострофпен жазылады. Мысалы:
'мәтін', осы тұрақтының ұзындығы 5 символдан тұрады;
'Тьюринг машинасы', осы тұрақтының ұзындығы 15 символдан тұрады;
'', осы тұрақтының ұзындығы 0 символдан тұрады (бос жол).
Жолдық айнымалылар бөлімінде var – да string: типімен жазылады.
var айнымалы_тізімі: string;
немесе
var айнымалы_тізімі:string[санның максималды ұзындығы];.
Мысалы, айнымалы var a: string[3]; осылай сипатталсын. Онда меншіктеу кезінде а әртүрлі тұрақтыны алу арқылы компьютер жадысынан келесі түрде орны алады:
Жолға тіркелу операциясы қолданылады (конкатенация), осы операцияның көмегімен екі немесе одан да көп жолдарды біріктіруге болады. Мысалы 'Сту'+'дент'+'тер' жолы 'Студенттер' деген жолды алуға көмектеседі.
Жолға сонымен қатар салыстыру оперциялары қолданылады: =, <, <=, >, >=, <>. Жолдар символды түрде солдан оңға қарай алғашқы нәтижеге жеткенге дейін салыстырылады немесе жолдан символды аяқтағанға дейін тексереді. Символдар char типті болған жағдайда ғана салыстырылады.
Мысалы, 'оқушы'<'оқытушы' Салыстыру нәтижесі “ақиқат” (true), демек т.к. 'о'='о', 'қ'='қ', 'у'='ы', ('у' символы 'ы' символына қарағанда кодтау кестесінде бірінші тұр).
'Кітап'='Кітап', демек, символдық барлық элементтері сәйкес келеді. Жол үшін операциялардан басқа стандартты функция және процедура қолданылады.
Функциялар
ТІРКЕЛУ - CONCAT(жол1,жол2,...). Бұл біркелу операциясы.
Мысал1. Бастапқы мәлімет: a = 'сту', b = 'тер'.
Оператор: s := concat('дент',a,b).
Нәтиже: S = 'студенттер'.
КӨШІРУ – СОРУ(жол, сан1, сан2). Көрсетілген жолдан жол асты белгіленіп алынады, ол 1 санмен басталып, 2 санмен аяқаталады.
Мысал2. Бастапқы мәлімет: S='студенттер'.
Оператор: b:=cору(S,2,3).
Нәтиже: b = 'туде'.
ПОЗИЦИЯ – POS(жол1, жол2). 1 жолдың кездесуін 2 жолдан іздеу және бастапқы позицияның нөмірін қайтара отырып тапқан жағдайда нөлге ауыстыру керек болады. Егер 1 жол 2 жолға кірмеген жағдайда осы орындалады. .
Мысал 3. Исходные данные: S = 'крокодил'.
Оператор: i := pos('тер',S).
Нәтиже: i = 3.
Оператор: i := pos('о','студенттер').
Нәтиже: i = 0.
ҰЗЫНДЫҚ - LENGTH(жол). Жолдың аргументінің ұзындығын қайтарады.
Мысал 4. Бастапқы мәлімет: S = 'студенттер'.
Оператор: j := length(S).
Нәтиже: j = 8.
Процедуралар
ҚОЮ – INSERT(1жол, 2жол, сан). 1 жолға 2 жолды қояды. Ол берілген санның позициясынан бастайды. Егер нәтижеде максимальды мәннен үлкен мән болса, онда оң жақтан алынып тасталады.
Мысал 5. Бастапқы мәлімет: S = 'студенттер'.
Оператор: d := сору(S,3,3).
Нәтиже: d = 'уде'.
Оператор: insert('Р', d, 3).
Нәтиже: d = 'удре'.
ЖОЮ – DELETE(жол, 1сан, 2сан). 1 санымен берілген позициядан бастап жолдың ішіндегі жолды алып тастайды. Егер 1 саны жолдың ұзындығынан ұзын болса, онда жол асындағы жол жойылмайды. Егер 2 саны бар саннан үлкен болса, онда жол символдарының барлығы жойлады.
Мысал 6. Бастапқы мәлімет: S = 'крокодил'.
Оператор: delete(S,4,3).
Нәтиже: = 'кроил'.
Оператор: delete(S, 1, 1).
Нәтиже: S = 'роил'.
ТҮРЛЕНДІРУ санды жолға түрлендіру - STR(сан[:M[:N]], жол). Санды жолға түрлендіреді. M барлық символдардың жалпы санын береді, N – нақты тип сандары үшін (real типі) санды бөлшек түрінде көрсетеді.
Мысал 7. str(123,S).
Нәтиже: S = '123'.
ТҮРЛЕНДІРУ жолды санға түрлендіреді , - VAL(жол, сан, код). Жолды санға ауыстырады. Код дұрыс емес символдың нөміріне ауысрытады немесе дұрыс болған жағдайда 0-ге теңестіреді.
Мысал 8. val('+12.3',V,K).
Нәтиже: V = 12.3, K = 0 {түрлендіру дұрыс жүрді }.
val('23+5',v,k).
Нәтиже: v = анықталмаған. k = 3 {үшінші символды түрленіду кезіндегі қате}.
Мысал 9. S жолында берілген дауысты дыбыстың кезедесетіндігін тексеру
керек.
Шешімі. pos(S,'аэоуыяеёюи')>0.
Мысал 10. S жолында берілген дауыссыз дыбыстың кезедесетіндігін тексеру
керек.
Шешімі. pos(S,'аэоуыяеёюи')=0.
Мысал 11. Жолдың бөлігін бірінші пробелден кейін белгілеу керек.
Шешімі. copy(s,pos(' ',s)+1,length(s)-pos(' ',s))
Мысал 12. S жолының соңғы символын алып тастау керек.
Шешімі. delete(S,length(S),1).
Мысал 13. “оқыту” сөзінен “оқытушылар” сөзін алатын операторды жазу керек.
Нәтиже. s='оқыту', онда insert('шы',s,5).
Мысал 14. S жолынан жол асындағы жолдың i-нші және j-нші позициясымен,
қосу керек.
Нәтиже. copy(s,i,j-i+1).
Бекіту сұрақтары:
Мәліметтердің жолдық типінің қолданылуы
2. Жолдық типке қолданылатын функциялар
МӘЛІМЕТТІҢ КОМБИНИРЛАНҒАН ТИПІ - жазба
Дәріс жоспары:
Жазба типінің анықтамасы.
Жазба өрісі. Жазба өрісіне талап жасау.
Қосу операторы.
Жазбадан тұратын массивтер
Құжатты құру кезінде кез-келген құрылымға жататын әртүрлі типті топтасыруға болады. Ол үшін Паскаль тілінде комбинирланған тип қолданылады. Әдетте осы типті жазба деп атайды. Жазбаларды бір блокқа мәліметтердің элементтерін логикалы түрде біріктіретін жағдайда қолдануға болады.
Жазба - әртүрлі типтің компоненттерінен тұратын мәліметтердің құрылымдық типі. Жазба типінің анықтамасы Record идентификаторымен басталады және End қызметші сөзімен аяқталады. Олардың арасында өріс деп аталатын компоненттерден тұрады.
Форматы:
Type<Тип атауы = Record
<өріс идентификаторы: <өріс типі;
< өріс идентификаторы: < өріс типі;
. . .
< өріс идентификаторы: < өріс типі
End;
Var
<идентификатор, ... : <типтің атауы;
Жазба өрісіне мүмкіндікті жазба типінің айнымалысы ретінде сипаттауға болады (жазба типінің идентификаторы).
Мысал:
Type
Mash = Record
Nomer: integer;
Marka: string[20];
FIO: string[40];
Adres: string[60]
End;
Var
M, V: Mash;
Mash жазбасы төрт компоненттен тұрады: нөмер, марка атауы, Иегердің аты жөні, оның мекен жайы. Жазба өрісіне мүмкіндік Mash типінің M, V айнымалылары арқылы жасалады.
Жазба өрісінің мәніне талап жасау айнымалы индентификаторының көмегімен жасалады және өріс идентификаторының көмегімен жасалады. Осы комбинация құрамды атау болып аталады. Мысалы, Mash жазбасының өрісіне мүмкіндік алу үшін M.Nomer, M.Marka, M.FIO, M.Adres, V.Nomer, V.Marka, V.FIO, V.Adres атауларын жазу керек. Құрамды атауларды өріс типінің айнымалысы мүмкіндік жасайтын кез-келген жерде қолдануға болады.
Жазба өрісін меншіктеу үшін қосу операторы қолданылады.
Мысалы,
M.Nomer:=3061;
M.Marka:='ГАЗ-24-10';
M.FIO:='Кошкаралиев Д.';
M.Adres:='Ермекова 26, 10 пәтер';
Құрамды атауларды енгізу-шығару операторында қолдануға болады.
Мысалы,
Readln(M.Nomer, M.Marka, M.FIO, M.Adres);
Writeln(M.Nomer:4, M.Marka:9, M.FIO:12, M.Adres:25);
Readln(V.Nomer, V.Marka, V.FIO, V.Adres);
Writeln(V.Nomer:4, V.Marka:9, V.FIO:12, V.Adres:25);
Меншіктеу операторы жазбаға толығымен қолданылады. Мысалы: V:=M; Осы операторды орындап болғаннан кейін жазба өрісінің мәні V жазба өрісінің мәні M тең болады.
Жазбадан тұратын массивтер
Тапсырмаларды көп жағдайда шешу кезінде жазбадан тұратын массивті қолдану өте ыңғайлы болады.Оларды келесі түрде сипаттауға болады:
Type
Person = Record
FIO: string[20];
Age: 0..90;
Prof: string[30]
End;
Var
List: array[1..25] of Person;
S1: Person;
Жазба өрісіне мүмкндік жасау үшін жазба айнымалы типі S арқылы жасалып, түрі келесі түрде болады: S1.FIO; S1.Age; S1.Prof. Жазба массиві List 0 25 элементтен тұрады, осы массивтің элементі FIO, Age, Prof жазбасына сәйкес келеді.
Паскаль тілінде жазбаның біріне бірінің кіруі ұсынылады, демек, мәліметтердің өрісі сол жазбада жазылады. Мысалы студенттің анкеталық мәліметі была жазылады:
Type
Student = Record
FIO: string[20];
YROG: record
Day: 1..31;
Month: 1..12;
Year: integer
end
End;
Var
SS: Student;
Group: array[1..25] of Student;
Жазбаның әр компонентіне келесі түрде талап жасауға болады: SS.FIO:='Кошкаралиев Д. '; {бірінші өріс }
Екінші өріс өз кезегінде жазба типінен тұрады жәгн ол үш өрістен тұрады. Осы өрістерге мүмкіндік құрамды атау бойынша жасалады SS.YROG.Day := 9; SS.YROG.Manth:= 3; SS.YROG.Year := 1974;
Қосу операторы
Келтірілген операторларды меншіктеу арқылы нақтылы түрде жазуға болады. Оларды қосу операторы деп атайды. Оның жалпы түрі:
With <жазба типінің айнымалысы do <опеpатоp;
Жазба типінің айнымалысын бір рет көрсету арқылы With операторында өріс атауымен жұмыс жасауға болады. Ол әдеттегі айнымалы ретінде жұмыс жасайды. Демек өріс атауының идентификаторының айнымалысыз жазба жазылмайды. Мысалы: Mash жазба өрісін With операторы арқылы қосу керек:
With M do
begin
Nomer:=3061;
Marka:='Газ 24-10';
FIO:='Кошкаралиев Д. ';
Adres:='Ермекова 26 10-пәтер';
end;
Бекіту сұрақтары:
Мәліметтің жазба типі
Жазбаның жалпы форматы
Жазбаның комбинирланған түрі
МӘЛІМЕТТЕРДІҢ ФАЙЛДЫҚ ТИПІ
Дәріс жоспары
Файлды сипаттау
Тізбектей және тікелей кіру файлдары
Файлдарға кіру
Файлдармен жұмыс жасау үшін қолданылатын стандартты процедуралар мен функциялар
Достарыңызбен бөлісу: |