İkiölçülü Paskal massivləri - matrislər. Statik massiv: bəyan, doldurma, istifadə İki ölçülü massivin dairə şəklində doldurulması




Massiv (Həmçinin indeks massivi, Bəzən masa, sıra) - dərhal bir-birinin ardınca yaddaşda yerləşən, eyni tipli dəyişənlərin (məlumatların) adlandırılmış (sifariş edilmiş) dəsti indeks. Ən sadə halda massiv sabit uzunluğa malikdir və eyni tipli məlumat vahidlərini saxlayır.

indeks eyni massiv ədəddir bütöv, xüsusi massiv elementinə işarə edir.

İstifadə olunan massiv indekslərinin sayı dəyişə bilər. Bir indeksi olan massivlər çağırılır birölçülü, iki ilə - iki ölçülü və s.

Birölçülü massiv ciddi şəkildə uyğun gəlmir vektor riyaziyyatda, iki ölçülü - matris . Ən çox istifadə olunan massivlərdir bir və ya iki indekslər, daha az tez-tez - üç, hətta daha çox indekslər olduqca nadirdir.

Massiv belə təsvir edilmişdir:

Ən çox yayılmış indeks növü diapazondur, məsələn:

Yuxarıda təsvir edilmişdir massiv B, ibarət 5 elementlər və simvolik massiv R, ibarət 34 elementləri. Massiv üçün IN 5*6=30 bayt yaddaş ayrılacaq (çünki tipli dəyişənlər üçün Realönə çıxır 6 yaddaş baytı), R massivi üçün - 1*34=34 bayt yaddaş (kimi dəyişənlər üçün) Char - 1 bayt). Əsas növ massivin elementləri fayl istisna olmaqla, həm sadə, həm də strukturlaşdırılmış hər hansı bir şey ola bilər! Massiv istifadə edərək elan edilə bilər sahibi növü:

Velosiped hər hansı bir şəkildə (məsələn, şərti sıçrayışdan istifadə etməklə) təşkil edilmiş hər hansı bir təkrar icra olunan təlimat ardıcıllığı adlandırıla bilər.

Döngə gövdəsinin tək icrası adlanır iterasiya. İfadə, müəyyən edən, bir daha icra olunacaq iterasiya, və ya dövrü son çıxış şərtidir və ya döngənin sonu vəziyyəti(lakin davam etmək üçün də şərt ola bilər). Cari iterasiya nömrəsini saxlayan dəyişən çağırılır iterasiya sayğacı loop və ya sadəcə sayğac dövrü. Velosiped mütləq ehtiva etmir sayğac.

Dövrlər var:

- Velosiped sayğac ilə, burada bəzi dəyişən öz dəyərini veriləndən dəyişir ilkin qədər dəyərlər final bəziləri ilə mənalar addım, və bu dəyişənin hər bir dəyəri üçün dövrənin gövdəsi bir dəfə yerinə yetirilir. Operator tərəfindən həyata keçirilir üçün

Misal. Doldur massiv:

Və beləliklə doldura bilərsiniz iki ölçülü massiv:

- Velosiped ilkin şərtlə, başlamazdan əvvəl müəyyən edilmiş bəzi şərt doğru olduğu müddətcə yerinə yetirilir. Operator tərəfindən həyata keçirilir isə.

- Velosiped şərti ilə, burada vəziyyətin döngə gövdəsi yerinə yetirildikdən sonra yoxlanılır, yəni gövdə həmişə ən azı bir dəfə yerinə yetirilir. Paskalda bu dövrə operator tərəfindən həyata keçirilir təkrar... qədər

Əməliyyat var iterasiyanı atlayın, cari iterasiyada olduqda dövrü icra olunan döngənin gövdəsinin sonuna qədər bütün əmrləri atlamaq lazımdır. Bu halda, döngənin özü kəsilməməlidir, davam etmə və ya çıxış şərtləri adi şəkildə hesablanmalıdır. Operator tərəfindən həyata keçirilir davam et.

Əmr də tez-tez döngələrdə istifadə olunur dövründən erkən çıxış, məsələn, loop gövdəsinin icrası zamanı bir səhv aşkar edildikdə, bundan sonra döngənin sonrakı işləməsi heç bir məna kəsb etmir. Operator tərəfindən həyata keçirilir ÇIXIŞ və ya fasilə.

Gəlin əvvələ, daha doğrusu başlanğıca qayıdaq misal. Bu proqram parçasının nə etdiyini müəyyən etməliyik:

Yuxarıda göstərilənlərə əsasən, istifadə olunan iki ölçülü massivdir Aölçü matrisidir n x n. Döngə istifadə olunur sayğac ilə birdən n, yəqin ki, əvvəllər müəyyən edilmişdir.

Döngənin içərisində: dəyişən ilə indeksli ikiölçülü massivin qiymətini alır (c:=A), əvvəlcə bu . Sonra bu massiv elementinin yerinə eyni massivin, lakin indeksli elementin dəyəri daxil edilir. (A:=A) və ya nə vaxt k:=1 (A:=A). Bunlar. Birinci sətrin elementləri daxil edilir, çünki indeksdəki ilk nömrə matrisdəki sıra nömrəsinə cavabdehdir - [ i,j] və ikinci sütun nömrəsi üçün - . Və sonunda, indeksi olan elementin yerinə , massiv elementinin ilkin qiyməti daxil edilir A indeksi ilə , biz dəyişənə daxil etdik ilə (A:=c).

Döngəmizin hər iterasiyası ilə dəyər i ilə artır vahid. Gəlin addımları izləyək. Əvvəlcə bu :

с:=A A:=A A:=c

с:=A A:=A A:=c

с:=A A:=A A:=c

Belə ki n dəfə əvvəl . Bunlar. istiqamət matrisinin soldan sağa və yuxarıdan aşağı diaqonal qiyməti. VƏ Bu diaqonalın elementləri elementləri ilə dəyərləri dəyişir birinci matris drenajları(və ya k-o xətt). Deməli düzgün cavabdır seçim 3: bu alqoritm yerləri dəyişdirir diaqonal elementlər vəkci cədvəl sütunu.

Bölmələr: Kompyuter elmləri

Mövzu: İki ölçülü massivlər. Verilmiş qaydaya görə ikiölçülü massivin doldurulması.

Məqsədlər: ikiölçülü massivin elementləri ilə işləmək vərdişlərini məşq etmək, verilmiş qaydaya uyğun olaraq ikiölçülü massivləri doldurmağı öyrənmək, sətir nömrəsi ilə sütun nömrəsi arasındakı əlaqəni əldə etməyi öyrənmək; tələbələrin məntiqi təfəkkürünün inkişafı.

SİNİFİN TƏRKİBİ

1. Biliklərin yenilənməsi

Elementlərin mövqeyinin iki indekslə təsvir olunduğu massivlərə ikiölçülü deyilir. Belə massivin strukturu düzbucaqlı matrislə təmsil oluna bilər. Matrisin hər bir elementi sətir və sütun nömrəsini göstərməklə unikal şəkildə müəyyən edilir, sıra nömrəsi i, sütun nömrəsi j-dir.
n*m ölçülü A matrisini nəzərdən keçirək:

a 11 a 12 a 13 a 14
a 21 a 22 a 23 a 24
a 31 a 32 a 33 a 34

3 sətir və 4 sütunlu matrisa, sətirlərin sayı n=3, sütunların sayı m=4. Hər bir elementin iki nömrədən ibarət öz nömrəsi var - elementin yerləşdiyi sıranın nömrəsi və sütunun nömrəsi. Məsələn, a23 ikinci sətirdə və üçüncü sütunda olan elementdir.
Turbo Paskalda ikiölçülü massiv müxtəlif yollarla təsvir edilə bilər. İkiölçülü massivi təsvir etmək üçün onun elementlərinin hansı tip olduğunu və onların necə nömrələndiyini (hansı növ indeksdir) müəyyən etmək lazımdır. İki ölçülü massivi təsvir etməyin bir neçə yolu var.

Const maxN=…; (Maksimum sıra sayları)
maxM=…; (Maksimum sütun sayı)

1 yol

Tip Mas = massivi<тип элементов>; (Bir ölçülü massiv)
Tip TMas = Mas massivi; (Elementləri birölçülü massiv olan birölçülü massiv)

Metod 2

Tip TMas = massiv massivi<тип элементов>;
(Elementləri birölçülü massiv olan birölçülü massiv)

3 yol

Növ<имя типа>= massivi<тип элементов>; (İki ölçülü massiv)

İki ölçülü massivi təsvir etmək üçün üçüncü üsula üstünlük verilir.

Misal üçün:

Const N=3; M=4;
Tip TMas= tam ədəd massivi; (2 ölçülü tam ədədlər massivi)

İkiölçülü massivin formalaşması dörd yolla həyata keçirilə bilər: klaviaturadan daxiletmə, verilmiş qaydaya uyğun olaraq təsadüfi ədədlər generatoru vasitəsilə və ya fayldan istifadə etməklə.

1) Klaviatura girişindən və matris elementlərinin cərgə-sətir çıxışı üçün alqoritmdən istifadə etməklə ikiölçülü massivin formalaşdırılması.

Davamlı N=10;M=10;
Tip Tmas= tam ədəd massivi;
Var A:Tmas; i,j:tam ədəd;
Başlayın
(Matrisin elementlərinin daxil edilməsi)
i:=1 üçün N etmək
j:=1 üçün M edin
Oxu (A);
(Matrisin elementlərinin çıxışı)
i:=1-dən N-ə qədər başlayın
j:=1 üçün M edin
Yaz(A:4); (Birinci sətir çap olunur)
Yazı (Yeni sətir)
son;
Son.

2) Təsadüfi ədədlər generatoru vasitəsilə ikiölçülü massiv yaratmaq üçün proqramın fraqmenti.

Başlayın
Randomize; (Təsadüfi ədəd generatorunun işə salınması)
(Matrisin elementlərinin daxil edilməsi)
i:=1 üçün N etmək
j:=1 üçün M edin
A:=təsadüfi(45)-22;

2. Yeni materialın öyrənilməsi. Massivin qaydaya uyğun doldurulması

Müəyyən qanuna görə ikiölçülü massivi doldurmaq üçün proqramların bir neçə fraqmentini nəzərdən keçirək. Bunu etmək üçün bir doldurma qaydası əldə etməlisiniz.

1. Məsələn, n*m ölçülü A massivini aşağıdakı kimi doldurun

1 2 3 4 5 6 7 8
16 15 14 13 12 11 10 9
17 18 19 20 21 22 23 24
32 31 30 29 28 27 26 25
33 34 35 36 37 38 39 40
48 47 46 45 44 43 42 41

Massiv “ilan” prinsipinə əsasən doldurulur. Doldurma qaydası: əgər sətir nömrəsi tək ədəddirsə, onda A=(i-1)*m+j, əks halda A=i*m-j+1.

M1A proqramı;

n,m,i,j: tam ədəd;
başlamaq
readln(n,m);
i:=1-dən n-ə qədər başlayın
j üçün:=1-dən m-ə qədər
başlamaq
mod 2 = 1 olarsa
A=(i-1)*m+j
başqa
A=i*m-j+1;
yaz (A:3);
son;
yazmaq;
son;
readln;
son.

Verilmiş qaydaya uyğun olaraq başqa bir doldurma üsulu üçün proqram nümunəsi:

M1B proqramı;
var A:integer massivi;
n,m,i,j: tam ədəd;
c:tam;
başlamaq
readln(n,m);
c:=1;
i:=1 üçün n etmək
başlamaq
j üçün:=1-dən m-ə qədər
başlamaq
A:=c;
əgər (i mod 2 = 0) və (j<>m) sonra
dekabr(c)
başqa
inc(c);
yaz (A:3);
son;
c:=c+m-1;
yazmaq;
son;
readln;
son.

2. A massivini aşağıdakı prinsipə uyğun olaraq doldurun:

1 0 2 0 3 0 4
0 5 0 6 0 7 0
8 0 9 0 10 0 11
0 12 0 13 0 14 0

M2 proqramı;
var A:integer massivi;
n,m,i,j: tam ədəd;
c:tam;
başlamaq
readln(n,m);
c:=0;
i:=1 üçün n etmək
başlamaq
j üçün:=1-dən m-ə qədər
başlamaq
əgər (i-1+j) mod 2 = 0 olarsa
A:=0
başqa
başlamaq
inc(c);
A:=c;
son;
yaz (A:5);
son;
yazmaq;
son;
readln;
son.

3. A massivini aşağıdakı prinsipə uyğun olaraq doldurun:

1 12 13 24 25 36
2 11 14 23 26 35
3 10 15 22 27 34
4 9 16 21 28 33
5 8 17 20 29 32
6 7 18 19 30 31

var A:integer massivi;
n,m,i,j: tam ədəd;
c:tam;
başlamaq
readln(n,m);
c:=1;
j üçün:=1-dən m-ə qədər
başlamaq
i:=1 üçün n etmək
başlamaq
A:=c;
əgər (j mod 2 = 0) və (i<>n) sonra
dekabr(c)
başqa
inc(c);
son;
c:=c+n-1;
son;
i:=1 üçün n etmək
başlamaq
j üçün:=1-dən m-ə qədər
yaz (A:5);
yazmaq;
son;
readln;
son.

4. A massivini aşağıdakı prinsipə uyğun olaraq doldurun:

1 2 3 4 5
2 3 4 5 1
3 4 5 1 2
4 5 1 2 3
5 1 2 3 4

var i,j,m,c,d: tam ədəd;

başlamaq
c:=1;
readln(m);
j üçün:=1-dən m-ə qədər
başlamaq
i:=c;
d:=1;
təkrarlamaq
A:=d;
inc(i);
əgər mən varsam
i:=1;
inc(d);
i=c-ə qədər;
dec(c);
əgər c<= 0 then
c:=m-c;
son;
i üçün:=1-dən m-ə qədər
başlamaq
j üçün:=1-dən m-ə qədər
yaz (A:2);
yazmaq;
son;
son.

5. A massivini aşağıdakı prinsipə uyğun olaraq doldurun:

1 0 0 0 1
0 1 0 1 0
0 0 1 0 0
0 1 0 1 0
1 0 0 0 1

var m,i,j: tam ədəd;
A:tam ədədlər massivi;
başlamaq
readln(m);
i üçün:=1-dən m-ə qədər
başlamaq
j üçün:=1-dən m-ə qədər
başlamaq
(i=j) və ya (m-i+1=j) olarsa
A:=1
başqa
A:=0;
yaz (A:2);
son;
yazmaq;
son;
son.

3. Müstəqil həlli üçün problemlər

6 5 4 3 2 1
7 8 9 10 11 12
18 17 16 15 14 13
19 20 21 22 23 24
30 29 28 27 26 25
31 32 33 34 35 36

36 25 24 13 12 1
35 26 23 14 11 2
34 27 22 15 10 3
33 28 21 16 9 4
32 29 20 17 8 5
31 30 19 18 7 6

0 1 1 1 0
1 0 1 0 1
1 1 0 1 1
1 0 1 0 1
0 1 1 1 0

4) Massivi aşağıdakı prinsipə uyğun doldurun:

31 32 33 34 35 36
25 26 27 28 29 30
19 20 21 22 23 24
13 14 15 16 17 18
7 8 9 10 11 12
1 2 3 4 5 6

5) Massivi aşağıdakı prinsipə uyğun doldurun:

31 25 19 13 7 1
32 26 20 14 8 2
33 27 21 15 9 3
34 28 22 16 10 4
35 29 23 17 11 5
36 30 24 18 12 6

Ev tapşırığı:

1) Massivi aşağıdakı prinsipə uyğun doldurun:

6 7 18 19 30 31
5 8 17 20 29 32
4 9 16 21 28 33
3 10 15 22 27 34
2 11 14 23 26 35
1 12 13 24 25 36

2) Massivi aşağıdakı prinsipə uyğun doldurun:

31 32 33 34 35 36
30 29 28 27 26 25
19 20 21 22 23 24
18 17 16 15 14 13
7 8 9 10 11 12
6 5 4 3 2 1

3) Massivi aşağıdakı prinsipə uyğun doldurun:

0 1 1 1 0
1 0 1 0 1
1 1 0 1 1
1 0 1 0 1
0 1 1 1 0

Massiv bir ad altında birləşmiş eyni tipli hüceyrələr qrupu kimi təmsil olunan məlumat strukturudur. Massivlər eyni tipli böyük həcmli verilənləri emal etmək üçün istifadə olunur. Massivin adı göstəricilərdir, sizə bir az sonra deyəcəyəm. Massivin fərdi məlumat xanasına massiv elementi deyilir. Massivin elementləri istənilən növ verilənlər ola bilər. Massivlər bir və ya birdən çox ölçüyə malik ola bilər. Ölçülərin sayından asılı olaraq massivlər birölçülü massivlərə, ikiölçülü massivlərə, üçölçülü massivlərə və s. n ölçülü massivə qədər bölünür. Proqramlaşdırmada ən çox birölçülü və ikiölçülü massivlərdən istifadə olunur, ona görə də biz yalnız bu massivləri nəzərdən keçirəcəyik.

C++ dilində birölçülü massivlər

Birölçülü massiv birölçülü massivin elementlərinin sayını xarakterizə edən bir parametrə malik massivdir. Əslində, birölçülü massiv yalnız bir sıra və n sayda sütuna malik ola bilən massivdir. Birölçülü massivdəki sütunlar massivin elementləridir. Şəkil 1 tam ədədli birölçülü massivin strukturunu göstərir a. Bu massivin ölçüsü 16 xanadır.

Şəkil 1 - C++ dilində massivlər

Qeyd edək ki, birölçülü massivin maksimum indeksi a 15-dir, lakin massivin ölçüsü 16 xanadır, çünki massiv xanalarının nömrələnməsi həmişə 0-dan başlayır. Hüceyrə indeksi qeyri-mənfi tam ədəddir, onun vasitəsilə siz massivin hər bir xanasına daxil ola və onun üzərində istənilən hərəkətləri edə bilərsiniz ( hüceyrə).

//C++-da birölçülü massiv elan etmək üçün sintaksis: /*məlumat növü*/ /*birölçülü massivin adı*/; //Şəkil 1-də göstərilən birölçülü massivin elan edilməsi nümunəsi: int a;

burada, int tam ədəddir;

A birölçülü massivin adıdır;
16 bir ölçülü massivin ölçüsüdür, 16 xana.

Həmişə massivin adından dərhal sonra birölçülü massivin ölçüsünün göstərildiyi kvadrat mötərizələr olur;

//birölçülü massivləri elan etməyin başqa yolu int mas, a;

İki birölçülü mas və a massivləri müvafiq olaraq 10 və 16 ölçüləri ilə elan edilir. Üstəlik, bu bəyanetmə metodunda bütün massivlər eyni məlumat növünə malik olacaq, bizim vəziyyətimizdə - int.

// massivlər elan edildikdə işə salına bilər: int a = ( 5, -12, -12, 9, 10, 0, -9, -12, -1, 23, 65, 64, 11, 43, 39, -15 ); // birölçülü massivin inisializasiyası

Birölçülü massivin inisiallaşdırılması işarədən sonra əyri mötərizələrdə yerinə yetirilir bərabərdir, hər massiv elementi əvvəlkindən vergüllə ayrılır.

Int a=(5,-12,-12,9,10,0,-9,-12,-1,23,65,64,11,43,39,-15); // massivin ölçüsünü təyin etmədən işə salınması.

Bu halda kompilyator özü birölçülü massivin ölçüsünü təyin edəcək. Massivin ölçüsünü yalnız onu inisiallaşdırarkən buraxmaq olar, massiv normal elan edildikdə, massivin ölçüsü göstərilməlidir; Bir ölçülü massivi emal etmək üçün sadə proqram hazırlayaq.

// array.cpp: Konsol tətbiqi üçün giriş nöqtəsini təyin edir. #include "stdafx.h" #include << "obrabotka massiva" << endl; int array1 = { 5, -12, -12, 9, 10, 0, -9, -12, -1, 23, 65, 64, 11, 43, 39, -15 }; // объявление и инициализация одномерного массива cout << "indeks" << "\t\t" << "element massiva" << endl; // печать заголовков for (int counter = 0; counter < 16; counter++) //начало цикла { //вывод на экран индекса ячейки массива, а затем содержимого этой ячейки, в нашем случае - это целое число cout << "array1[" << counter << "]" << "\t\t" << array1 << endl; } system("pause"); return 0; }

// kod Kod::Bloklar

// Dev-C++ kodu

// array.cpp: Konsol tətbiqi üçün giriş nöqtəsini təyin edir. #daxildir ad sahəsi std istifadə edərək; int main(int argc, char* argv) ( cout<< "obrabotka massiva" << endl; int array1 = { 5, -12, -12, 9, 10, 0, -9, -12, -1, 23, 65, 64, 11, 43, 39, -15 }; // объявление и инициализация одномерного массива cout << "indeks" << "\t\t" << "element massiva" << endl; // печать заголовков for (int counter = 0; counter < 16; counter++) //начало цикла { //вывод на экран индекса ячейки массива, а затем содержимого этой ячейки, в нашем случае - это целое число cout << "array1[" << counter << "]" << "\t\t" << array1 << endl; } return 0; }

IN sətirlər 10 - 11 array1 adlı tam ədədli birölçülü massiv elan edilib və inisiallaşdırılıb, onun ölçüsü 16 xanadır, yəni belə massiv 16 ədədi saxlaya bilir. İstənilən massiv emalı yalnız döngələrlə birlikdə mümkündür. Massivi emal etmək üçün hansı döngəni seçmək sizin ixtiyarınızdadır. Ancaq bu vəzifə üçün ən uyğundur. Birölçülü massiv1 massivinin elementlərinə daxil olmaq üçün sayğac dəyişən sayğacından istifadə edəcəyik. Birölçülü massiv1-də on altıncı indeks olmadığı üçün for dövrəsinin davam şərti ciddi bərabərsizlik işarəsini ehtiva edir. Hüceyrələrin nömrələnməsi sıfırdan başladığı üçün massivdə 16 element var for loopunun gövdəsində cout operatoru birölçülü massivin elementlərini çap edir (bax Şəkil 2).

Obrabotka massiva indeksləri element massiva massivi1 5 massiv1 -12 massiv1 -12 massiv1 9 massiv1 10 massiv1 0 massiv1 -9 massiv1 -12 massiv1 -1 massiv1 23 massiv1 65 massiv1 614 massiv1 31array1 davam edin, istənilən düyməni basın. . .

Şəkil 2 - C++ dilində massivlər

C++ dilində birölçülü massivin emalı üçün başqa bir proqram hazırlayaq. Proqram ardıcıl olaraq klaviaturadan daxil edilmiş on ədədi oxumalıdır. Bütün daxil edilmiş nömrələr yekunlaşdırılır və nəticə ekranda göstərilir.

// array_sum.cpp: Konsol tətbiqi üçün giriş nöqtəsini təyin edir. #include "stdafx.h" #include << "Enter elementi massiva: " << endl; int sum = 0; for (int counter = 0; counter < 10; counter++) // цикл для считывания чисел cin >> << "array1 = {"; for (int counter = 0; counter < 10; counter++) // цикл для вывода элементов массива cout << array1 << " "; // выводим элементы массива на стандартное устройство вывода for (int counter = 0; counter < 10; counter++) // цикл для суммирования чисел массива sum += array1; // суммируем элементы массива cout << "}\nsum = " << sum << endl; system("pause"); return 0; }

// kod Kod::Bloklar

// Dev-C++ kodu

// array_sum.cpp: Konsol tətbiqi üçün giriş nöqtəsini təyin edir. #daxildir ad sahəsi std istifadə edərək; int main(int argc, char* argv) ( int array1; // cout tam massivi elan edin<< "Enter elementi massiva: " << endl; int sum = 0; for (int counter = 0; counter < 10; counter++) // цикл для считывания чисел cin >>massiv1; // klaviaturadan daxil edilmiş nömrələri oxuyun<< "array1 = {"; for (int counter = 0; counter < 10; counter++) // цикл для вывода элементов массива cout << array1 << " "; // выводим элементы массива на стандартное устройство вывода for (int counter = 0; counter < 10; counter++) // цикл для суммирования чисел массива sum += array1; // суммируем элементы массива cout << "}\nsum = " << sum << endl; return 0; }

Massivi emal etməzdən əvvəl onu elan etmək lazımdır və birölçülü massivin ölçüsü 10-dur, çünki bu, tapşırığın şərti ilə şərtlənir. Sum dəyişənində biz birölçülü massivin elementlərinin cəmini toplayacağıq. Birinci for döngüsü elan edilmiş birölçülü massivi klaviaturadan daxil edilmiş nömrələrlə doldurur, sətirlər 12 - 13. Sayğac dəyişəni 0 indeksindən başlayaraq 9-cu daxil olmaqla birölçülü massivin1 elementlərinə ardıcıl daxil olmaq üçün istifadə olunur. İkinci for döngüsü massivin elementlərini göstərir, sətirlər 15 - 16. Üçüncü for döngəsi ardıcıl olaraq birölçülü massivin elementlərini oxuyur və onları cəmləşdirir, cəmi sum dəyişənində toplanır. sətirlər 17 - 18. Proqramın nəticəsi Şəkil 3-də göstərilmişdir.

Elementi massiva daxil edin: 0 1 2 3 4 5 6 7 8 9 massiv1 = (0 1 2 3 4 5 6 7 8 9 ) cəmi = 45 Davam etmək üçün istənilən düyməni basın. . .

Şəkil 3 - C++ dilində massivlər

Əvvəlcə bütün 10 rəqəm ardıcıl olaraq daxil edildi, bundan sonra bir ölçülü massiv göstərildi və massivdəki nömrələrin cəmi çap edildi.

C++ dilində ikiölçülü massivlər

Bu nöqtəyə qədər biz həmişə məhdudlaşa bilməyən birölçülü massivləri nəzərdən keçirdik. Tutaq ki, cədvəldən bəzi məlumatları emal etməlisiniz. Cədvəlin iki xüsusiyyəti var: sətirlərin sayı və sütunların sayı. Həmçinin ikiölçülü massivdə massiv elementlərinin sayından əlavə ikiölçülü massivin sətirlərinin sayı və sütunlarının sayı kimi xüsusiyyətlər də mövcuddur. Yəni vizual olaraq ikiölçülü massiv sətir və sütunlardan ibarət adi cədvəldir. Əslində ikiölçülü massiv birölçülü massivlərin birölçülü massividir. Ölçüsü m x n olan a adlı ikiölçülü massivin strukturu aşağıda göstərilmişdir (Şəkil 4-ə bax).

Şəkil 4 - C++ dilində massivlər

burada, m ikiölçülü massivin sətirlərinin sayıdır;
n - ikiölçülü massivin sütunlarının sayı;
m * n — massiv elementlərinin sayı.

// ikiölçülü massivi elan etmək üçün sintaksis /*məlumat növü*/ /*massiv adı*/;

İkiölçülü massivi elan edərkən, eləcə də birölçülü massivi elan edərkən ilk növbədə aşağıdakıları göstərməlisiniz:

  • məlumat növü;
  • massiv adı.

Bundan sonra birinci kvadrat mötərizələr ikiölçülü massivin sətirlərinin sayını, ikinci kvadrat mötərizələr isə ikiölçülü massivin sütunlarının sayını göstərir. İki ölçülü massiv vizual olaraq bir ölçülü massivdən ikinci kvadrat mötərizə ilə fərqlənir. İkiölçülü massivin elan edilməsi nümunəsinə baxaq. Tutaq ki, elementlərinin sayı 15-ə bərabər olan ikiölçülü massiv elan etməliyik.Bu halda ikiölçülü massiv üç sıra və beş sütun və ya beş sətir və üç sütun ola bilər.

// ikiölçülü massivin bəyannaməsi nümunəsi: int a;

  • a tam ədəd massivinin adıdır
  • birinci kvadrat mötərizədə olan rəqəm ikiölçülü massivin cərgələrinin sayını göstərir, bu halda 5-dir;
  • ikinci kvadrat mötərizədə olan rəqəm ikiölçülü massivin sütunlarının sayını göstərir, bu halda 3-dür.

// ikiölçülü massivin işə salınması: int a = ( (4, 7, 8), (9, 66, -1), (5, -5, 0), (3, -3, 30), ( 1, 1, 1) );

Bu massivdə 5 sətir, 3 sütun var. təyin işarəsindən sonra ümumi qıvrımlı mötərizələr yerləşdirilir, onların içərisində ikiölçülü massivdə nə qədər sətir olmalıdırsa, o qədər cüt buruq mötərizələr yerləşdirilir və bu mötərizələr vergüllə ayrılır. Hər bir qıvrımlı mötərizə cütünə vergüllə ayrılmış iki ölçülü massivin elementlərini yazın. Bütün buruq mötərizələrdə elementlərin sayı eyni olmalıdır. Massivdə beş sətir olduğundan, beş daxili cüt mötərizə də var. Sütunların sayı üç olduğu üçün daxili mötərizədə üç element yazılır. Qrafik olaraq, massivimiz ikiölçülü cədvələ bənzəyəcək (Şəkil 5-ə baxın).

Şəkil 5 - C++ dilində massivlər

İki ölçülü massivin hər xanasında a dəyər göstərilir, bu xananın ünvanı aşağı sağ küncdə göstərilir. İki ölçülü massivin xana ünvanı massivin adı, sıra nömrəsi və sütun nömrəsidir.

Gəlin “Labirint” adlı ikiölçülü massivin emalı üçün sadə proqram hazırlayaq. Labirint ikiölçülü massiv əsasında qurulmalıdır. Labirint ölçüsünü öz mülahizəmizlə seçəcəyik.

// array2.cpp: Konsol tətbiqi üçün giriş nöqtəsini təyin edir. #include "stdafx.h" #include < 33; i++) //переключение по строкам { for (int j = 0; j < 20; j++)// переключение по столбцам if (mas[i][j] == 1) { // вывести два раза символ (номер которого 176 в таблице аски) в консоль cout << static_cast(176); cout<< static_cast(176); ) başqa cout<< " "; // вывести два пробела cout << endl; } system("pause"); return 0; }

// kod Kod::Bloklar

// Dev-C++ kodu

// array2.cpp: Konsol tətbiqi üçün giriş nöqtəsini təyin edir. #daxildir ad sahəsi std istifadə edərək; int main(int argc, char* argv) ( // 1-şərti olaraq “labirint divarları” // 2-“düzgün yol, labirintdən çıxış” // 0-“yanlış yol” int mas = ( (1, 2,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,), // ikiölçülü massivin işə salınması ( 1,2,1,0 ,0,1,0,1,2,2,2,1,1,1,1,0,0,0,0,1,), (1,2,1,1 ,0,1,0, 1,2,1,2,2,2,2,1,0,1,1,0,1,), (1,2,2,2,2,2,2, 1,2,1,1 ,1,1,2,1,0,0,1,0,1,), (1,1,1,1,1,1,2,1,2,1,0 ,0,1,2, 1,1,0,1,0,1,), (1,0,0,1,0,0,2,2,2,1,1,0,0,2, 0,0,0,1 ,0,1,), (1,0,1,1,0,1,1,1,1,1,0,0,1,2,1,1,1,1 ,0,1,), (1,0,0,0,0,0,0,0,0,1,1,1,1,2,1,0,0,0,0,1,), (1,1,1, 1,1,1,0,1,1,1,2,2,2,2,1,0,1,1,1,1,), (1,1,0, 0,0,1,0 ,0,1,1,2,1,1,1,1,0,0,0,0,1,), (1,0,0,1,0,0,0 ,0,0,1, 2,2,2,2,1,1,1,1,0,1,), (1,1,1,1,1,1,1,1,1,1, 1,1,1,2 ,1,0,0,0,0,1,), (1,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,1,0,1, 1,1,1,), (1,2,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,0, 0,0,1,) , (1,2,1,0,0,0,1,2,2,2,1,0,0,0,0,0,1,1,0,1,) , (1,2,1 ,1,1,1,1,2,1,2,1,1,1,0,1,0,0,0,0,1,), (1,2,1 ,2,2,2, 1,2,1,2,2,2,1,1,1,1,1,1,1,1,), (1,2,1,2,1,2, 1,2,1,0 ,1,2,2,2,2,2,2,2,2,1,), (1,2,1,2,1,2,1,2,1,0 ,1,1,1, 1,1,1,1,1,2,1,), (1,2,1,2,1,2,1,2,1,0,0,0,0, 0,0,0,0 ,0,2,1,), (1,2,1,2,1,2,2,2,1,0,1,1,1,1,1,1,0 ,1,2,1, ), (1,2,1,2,1,1,1,1,1,0,0,0,1,0,1,0,0,1,2,1, ), (1,2, 1,2,2,1,0,0,1,1,1,0,0,0,1,0,1,1,2,1,), (1,2, 1,1,2,1 ,1,0,0,0,0,0,1,0,1,0,0,1,2,1,), (1,2,1,1,2,1 ,0,0,1, 1,1,1,1,1,1,1,1,1,1,2,1,), (1,2,1,1,2,1,1,0,1, 2,2,2,2 ,2,2,2,2,2,2,1,), (1,2,1,1,2,1,0,0,1,2,1,1,1 ,1,1,1, 1,1,1,1,), (1,2,1,1,2,1,0,1,1,2,1,1,1,1,1,1, 1,1,2,2 ,), (1,2,1,1,2,1,0,0,1,2,1,1,2,2,2,2,2,2,2,1 ,), (1,2 ,1,1,2,1,0,1,1,2,1,1,2,1,1,1,1,1,1,1,), (1,2 ,1,1,2, 1,0,0,1,2,1,1,2,1,0,0,0,1,0,1,), (1,2,2,2,2, 1,0,1,1 ,2,2,2,2,0,0,1,0,0,0,1,), (1,1,1,1,1,1,1,1,1 ,1,1,1, 1,1,1,1,1,1,1,1,) ); // iki döngə - daxili və xarici, serialın hər bir elementinə daxil olmaq üçün (int i = 0; i)< 33; i++) //переключение по строкам { for (int j = 0; j < 20; j++)// переключение по столбцам if (mas[i][j] == 1) { // вывести два раза символ (номер которого 176 в таблице аски) в консоль cout << static_cast(176); cout<< static_cast(176); ) başqa cout<< " "; // вывести два пробела cout << endl; } return 0; }

Düzgün və yanlış yollar eyni nömrə ilə, məsələn, sıfır ilə təyin oluna bilərdi, lakin aydınlıq üçün düzgün yol 2 rəqəmi ilə təyin olunur. Massiv yalnız proqramı sadələşdirmək üçün əl ilə işə salınıb. Proqram ikiölçülü massivi emal etdiyi üçün ikiölçülü massivin elementləri arasında keçid etmək üçün iki dövrə lazımdır. Birinci for loop ikiölçülü massivin sətirləri arasında keçid edir. İkiölçülü massivdə 33 sıra olduğundan, sayğac dəyişəni i 0-dan 33-ə qədər artırılır, sətir 46. Birinci döngənin içərisində iki ölçülü massivin sıra elementləri arasında dövr edən for döngəsi var. İkinci for döngəsinin gövdəsində daxili məlumat tipinə vahid çevrilmə əməliyyatı həyata keçirilir - static_cast<>() , 176 simvol nömrəsini çap edir. Labirentin enini artırmaq üçün məlumat növünün çevrilməsi əməliyyatı təkrarlanır. Proqramın nəticəsi (bax Şəkil 6).

Şəkil 6 - C++ dilində massivlər

Eyni tipli böyük həcmli verilənlərlə bağlı məsələlərin həlli zamanı yaddaş ünvanları ilə sıralanmayan müxtəlif adlara malik dəyişənlərdən istifadə proqramlaşdırmanı çətinləşdirir. Belə hallarda C dili massiv adlanan obyektlərdən istifadə edir.

bir adla işarələnən, eyni tipli obyektlərin ardıcıllığını ehtiva edən bitişik yaddaş parçasıdır.

Massiv aşağıdakı əsas anlayışlarla xarakterizə olunur:

Massiv elementi (massiv elementinin dəyəri)– massiv daxilində yerləşən xüsusi yaddaş hüceyrəsində saxlanılan dəyər, həmçinin bu yaddaş xanasının ünvanı.
Hər bir massiv elementi üç dəyərlə xarakterizə olunur:

  • element ünvanı - bu elementin yerləşdiyi başlanğıc yaddaş xanasının ünvanı;
  • element indeksi (massivdəki elementin sıra nömrəsi);
  • element dəyəri.

Massiv ünvanı – massivin başlanğıc elementinin ünvanı.

Massiv adı massiv elementlərinə istinad etmək üçün istifadə olunan identifikatordur.

Massiv ölçüsü – massiv elementlərinin sayı

Element ölçüsü bir massiv elementinin tutduğu baytların sayıdır.

Qrafik olaraq massivin kompüter yaddaşındakı yerini davamlı ünvan zolağı kimi təqdim etmək olar.

Şəkildə göstərilən massiv indeksləri 0-dan q-1-ə qədər olan q elementdən ibarətdir. Hər bir element kompüter yaddaşında k bayt tutur və yaddaşda elementlərin düzülüşü ardıcıldır.

Massivin i-ci elementinin ünvanları bunlardır

Massiv ünvanı massivin başlanğıc (sıfır) elementinin ünvanıdır. Massiv elementlərinə daxil olmaq üçün ilkin qiyməti 0 olan elementin seriya nömrəsindən (indeks) istifadə olunur. Deməli, əgər massivdə q element varsa, o zaman massiv elementlərinin indeksləri 0-dan q-1-ə qədər dəyişir.

Massivin uzunluğu massivin bütün elementlərini saxlamaq üçün yaddaşda ayrılmış baytların sayıdır.

Massiv uzunluğu = Element ölçüsü * Elementlərin sayı

Funksiya massiv elementinin ölçüsünü təyin etmək üçün istifadə edilə bilər

int sizeof(növü);

Misal üçün,

sizeof(char) = 1;
sizeof(int) = 4;
sizeof(float) = 4;
sizeof(ikiqat) = 8;

Massivlərin elan edilməsi və işə salınması

C dilində massiv elan etmək üçün aşağıdakı sintaksisdən istifadə olunur:

type name[ölçü]=(init);

Başlanğıc, əyri mötərizələrdə göstərilən, vergüllə ayrılmış massiv elementlərinin ilkin dəyərlərinin toplusudur.

int a = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9); // 10 tam ədəddən ibarət a massivi

Qıvrımlı mötərizələrdə göstərilən başlatma dəyərlərinin sayı kvadrat mötərizədə göstərilən massiv elementlərinin sayından azdırsa, massivdə qalan bütün elementlər (bunlar üçün kifayət qədər başlanğıc dəyərləri yox idi) sıfır olacaqdır. Bu xassə massivin bütün elementlərini sıfır qiymətə təyin etmək üçün istifadə etmək üçün əlverişlidir.

int b = (0); // 0-a ilkinləşdirilmiş 10 elementdən ibarət b massivi


Əgər massiv elan edildikdə işə salınırsa, onda onun elementlərinin sabit ilkin dəyərləri qıvrım mötərizələrdə vergüllə ayrılaraq göstərilir. Bu halda kvadrat mötərizədə olan elementlərin sayı buraxıla bilər.

int a = (1, 2, 3, 4, 5, 6, 7, 8, 9);

Massiv elementlərinə daxil olduqda, tələb olunan elementin indeksi kvadrat mötərizədə göstərilir.

C-də nümunə

1
2
3
4
5
6
7
8

#daxildir
int main()
{
int a = ( 5, 4, 3, 2, 1 ); // a massivi 5 elementdən ibarətdir
printf("%d %d %d %d %d\n" , a, a, a, a, a);
getchar();
0 qaytarmaq;
}

Proqramın icrasının nəticəsi:

Bununla belə, proqramın icrası zamanı çox vaxt massiv elementlərinin qiymətlərini təyin etmək lazımdır. Bu, başlatmadan massiv elanından istifadə edir. Bu halda kvadrat mötərizədə elementlərin sayının göstərilməsi məcburidir.

int a;

Tez-tez massiv elementlərinin ilkin dəyərlərini təyin etmək üçün parametrik döngə istifadə olunur:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18


#daxildir
int main()
{
int a;
int i;
// Massiv elementlərinin daxil edilməsi
üçün (i = 0; i<5; i++)
{
printf("a[%d] = " , i);
scanf("%d", &a[i]);
}
// Çıxış massivinin elementləri
üçün (i = 0; i<5; i++)
printf("%d " , a[i]); // çap formatında boşluq tələb olunur
getchar(); getchar();
0 qaytarmaq;
}

Proqramın icrasının nəticəsi

Çoxölçülü massivlər

Çoxölçülü massivlər C dilində də elan edilə bilər. Çoxölçülü massivin birölçülü massivdən fərqi ondan ibarətdir ki, birölçülü massivdə elementin mövqeyi bir indekslə, çoxölçülü massivdə isə bir neçə ilə müəyyən edilir. Çoxölçülü massiv nümunəsi matrisdir.

Çoxölçülü massiv elanının ümumi forması

növün adı[ölçü1][ölçü2]...[ölçüm];

Çoxölçülü massivin elementləri ünvanların artan ardıcıllığı ilə ardıcıl RAM xanalarında yerləşir. Kompüter yaddaşında çoxölçülü massivin elementləri bir sıra düzülür, məsələn, 2 sətir və 3 sütunlu massiv,

int a;


yaddaşda aşağıdakı kimi yerləşəcək

Verilmiş ikiölçülü massivdəki elementlərin ümumi sayı kimi müəyyən edilir

Sətirlərin sayı * Sütunların sayı = 2 * 3 = 6.

Massivi yerləşdirmək üçün tələb olunan yaddaş baytlarının sayı ilə verilir

Elementlərin sayı * Element ölçüsü = 6 * 4 = 24 bayt.

Çoxölçülü massivlərin işə salınması

Çoxölçülü massivin elementlərinin dəyərləri, birölçülü vəziyyətdə olduğu kimi, elan edildikdə, əyri mötərizədə () sabit dəyərlərlə təyin edilə bilər. Lakin bu halda sətir və sütunlardakı elementlərin sayı kvadrat mötərizədə göstərilməlidir.

C-də nümunə

1
2
3
4
5
6
7
8
9

#daxildir
int main()
{
int a = ( 1, 2, 3, 4, 5, 6 );
printf("%d %d %d\n" , a, a, a);
getchar();
0 qaytarmaq;
}



Bununla belə, daha tez-tez proqramın icrası zamanı çoxölçülü massivin elementlərinin qiymətlərini daxil etmək lazımdır. Bu məqsədlə daxili parametrik döngədən istifadə etmək rahatdır.

C-də nümunə

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

#CRT_SECURE_NO_XƏBƏRDARLIQLARI təyin edin
#daxildir
int main()
{
int a; // 2 sətir və 3 sütundan ibarət massiv
int i, j;
// Massiv elementlərinin daxil edilməsi
üçün (i = 0; i<2; i++) // xətlər arasında döngə
{
üçün (j = 0; j<3; j++) // sütunlar arasında döngə
{
printf("a[%d][%d] = " , i, j);
scanf("%d" , &a[i][j]);
}
}
// Çıxış massivinin elementləri
üçün (i = 0; i<2; i++) // xətlər arasında döngə
{
üçün (j = 0; j<3; j++) // sütunlar arasında döngə
{
printf("%d " , a[i][j]);
}
printf("\n" ); // yeni sətir
}
getchar(); getchar();
0 qaytarmaq;
}



Massivin funksiyaya ötürülməsi

Massivlərin işlənməsi xüsusi funksiyalardan istifadə etməklə rahat şəkildə təşkil edilə bilər. Massivi emal etmək üçün siz funksiyaya arqumentlər kimi keçməlisiniz

  • massiv ünvanı,
  • massiv ölçüsü.

İstisna yalnız ünvanı ötürmək üçün kifayət olan sətir emal funksiyalarıdır.

Dəyişənlər funksiyaya arqument kimi ötürüldükdə məlumatlar nüsxə kimi ötürülür. Bu o deməkdir ki, funksiya daxilində parametr dəyəri dəyişərsə, bu onun çağıran funksiya daxilindəki dəyərinə təsir etməyəcək.

Dəyişən ünvanı (və ya massiv ünvanı) funksiyaya ötürülürsə, o zaman göstərilən ünvan daxilində verilənlər üzərində funksiyada yerinə yetirilən bütün əməliyyatlar ilkin verilənlər üzərində yerinə yetirilir, ona görə də orijinal massiv (və ya dəyişən dəyəri) dəyişdirilə bilər. çağırılan funksiya ilə.

10 elementdən ibarət C Dan massivindəki nümunə. Massivin ən böyük və başlanğıc elementlərini dəyişdirin. Maksimum element axtarışı və mübadiləsi əməliyyatları üçün funksiyadan istifadə edin.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

#CRT_SECURE_NO_XƏBƏRDARLIQLARI təyin edin
#daxildir
// Mübadilə funksiyası
etibarsız dəyişiklik (int *x, int n)
{
// x - massiv üçün göstərici (massiv ünvanı)
// n - massiv ölçüsü
int i;
int max, indeks;
max = x;
indeks = 0;
// Maksimum elementin tapılması
üçün (i = 1; i {
əgər (x[i]>maks)
{
max = x[i];
indeks = i;
}
}
// Mübadilə
x = x;
x = maks;
}
// Əsas funksiya
int main()
{
int a;
int i;
üçün (i = 0; i<10; i++)
{
printf("a[%d] = " , i);
scanf("%d", &a[i]);
}
dəyişiklik (a, 10); // mübadilə funksiyasını çağırın
// Çıxış massivinin elementləri
üçün (i = 0; i<10; i++)
printf("%d " , a[i]);
getchar();
getchar();
qayıtmaq
p = p * x[i];
}
qayıt p;
}
// Əsas funksiya
int main()
{
int a; // 5 elementdən ibarət a massivi elan edildi
int i;
int pr;
// Massiv elementlərinin daxil edilməsi
üçün (i = 0; i<5; i++)
{
printf("a[%d] = " , i);
scanf("%d", &a[i]); // &a[i] - massivin i-ci elementinin ünvanı
}
pr = func(a, 5); // məhsulu hesablayın
printf("\n pr = %d" , pr); // cüt elementlərin məhsulunu çıxarın
getchar(); getchar();
0 qaytarmaq;
}



Paskalda ikiölçülü massiv birölçülü massiv kimi qəbul edilir, onun element növü də massivdir (massivlər massivi). İkiölçülü Paskal massivlərində elementlərin mövqeyi iki indekslə təsvir olunur. Onlar düzbucaqlı cədvəl və ya matris şəklində təqdim edilə bilər.

Ölçüsü 3*3 olan ikiölçülü Paskal massivini nəzərdən keçirək, yəni üç sətir və hər sətirdə üç element olacaq:

Hər bir elementin birölçülü massivlər kimi öz nömrəsi var, lakin indi bu nömrə artıq iki rəqəmdən ibarətdir - elementin yerləşdiyi sətrin nömrəsi və sütun nömrəsi. Beləliklə, element nömrəsi satır və sütunun kəsişməsi ilə müəyyən edilir. Məsələn, 21 ikinci sətirdə və birinci sütunda görünən elementdir.

İkiölçülü Paskal massivinin təsviri.

İkiölçülü Paskal massivini elan etməyin bir neçə yolu var.

Biz artıq birölçülü massivləri necə təsvir edəcəyimizi bilirik, onların elementləri istənilən tipdə ola bilər və deməli, elementlərin özləri də massiv ola bilər. Növlərin və dəyişənlərin aşağıdakı təsvirini nəzərdən keçirin:

İkiölçülü Paskal massivinin təsvirinə nümunə

Növ
Vektor = massiv<тип_элементов>;
Matris= vektor massivi;
Var m: matris;

Hər birində 5 sütun olan 10 sətirdən ibarət ikiölçülü Paskal massivi m elan etdik. Bu halda, hər bir i-ci sətirə m[i] ilə, i-ci sətir daxilindəki hər j-ci elementə isə m[i,j] ilə daxil olmaq olar.

İkiölçülü Paskal massivlərinin növlərinin tərifi də bir sətirdə göstərilə bilər:

Növ
Matris= massiv massivi< тип элементов >;
və ya daha sadə:
növü
matris = massiv<тип элементов>;

İkiölçülü massivin elementlərinə daxil olmaq formaya malikdir: M [i, j]. Bu o deməkdir ki, biz i -ci sətir və j -ci sütunda yerləşən elementi almaq istəyirik. Burada əsas şey cərgələri sütunlarla qarışdırmamaqdır, əks halda biz yenidən mövcud olmayan elementə daxil ola bilərik. Məsələn, M elementinə daxil olmaq düzgün nota malikdir, lakin proqramda xətaya səbəb ola bilər.

İkiölçülü Paskal massivləri ilə əsas əməliyyatlar

Birölçülü massivlərlə əsas əməliyyatlar haqqında deyilənlərin hamısı matrislər üçün də doğrudur. Eyni tipli bütün matrislər üzərində yerinə yetirilə bilən yeganə hərəkət tapşırıqdır. Yəni, proqramımız eyni tipli iki matrisi təsvir edirsə, məsələn,

növü
matrix= tam ədəd massivi;
var
a , b: matris ;

sonra proqramın icrası zamanı matrisi təyin edə bilərsiniz a matrisin dəyəri b(a:= b). Bütün digər hərəkətlər element üzrə yerinə yetirilir və massiv elementlərinin məlumat növü üçün müəyyən edilmiş bütün etibarlı əməliyyatlar elementlər üzərində yerinə yetirilə bilər. Bu o deməkdir ki, əgər massiv tam ədədlərdən ibarətdirsə, onda onun elementləri üzərində tam ədədlər üçün müəyyən edilmiş əməliyyatlar yerinə yetirilə bilər, lakin massiv simvollardan ibarətdirsə, onda simvollarla işləmək üçün müəyyən edilmiş əməliyyatları onlara tətbiq etmək olar.

İki ölçülü Paskal massivinin daxil edilməsi.

Birölçülü massivin elementlərini ardıcıl olaraq daxil etmək üçün indeks dəyərini 1-cidən sonuncuya dəyişdiyimiz for loopundan istifadə etdik. Lakin ikiölçülü Paskal massivində elementin mövqeyi iki indekslə müəyyən edilir: sıra nömrəsi və sütun nömrəsi. Bu o deməkdir ki, biz ardıcıl olaraq sıra nömrəsini 1-cidən sonuncuya dəyişməli və hər sətirdə sütun elementləri arasında 1-dən sonuncuya qədər təkrarlamalı olacağıq. Bu o deməkdir ki, bizə iki for döngəsi lazımdır, onlardan biri digərinin içərisindədir.

Klaviaturadan ikiölçülü Paskal massivinin daxil edilməsi nümunəsinə baxaq:

Klaviaturadan ikiölçülü Paskal massivinin daxil edilməsi üçün nümunə proqram

növü
matrix= tam ədəd massivi;
var
a, : matris;
i, j: tam ədəd; (massiv indeksləri)
başlamaq
for i:=1 - 5 do (bütün sətirləri təkrarlamaq üçün döngə)
readln(a[i,j]); (i-ci sətir və j-ci sütunda elementin klaviatura daxil edilməsi)

İki ölçülü Paskal massivi təsadüfi doldurula bilər, yəni. təsadüfi (N) funksiyasından istifadə edin və həmçinin matrisin hər bir elementinə bəzi ifadənin qiymətini təyin edin. İkiölçülü Paskal massivinin doldurulması üsulu qarşıya qoyulan vəzifədən asılıdır, lakin istənilən halda hər bir sətirdə və hər bir sütunda hər bir element müəyyən edilməlidir.

İkiölçülü Paskal massivinin ekrana çap edilməsi.

İkiölçülü Paskal massivinin elementlərinin çapı da ardıcıllıqla həyata keçirilir, hər bir sətir və hər sütunun elementlərini çap etmək lazımdır; Eyni zamanda, eyni sətirdə olan elementlərin yan-yana çap olunmasını istərdim, yəni. cərgədə və sütun elementləri bir-birinin altında yerləşirdi. Bunu etmək üçün aşağıdakı hərəkətlər ardıcıllığını yerinə yetirməlisiniz (əvvəlki nümunədə təsvir olunan massiv üçün proqram fraqmentini nəzərdən keçirin):

İkiölçülü Paskal massivini çap etmək üçün nümunə proqram

for i:=1 - 5 do (bütün sətirləri təkrarlamaq üçün döngə)
başlamaq
j:=1-dən 10-a qədər (bir sıranın bütün elementlərini sütun üzrə təkrarlayın)
yaz (a[i,j]:4); (hər bir elementi göstərmək üçün ayrılmış 4 mövqe ilə bir ekran xəttində matrisin i-ci cərgəsində yerləşən çap elementləri)
yazmaq; (matrisdəki sətir nömrəsini dəyişdirməzdən əvvəl kursoru yeni ekran xəttinin əvvəlinə keçirməlisiniz)
son;

Qeyd ( vacibdir!): çox tez-tez tələbə proqramlarında klaviaturadan daxil olmağa və ya massivi aşağıdakı kimi göstərməyə cəhd edərkən xəta olur: readln (a), writeln (a), burada A massiv dəyişənidir. Eyni zamanda, onlar bu tipli dəyişənin oxuna və ya çap edilə bilməyəcəyinə dair kompilyator mesajı ilə təəccüblənirlər. N stəkan cərgədə dayandığını və əlinizdə, məsələn, bir çaydanı təsəvvür etsəniz, bəlkə bunun niyə edilə bilməyəcəyini başa düşəcəksiniz. Bütün fincanları bir anda doldurmaq üçün “su tök” əmrindən istifadə edə bilərsinizmi? Nə qədər çalışsanız da, hər bir fincana ayrıca tökməli olacaqsınız. Massiv elementlərinin doldurulması və göstərilməsi də ardıcıl və element-element yerinə yetirilməlidir, çünki Kompüter yaddaşında massiv elementləri ardıcıl xanalarda yerləşir.

Yaddaşda ikiölçülü Paskal massivinin təsviri

Maşının yaddaşında abstrakt massivin elementləri təsvirə uyğun olaraq fiziki olaraq ardıcıl yerləşdirilir. Bu halda hər bir element yaddaşda onun ölçüsünə uyğun baytların sayını tutur. Məsələn, əgər massiv tam ədəd tipli elementlərdən ibarətdirsə, onda hər bir element iki bayt tutacaq. Və bütün massiv S ^ 2 bayt alacaq, burada S massivdəki elementlərin sayıdır.

Və massivlərdən ibarət massiv nə qədər yer tutacaq, yəni. matris? Aydındır ki: S i^S j, burada S i sətirlərin sayı, S j isə hər sətirdəki elementlərin sayıdır. Məsələn, kimi bir massiv üçün

Matris = tam ədəd massivi;

12 bayt yaddaş tələb olunacaq.

Bu massivin elementləri yaddaşda necə yerləşdiriləcək? Yaddaşda matris tipli M massivinin tərtibatını nəzərdən keçirək.

Tam ədədin hər bir M elementi üçün iki yaddaş xanası ayrılır. Yaddaşın yerləşdirilməsi aşağıdan yuxarıya doğru aparılır. Elementlər indeksin dəyişməsi sırası ilə yerləşdirilir ki, bu da iç-içə döngə nümunəsinə uyğundur: birinci sıra birinci, sonra ikinci, üçüncü yerləşdirilir... Sıra daxilində elementlər ardıcıllıqla gedir: birinci, ikinci və s.

Bildiyimiz kimi, istənilən dəyişənə giriş yalnız dəyişənin saxlandığı yaddaş xanasının ünvanı məlum olduqda mümkündür. Proqram yükləndikdə dəyişən üçün xüsusi yaddaş ayrılır, yəni dəyişənlə xana ünvanı arasında qarşılıqlı uyğunluq qurulur. Amma dəyişəni massiv kimi elan etsək, proqram massivin başlanğıcının ünvanını, yəni onun birinci elementini “bilir”. Massivin bütün digər elementlərinə necə daxil olursunuz? İkiölçülü massivin elementinin saxlandığı yaddaş hüceyrəsinə faktiki daxil olduqda, sistem düsturdan istifadə edərək onun ünvanını hesablayır:

Adr + SizeElem * Cols *(I -1)+ SizeElem *(J -1),

burada Addr massivin yaddaşda yerləşdiyi faktiki başlanğıc ünvanıdır; I, J – ikiölçülü massivdə element indeksləri; SizeElem – massiv elementinin ölçüsü (məsələn, tam ədəd tipli elementlər üçün iki bayt); Cols – sətirdəki elementlərin sayı.

SizeElem * Cols *(I -1)+ SizeElem *(J -1) ifadəsi massivin əvvəlinə nisbətən ofset adlanır.

Massiv üçün nə qədər yaddaş ayrılıb?

Gəlin, massiv üçün nə qədər yaddaşın ayrılması məsələsini (bunu əvvəlki bölmədə müzakirə etdik) yox, məhdud yaddaş həcmini nəzərə alaraq massivin icazə verilən maksimum ölçüsünün nə qədər olması məsələsini nəzərdən keçirək.

Proqramın işləməsi üçün yaddaş hər biri 64 KB seqmentlərə bölünür və onlardan ən azı biri aşağıdakı kimi müəyyən edilir. məlumat seqmenti. Proqramın emal edəcəyi məlumatlar məhz bu seqmentdə yerləşir. Heç bir proqram dəyişəni birdən çox seqmentdə yerləşə bilməz. Buna görə də, seqmentdə massiv kimi təsvir edilən yalnız bir dəyişən olsa belə, o, 65536 baytdan çox qəbul edə bilməyəcək. Lakin, demək olar ki, məlumat seqmentində massivdən əlavə bəzi digər dəyişənlər də təsvir ediləcək, buna görə də massiv üçün ayrıla bilən yaddaşın faktiki miqdarı düsturla tapılır: 65536-S, burada S - yaddaş artıq digər dəyişənlər üçün ayrılmışdır.

Bunu niyə bilməliyik? Tərcüməçi proqramın təsviri ilə qarşılaşdıqda (sintaksis nöqteyi-nəzərindən düzgün) kompilyasiya zamanı çox uzun massiv elan edilməsi ilə bağlı səhv mesajı göstərərsə, təəccüblənməmək üçün:

myArray yazın= tam ədəd massivi;

Siz artıq bilirsiniz ki, tam ədədlərin iki baytlıq təsvirini nəzərə alsaq, elementlərin sayı 65536/2 –1=32767-yə bərabər olan massiv elan etmək həqiqətən mümkündür. Və sonra yalnız başqa dəyişənlər olmadıqda. İki ölçülü massivlərin daha kiçik indeks sərhədləri olmalıdır.

İkiölçülü Paskal massivləri ilə bağlı məsələlərin həlli nümunələri

Tapşırıq: Sıfırdan fərqli matrisin elementlərinin hasilini tapın.

Həll:

  • Bu problemi həll etmək üçün bizə dəyişənlər lazımdır: məsələn, tam elementlərdən ibarət matris; P – 0-dan fərqli elementlərin hasili; I, J – massiv indeksləri; N, M – matrisdəki sətir və sütunların sayı.
  • Giriş məlumatları N, M - onların dəyərlərini klaviaturadan daxil edəcəyik; matris – matrisi prosedur şəklində daxil edəcəyik, matrisi təsadüfi dolduracağıq, yəni. random() funksiyasından istifadə etməklə.
  • Çıxış məlumatları dəyişən P (məhsul) dəyəri olacaqdır.
  • Proqramın düzgün icrasını yoxlamaq üçün matrisi ekranda göstərmək lazımdır ki, bunun üçün matrisin göstərilməsi prosedurunu rəsmiləşdirəcəyik;
  • Problemin həllində irəliləyiş:

Əvvəlcə əsas proqramın icrasını müzakirə edək, bir az sonra prosedurların həyata keçirilməsini müzakirə edəcəyik:

  • N və M dəyərlərini daxil edək;
  • İkiölçülü Paskal massivini təqdim edək, bunun üçün vvod (a) proseduruna müraciət edirik, burada a matrisdir;
  • Bunun üçün yaranan matrisi çap edək, çap (a) prosedurundan istifadə edin;
  • P =1 dəyişəninə ilkin qiymət təyin edək;
  • Biz ardıcıl olaraq bütün I sətirləri 1-dən N-ə qədər təkrarlayacağıq, hər cərgədə J sütunlarını 1-dən M-ə qədər təkrarlayacağıq, matrisin hər bir elementi üçün şərti yoxlayacağıq: əgər a ij ? 0, onda P məhsulu a ij elementinə vurulacaq (P = P * a ij);
  • Sıfırdan fərqli matris elementlərinin hasilinin qiymətini göstərək – P;

İndi prosedurlar haqqında danışaq.

Şərh (vacibdir!) Prosedur parametri əvvəlcədən təyin edilmiş tipli istənilən dəyişən ola bilər, yəni massivi prosedura parametr kimi ötürmək üçün onun tipi əvvəlcədən təsvir edilməlidir. Misal üçün:

Növ
Matris=tam ədəd massivi;
prosedur primeri(a: matris);
..............................

İndi prosedurlarımıza qayıdaq.

Matrisin daxil edilməsi proseduru vvod adlanır, prosedurun parametri matrisdir və nəticədə o, əsas proqrama ötürülməlidir, buna görə də parametr istinadla ötürülməlidir. Sonra prosedurumuzun başlığı belə görünəcək:

Prosedur vvod (var m: matris);

Prosedurda iç-içə döngələri həyata keçirmək üçün bizə yerli sayğac dəyişənləri lazımdır, məsələn, k və h. Matrisin doldurulması alqoritmi artıq müzakirə olunub, ona görə də onu təkrar etməyəcəyik.

Ekranda bir matrisin göstərilməsi proseduru adlanır çap , prosedurun parametri matrisdir, lakin bu halda o, giriş parametridir, buna görə də dəyərlə ötürülür. Bu prosedurun başlığı belə görünəcək:

Prosedur çapı (m: matris);

Və yenə də prosedur daxilində iç içə döngələri həyata keçirmək üçün sayğaclara ehtiyacımız var, onları eyni adlandıraq - k və h. Matrisin ekranda göstərilməsi alqoritmi yuxarıda təsvir edilmişdir, biz bu təsvirdən istifadə edəcəyik;

Misal Paskal ikiölçülü massiv proqramı

Proqram istehsalı;
Növ
Matris=tam ədəd massivi;
Var
A: matris;
N, m, i, j: bayt;
P: tam ədəd;
Prosedur vvod (var m: matris);
Var k, h: bayt;
Başlayın
i:=1-dən n-ə qədər üçün (prosedur üçün n dəyişəni qlobaldır və buna görə də “məlumdur”)
j:=1-dən m-ə qədər (prosedur üçün m dəyişəni qlobaldır və buna görə də “məlumdur”)
M:= təsadüfi(10);
son;
Prosedur çapı (m: matris);
Var k, h: bayt;
Başlayın
i:=1 üçün n etmək
başlamaq
j:=1 üçün m edin
Yaz(M:4);
yazılı;
son;
Son;
Başlayın (əsas proqramın başlanğıcı)
Writeln("Matrisin ölçüsünü daxil edin:");
Readln(N, M);
Vvod(a);
Çap(a);
P:=1;
i:=1 üçün N etmək
j:=1 üçün M edin
Əgər a<>0 sonra p:=p*a;
Writeln(p);
Son.