§3.13. Regular turlar
Regular tur hosilaviy turlar sinfiga tegishli, ya’ni uning qiymatlar to‘plami sodda bo‘lmagan ma’lumotlar strukturasidan iborat. Jadval kattalik tushunchasini kiritamiz. Jadval kattalik - bu cheklangan miqdordagi ba’zi bir qiymatlarning (jadval kattalik elementilarining) tartiblangan to‘plamiga aytiladi. Barcha elementlar bir xil turga tegishli bo‘lib, ular elementning turi (jadval kattalik uchun asos tur) deb nomlanadi.
Har bir jadval kattalikning nomi bo‘lishi kerak, bu nom to‘liq o‘zgaruvchi deb nomlanadi, chunki uning qiymati jadval kattalikning o‘zidan iborat. Jadval kattalikning har bir elementi uning nomini ko‘rsatish orqali e’lon qilingan bo‘lishi, undan keyin kvadrat qavsga olingan indeks - elementning selektori kelishi mumkin.
Shunday qilib, alohida elementga murojaat qilish uchun quyidagi yozuv ishlatiladi
[]
va bu o‘zgaruvchiga indeksli o‘zgaruvchi deyiladi. Umuman olganda indeks sifatida ifoda ham ishlatilishi mumkin. Indeksli ifodaning turi indeksning turi deb nomlanadi. Indeksli turning qiymatlar to‘plami tartiblangan bo‘lishi kerak.
Regular turni e’lon qilishda indeksning turini e’lon qilishdan tashqari elementning turini ham e’lon qilish kerak:
:: = array [] of ;
Paskal tilida to‘liq o‘zgaruvchiga faqat qiymat berish amalini qo‘llashga ruxsat etilgan, indeksli o‘zgaruvchiga esa uchun o‘rinli barcha amallarni qo‘llash mumkin.
Paskal tilida elementlar turiga xech qanday chegara qo‘yilmagani sababli element sifatida regulyar turning o‘zi ham qatnashishi mumkin. Shu yo‘l bilan ko‘p o‘lchovli jadval kattalik hosil qilish mumkin. Jumladan, ikki o‘lchovli jadval kattalik uchun quyidagi ikki xil e’lon qilishni ishlatish mumkin:
array[,] of
array[] of array[] of
Xususiy o‘zgaruvchi ikki o‘lchovli jadval kattalik bo‘lgan holda quyidagi ko‘rinishda bo‘ladi:
[,]
[][]
Quyida jadval kattalik turidagi o‘zgaruvchilarni e’lon qilish va ularga murojaatga doir misollar keltirilgan.
1) m: array [1...100] of real;
{m - 1 dan 100 gacha nomerlangan haqiqiy sonlar jadval kattaligi }
2) v: array [5..20] of integer;
{ v - 5 dan 20 gacha nomerlangan butun sonlar jadval kattaligi }
3) z: array[1..10,1..10] of string[20];
{z - ikki o‘lchovli satrlar jadval kattaligi (matritsa)}
programmada konkret jadval kattalik elementlarini ifodalash uchun jadval kattalik nomidan so‘ng kvadrat qavs ichida element nomeri ko‘rsatiladi. Masalan:
1) m[7] : = 4.35; { m jadval kattalikining yettinchi elementiga 4.35 son qiymati berildi }
2) z[8,6] : = 'arab'; {z-matritsasining 8 satr 6 ustun kesishuvi elementiga 'arab' satri o‘zlashtiriladi}
3) m[9] : = v[7]; {m jadval kattalikining to‘qqizinchi elementiga s
jadval kattalikning yettinchi elementi o‘zlashtiriladi}.
Regular turning sintaksisi quyidagicha yoziladi:
< regular turning berilishi>::=type= array[indeks turi] of ;
< indeks turi>::charbooleansanab o‘tiluvchi turchegaralangan tur.
< element turi>::
Bir va ikki o‘lchovli massivlarni quyidagi tasvirlash ham mumkin:
Var : array [] of ;
< massiv nomi >: array [< satrlar diapazoni >,< ustunlar diapazoni >] of
Massivlardan foydalanishga doir misollar keltiramiz:
1-o‘lchovli massivlarni e’lon qilish:
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; yoki
Type I11..4;
I21..3;
MAS1array[I1] of real;
MAS2array[I2] of integer;
Var A: MAS1;
B: MAS2;
2-o‘lchovli massivlarni e’lon qilish:
Var D:array[1..2,1..3] of integer; yoki
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;
Bir o‘lchovli massivlarni kiritish:
for I:1 to 4 do Read(A[I]);
yoki
for I:1 to 4 do begin
Writeln(‘A[‘,I,’]’);
Read(A[I])
end;
Ikki o‘lchovli massivlarni kiritish:
for I:1 to 2 do
for J:1 to 3 do
Read(D[I,J]); {Kiritiladigan sonlar: 1 3 2 4 6 7}
{Ikki o‘lchovli massiv}
Bir o‘lchovli massivlarni chiqarish:
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)
{satr bo‘yicha 12 34 56} {ustun bo‘yicha B[1]12 B[2]34 B[3]56}
Ikki o‘lchovli massivlarni chiqarish:
for I:1 to 2 do
for J: =1 to 3 do Write(D[I,J]);
yoki
for I: =1 to 2 do
begin Writeln; {yangi satrga o‘tish}
for J:1 to 3 do
Write(D[I,J]) {satr elementlarini chiqarish}
end; {natija: }
Turbo-Pascal 7.0 muhitida massivlarning boshlang‘ich qiymatlari quyidagi keltirilgan usulda ham kiritilishi mumkin.
Type MAS2=array [1..3] of integer;
MATR=array[1..2,1..3] of integer;
Const B:MAS2=(12,34,56);{1 ulchovli massiv: 12 34 56}
D:MATR=((1,3,2),(4,6,7)); {2 ulchovli massiv: }
Odatda matritsa elementlari operativ xotirada satr bo‘yicha joylashgan bo‘ladi. Shuning uchun matritsa elementlariga murojaatni bir o‘lchovli indeks (,IPR) kiritish yordamida osonlashtirish mumkin.
Misol: Var D: array [1..M,1..N] of integer;
u holda D[I,J] uchun IPR=(I-1)*N+J bo‘ladi.
Mustaqil bajarish uchun topshiriqlar:
Bir o‘lchovli ai massivning eng katta elementini topadigan programma tuzing.
aij - matritsaning satr elementlari yig‘indisini chop etadigan programma tuzing.
aij - matritsa satr bo‘yicha kiritilib, ustun bo‘yicha chop etilsin.
80 ta belgidan tashkil topgan satrning avval raqamlari, keyin qolgan simvollar chop etilsin. Simvollarning tartib nomeri saqlangan bo‘lishi kerak.
ai , massiv elementlarini qiymatlari bo‘yicha o‘sish tartibida joylashtirilsin.
Do'stlaringiz bilan baham: |