§ 3.13. Регуляр турлар.
Регуляр тур ҳосилавий турлар синфига тегишли, яъни унинг қийматлар тўплами содда бўлмаган берилганлар структурасидан иборат. Жадвал катталик тушунчасини киритамиз. Жадвал катталик - бу чекланган миқдордаги баъзи бир қийматларнинг (жадвал катталик элементиларининг) тартибланган тўпламига айтилади. Барча элементлар бир хил турга тегишли бўлиб, улар элементнинг тури (жадвал катталик учун асос тур) деб номланади.
Ҳар бир жадвал катталикнинг номи бўлиши керак, бу ном тўлиқ ўзгарувчи деб номланади, чунки унинг қиймати жадвал катталикнинг ўзидан иборат. Жадвал катталикнинг ҳар бир элементи унинг номини кўрсатиш орқали эълон қилинган бўлиши, ундан кейин квадрат қавсга олинган индекс - элементнинг селектори келиши мумкин.
Шундай қилиб, алоҳида элементга мурожаат қилиш учун қуйидаги ёзув ишлатилади
<жадвал катталик номи>[<индекс>]
ва бу ўзгарувчига индексли ўзгарувчи дейилади. Умуман олганда индекс сифатида ифода ҳам ишлатилиши мумкин. Индексли ифоданинг тури индекснинг тури деб номланади. Индексли турнинг қийматлар тўплами тартибланган бўлиши керак.
Регуляр турни эълон қилишда индекснинг турини эълон қилишдан ташқари элементнинг турини ҳам эълон қилиш керак:
<регуляр тур> :: = array [<индекс тури>] of <элементни тури>;
Паскал тилида тўлиқ ўзгарувчига фақат қиймат бериш амалини қўллашга рухсат этилган, индексли ўзгарувчига эса <элементни тури> учун ўринли барча амалларни қўллаш мумкин.
Паскал тилида элементлар турига хеч қандай чегара қўйилмагани сабабли элемент сифатида регуляр турнинг ўзи ҳам қатнашиши мумкин. Шу йўл билан кўп ўлчовли жадвал катталик ҳосил қилиш мумкин. Жумладан, икки ўлчовли жадвал катталик учун қуйидаги икки хил эълон қилишни ишлатиш мумкин:
array[<индекс тури>,<индекс тури>] of <элемент тури>
array[<индекс тури>] of array[<индекс тури>] of <элемент тури>
Хусусий ўзгарувчи икки ўлчовли жадвал катталик бўлган ҳолда қуйидаги кўринишда бўлади:
<жадвал катталик номи>[<индекс>,<индекс>]
<жадвал катталик номи>[<индекс>][<индекс>]
Қуйида жадвал катталик туридаги ўзгарувчиларни эълон қилиш ва уларга мурожаатга доир мисоллар келтирилган.
1) м: array [1...100] of real;
{m - 1 дан 100 гача номерланган ҳақиқий сонлар жадвал катталиги }
2) v: array [5..20] of integer;
{ v - 5 дан 20 гача номерланган бутун сонлар жадвал катталиги }
3) z: array[1..10,1..10] of string[20];
{z - икки ўлчовли сатрлар жадвал катталиги (матрица)}
программада конкрет жадвал катталик элементларини ифодалаш учун жадвал катталик номидан сўнг квадрат қавс ичида элемент номери кўрсатилади. Масалан:
1) m[7] : = 4.35; { m жадвал катталикининг еттинчи элементига 4.35 сон қиймати берилди }
2) z[8,6] : = 'араб'; {z-матрицасининг 8 сатр 6 устун кесишуви элементига 'араб' сатри ўзлаштирилади}
m[9] : = v[7]; {m жадвал катталикининг тўқкизинчи элементига с жадвал катталикнинг етинчи элементи ўзлаштирилади}.
Регуляр турнинг синтаксиси қуйидагича ёзилади:
< регуляр турнинг берилиши>::=type<тур номи>= array
[ индекс тури] of <элемент тури>;
< индекс тури>::charbooleanсанаб ўтилувчи турчегараланган тур.
< элемент тури>::<ихтиёрий тур бўлиши мумкин>
Бир ва икки ўлчовли массивларни қуйидаги тасвирлаш ҳам мумкин:
Var <массив номи>: array [<индекснинг ўзгариш чегараси>] of <элемент тури>;
< массив номи >: array [< сатрлар диапазони >,< устунлар диапазони >] of < элемент тури >
Массивлардан фойдаланишга доир мисоллар келтирамиз:
1-ўлчовли массивларни эълон қилиш:
Var A: array [1..4] of real;
B: array [1..3] of integer;
Type MAS1array[1..4] of real;
MAS2array[1..3] of integer;
Var A: MAS1;
B: MAS2; ёки
Type I11..4;
I21..3;
MAS1array[I1] of real;
MAS2array[I2] of integer;
Var A: MAS1;
B: MAS2;
2-ўлчовли массивларни эълон қилиш:
Var D:array[1..2,1..3] of integer; ёки
Type MATR=array[1..2,1..3] of integer;
Var D: MATR;
Type STarray[1..2] of integer;
MATRarray[1..3] of ST;
Var D: MATR;
Бир ўлчовли массивларни киритиш:
for I:1 to 4 do Read(A[I]);
ёки
for I:1 to 4 do begin
Writeln(‘A[‘,I,’]’);
Read(A[I])
end;
Икки ўлчовли массивларни киритиш:
for I:1 to 2 do
for J:1 to 3 do
Read(D[I,J]); {Киритиладиган сонлар: 1 3 2 4 6 7}
{Икки ўлчовли массив}
Бир ўлчовли массивларни чиқариш:
for J:1 to 3 do Write(B[J]:3);
for J:1 to 3 do Writeln(‘B[‘,J,’] =’,B[J]:3); B(12,34,56)
{сатр бўйича 12 34 56} {устун бўйича B[1]12
B[ 2] 34 B[3]56}
Бир ўлчовли массивларни чиқариш:
for I:1 to 2 do
for J: =1 to 3 do Write(D[I,J]);
ёки
for I: =1 to 2 do
begin Writeln;{янги сатрга ўтиш}
for J:1 to 3 do
Write(D[I,J]) {сатр элементларини чиқариш}
end; {натижа: 1 3 2
4 6 7 }
Turbo-Pascal 7.0 муҳитида массивларнинг бошланғич қийматлари қуйидаги келтирилган усулда ҳам киритилиши мумкин.
Type MAS2=array [1..3] of integer;
MATR=array[1..2,1..3] of integer;
Const B:MAS2=(12,34,56);{1 улчовли массив: 12 34 56}
D:MATR=((1,3,2),(4,6,7));{2 улчовли массив: 1 3 2
4 6 7}
Одатда матрица элементлари оператив хотирада сатр бўйича жойлашган бўлади. Шунинг учун матрица элементларига мурожаатни бир ўлчовли индекс (,IPR) киритиш ёрдамида осонлаштириш мумкин.
Мисол. Var D: array [1..M,1..N] of integer;
у ҳолда D[I,J] учун IPR=(I-1)*N+J бўлади.
Do'stlaringiz bilan baham: |