Array Pascal dua dimensi - matriks. Array statis: deklarasi, pengisian, penggunaan Pengisian array dua dimensi berbentuk lingkaran




Himpunan (Juga susunan indeks, Kadang-kadang meja, baris) - sekumpulan variabel (data) bernama (terurut) dari tipe yang sama, terletak di memori segera satu demi satu, diakses oleh indeks. Dalam kasus yang paling sederhana Himpunan memiliki panjang konstan dan menyimpan unit data dengan tipe yang sama.

Indeks array yang sama adalah angka utuh, menunjuk ke elemen array tertentu.

Jumlah indeks array yang digunakan mungkin berbeda-beda. Array dengan satu indeks disebut satu dimensi, dengan dua - dua dimensi dll.

Satu dimensi array tidak sepenuhnya cocok vektor dalam matematika, dua dimensi - matriks . Array yang paling umum digunakan adalah satu atau dua indeks, lebih jarang - dengan tiga, bahkan lebih banyak indeks sangat jarang.

Arraynya dijelaskan seperti ini:

Jenis indeks yang paling umum adalah rentang, misalnya:

Penjelasan di atas susunan B, yang terdiri dari 5 elemen dan simbolis susunan R, yang terdiri dari 34 elemen. Untuk sebuah array DI DALAM 5*6=30 byte memori akan dialokasikan (karena untuk variabel bertipe Nyata menonjol 6 byte memori), untuk array R - 1*34=34 byte memori (untuk variabel seperti Arang - 1 byte). Tipe dasar elemen array bisa berupa apa saja, baik yang sederhana maupun terstruktur, kecuali file! Sebuah array dapat dideklarasikan menggunakan memiliki jenis:

Siklus dapat disebut urutan instruksi yang dieksekusi berulang kali, diatur dengan cara apa pun (misalnya, menggunakan lompatan bersyarat).

Eksekusi tunggal dari badan perulangan disebut pengulangan. Ekspresi, yang menentukan, akan dieksekusi sekali lagi pengulangan, atau siklus end adalah kondisi keluar atau kondisi akhir loop(tetapi mungkin juga merupakan syarat untuk kelanjutan). Variabel yang menyimpan nomor iterasi saat ini disebut penghitung iterasi lingkaran atau adil menangkal siklus. Siklus belum tentu mengandung menangkal.

Ada siklus:

- Siklus dengan penghitung, di mana beberapa variabel mengubah nilainya dari nilai tertentu utama nilai hingga terakhir arti dengan beberapa melangkah, dan untuk setiap nilai variabel ini, badan perulangan dieksekusi satu kali. Dilaksanakan oleh operator untuk

Contoh. Mengisi Himpunan:

Dan agar Anda bisa mengisinya dua dimensi Himpunan:

- Siklus dengan prasyarat, yang dijalankan ketika beberapa kondisi yang ditentukan sebelum permulaannya benar. Dilaksanakan oleh operator ketika.

- Siklus dengan kondisi pasca, yang kondisinya diperiksa setelah badan perulangan dieksekusi, yang berarti badan selalu dieksekusi setidaknya satu kali. Di Pascal, loop ini diimplementasikan oleh operator ulangi sampai

Ada operasi lewati iterasi, ketika dalam iterasi saat ini siklus semua perintah harus dilewati hingga akhir badan loop yang dieksekusi. Dalam hal ini, perulangan itu sendiri tidak boleh diinterupsi; kondisi kelanjutan atau keluar harus dihitung dengan cara biasa. Dilaksanakan oleh operator melanjutkan.

Perintah ini juga sering digunakan dalam loop keluar lebih awal dari siklus, misalnya, ketika kesalahan terdeteksi selama eksekusi badan perulangan, setelah itu pengoperasian perulangan lebih lanjut tidak masuk akal. Dilaksanakan oleh operator KELUAR atau merusak.

Mari kita kembali ke awal, atau lebih tepatnya ke awal contoh. Kita perlu menentukan apa yang dilakukan oleh program ini:

Berdasarkan penjelasan di atas maka array dua dimensi yang digunakan adalah A adalah matriks ukuran N X N. Lingkaran digunakan dengan penghitung dari satu ke N, tampaknya didefinisikan sebelumnya.

Di dalam loop: variabel Dengan mendapat nilai array dua dimensi dengan indeks (c:=SEBUAH), pertama ini . Kemudian, sebagai ganti elemen array ini, nilai elemen array yang sama, tetapi dengan indeks, dimasukkan (SEBUAH:= SEBUAH), atau kapan k:=1 (SEBUAH:= SEBUAH). Itu. Unsur baris pertama dimasukkan karena angka pertama dalam indeks bertanggung jawab atas nomor baris dalam matriks - [ Saya,j], dan yang kedua untuk nomor kolom - . Dan pada akhirnya, menggantikan elemen dengan indeks , nilai awal elemen array dimasukkan A dengan indeks , yang kita masukkan ke dalam variabel Dengan (J:=c).

Dan dengan setiap iterasi dari loop kita, nilainya Saya meningkat sebesar satuan. Mari ikuti langkah-langkahnya. Pertama ini :

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

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

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

Jadi N kali sebelumnya . Itu. nilai diagonal matriks arah dari kiri ke kanan dan dari atas ke bawah. DAN elemen-elemen diagonal ini berubah nilai dengan elemen-elemennya Pertama saluran matriks(atau k-baris itu). Jadi jawaban yang benar adalah pilihan 3: algoritma ini bertukar tempat elemen diagonal dankkolom tabel ke-.

Bagian: Ilmu Komputer

Subjek: Array dua dimensi. Mengisi array dua dimensi menurut aturan yang diberikan.

Sasaran: melatih keterampilan bekerja dengan elemen-elemen array dua dimensi, belajar mengisi array dua dimensi menurut aturan yang diberikan, belajar menurunkan hubungan antara nomor baris dan nomor kolom; pengembangan pemikiran logis siswa.

KEMAJUAN KELAS

1. Memperbarui pengetahuan

Array yang posisi elemennya digambarkan oleh dua indeks disebut dua dimensi. Struktur array seperti itu dapat direpresentasikan dengan matriks persegi panjang. Setiap elemen matriks diidentifikasi secara unik dengan menunjukkan nomor baris dan kolom, nomor baris i, nomor kolom j.
Pertimbangkan matriks A berukuran n*m:

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

Matriks 3 baris 4 kolom, jumlah baris n=3, jumlah kolom m=4. Setiap elemen memiliki nomornya sendiri, yang terdiri dari dua angka - nomor baris tempat elemen tersebut berada, dan nomor kolom. Misalnya, a23 adalah elemen yang terdapat pada baris kedua dan kolom ketiga.
Array dua dimensi di Turbo Pascal dapat dijelaskan dengan berbagai cara. Untuk mendeskripsikan array dua dimensi, Anda perlu menentukan jenis elemennya dan bagaimana penomorannya (apa jenis indeksnya). Ada beberapa cara untuk mendeskripsikan array dua dimensi.

Konstanta maksN=…; (Jumlah baris maksimum)
maksM=…; (Nilai maksimum untuk jumlah kolom)

1 cara

Ketik Mas = array dari<тип элементов>; (Array satu dimensi)
Ketik TMas = array dari Mas; (Array satu dimensi yang elemennya merupakan array satu dimensi)

Metode 2

Ketik TMas = array dari array<тип элементов>;
(Array satu dimensi yang elemennya merupakan array satu dimensi)

3 cara

Jenis<имя типа>= susunan dari<тип элементов>; (Array dua dimensi)

Preferensi diberikan pada metode ketiga untuk mendeskripsikan array dua dimensi.

Misalnya:

Konstanta N=3; M=4;
Ketik TMas= array bilangan bulat; (Array bilangan bulat 2D)

Pembentukan array dua dimensi dapat dilakukan dengan empat cara: input dari keyboard, melalui generator bilangan acak, menurut aturan tertentu, atau menggunakan file.

1) Pembentukan array dua dimensi menggunakan input keyboard dan algoritma untuk output elemen matriks baris demi baris.

Konstanta N=10;M=10;
Ketik Tmas= array bilangan bulat;
Var A:Tmas; saya,j: bilangan bulat;
Mulai
(Masukan elemen matriks)
Untuk i:=1 sampai N lakukan
Untuk j:=1 sampai M lakukan
Baca sebuah);
(Output elemen matriks)
Untuk i:=1 sampai N dimulai
Untuk j:=1 sampai M lakukan
Tulis(A:4); (Baris pertama dicetak)
Writeln (Baris baru)
akhir;
Akhir.

2) Sebuah fragmen dari program untuk menghasilkan array dua dimensi melalui generator bilangan acak.

Mulai
Acak; (Menginisialisasi generator nomor acak)
(Masukan elemen matriks)
Untuk i:=1 sampai N lakukan
Untuk j:=1 sampai M lakukan
J:=acak(45)-22;

2. Mempelajari materi baru. Mengisi array sesuai aturan

Mari kita pertimbangkan beberapa penggalan program untuk mengisi array dua dimensi menurut hukum tertentu. Untuk melakukan ini, Anda perlu mendapatkan aturan pengisian.

1. Isikan array A berukuran n*m ​​sebagai contoh berikut

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

Array diisi sesuai dengan prinsip “ular”. Aturan pengisian: jika nomor barisnya ganjil, maka A=(i-1)*m+j, jika tidak A=i*m-j+1.

program M1A;

n,m,i,j: bilangan bulat;
mulai
bacaln(n,m);
untuk i:=1 sampai n mulai
untuk j:=1 sampai m lakukan
mulai
jika saya mod 2 = 1 maka
SEBUAH=(i-1)*m+j
kalau tidak
A=i*m-j+1;
tulis(A:3);
akhir;
menulis;
akhir;
baca;
akhir.

Berikut adalah contoh program untuk metode pengisian lain menurut aturan yang diberikan:

program M1B;
var A:array bilangan bulat;
n,m,i,j: bilangan bulat;
c: bilangan bulat;
mulai
bacaln(n,m);
c:=1;
untuk i:=1 sampai n lakukan
mulai
untuk j:=1 sampai m lakukan
mulai
J:=c;
jika (i mod 2 = 0) dan (j<>m)lalu
Desember(c)
kalau tidak
inc(c);
tulis(A:3);
akhir;
c:=c+m-1;
menulis;
akhir;
baca;
akhir.

2. Isi array A sesuai dengan prinsip berikut:

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

program M2;
var A:array bilangan bulat;
n,m,i,j: bilangan bulat;
c: bilangan bulat;
mulai
bacaln(n,m);
c:=0;
untuk i:=1 sampai n lakukan
mulai
untuk j:=1 sampai m lakukan
mulai
jika (i-1+j) mod 2 = 0 maka
J:=0
kalau tidak
mulai
inc(c);
J:=c;
akhir;
tulis(A:5);
akhir;
menulis;
akhir;
baca;
akhir.

3. Isi array A sesuai dengan prinsip berikut:

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:array bilangan bulat;
n,m,i,j: bilangan bulat;
c: bilangan bulat;
mulai
bacaln(n,m);
c:=1;
untuk j:=1 sampai m lakukan
mulai
untuk i:=1 sampai n lakukan
mulai
J:=c;
jika (j mod 2 = 0) dan (i<>n) kemudian
Desember(c)
kalau tidak
inc(c);
akhir;
c:=c+n-1;
akhir;
untuk i:=1 sampai n lakukan
mulai
untuk j:=1 sampai m lakukan
tulis(A:5);
menulis;
akhir;
baca;
akhir.

4. Isi array A sesuai dengan prinsip berikut:

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: bilangan bulat;

mulai
c:=1;
bacaln(m);
untuk j:=1 sampai m lakukan
mulai
saya:=c;
d:=1;
mengulang
J:=d;
inc(saya);
jika aku> maka
saya:=1;
termasuk(d);
sampai saya=c;
Desember(c);
jika c<= 0 then
c:=mc;
akhir;
untuk i:=1 sampai m lakukan
mulai
untuk j:=1 sampai m lakukan
tulis(A:2);
menulis;
akhir;
akhir.

5. Isi array A sesuai dengan prinsip berikut:

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: bilangan bulat;
A:array bilangan bulat;
mulai
bacaln(m);
untuk i:=1 sampai m lakukan
mulai
untuk j:=1 sampai m lakukan
mulai
jika (i=j) atau (m-i+1=j) maka
J:=1
kalau tidak
J:=0;
tulis(A:2);
akhir;
menulis;
akhir;
akhir.

3. Masalah untuk diselesaikan secara mandiri

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) Isi array sesuai dengan prinsip berikut:

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) Isi array sesuai dengan prinsip berikut:

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

Pekerjaan rumah:

1) Isi array sesuai dengan prinsip berikut:

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) Isi array sesuai dengan prinsip berikut:

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) Isi array sesuai dengan prinsip berikut:

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

Array adalah struktur data yang direpresentasikan sebagai sekelompok sel dengan tipe yang sama, disatukan dalam satu nama. Array digunakan untuk memproses sejumlah besar data dengan tipe yang sama. Nama array adalah apa itu pointer, saya akan memberi tahu Anda nanti. Sel data individual dari sebuah array disebut elemen array. Elemen array dapat berupa data jenis apa pun. Array dapat mempunyai satu atau lebih dari satu dimensi. Berdasarkan jumlah dimensinya, array dibagi menjadi array satu dimensi, array dua dimensi, array tiga dimensi, dan seterusnya hingga array n-dimensi. Array satu dimensi dan dua dimensi paling sering digunakan dalam pemrograman, jadi kami hanya akan mempertimbangkan array ini saja.

Array satu dimensi di C++

Array satu dimensi adalah array dengan satu parameter yang mencirikan jumlah elemen array satu dimensi. Faktanya, array satu dimensi adalah array yang hanya dapat memiliki satu baris dan n jumlah kolom. Kolom-kolom dalam array satu dimensi adalah elemen-elemen array. Gambar 1 menunjukkan struktur array satu dimensi bilangan bulat A. Ukuran array ini adalah 16 sel.

Gambar 1 - Array di C++

Perhatikan bahwa indeks maksimum dari array satu dimensi A adalah 15, tetapi ukuran arraynya adalah 16 sel, karena penomoran sel array selalu dimulai dari 0. Indeks sel adalah bilangan bulat non-negatif yang dengannya Anda dapat mengakses setiap sel array dan melakukan tindakan apa pun padanya ( sel).

//sintaks untuk mendeklarasikan array satu dimensi di C++: /*tipe data*/ /*nama array satu dimensi*/; //contoh mendeklarasikan array satu dimensi ditunjukkan pada Gambar 1: int a;

dimana, int adalah bilangan bulat;

A adalah nama array satu dimensi;
16 adalah ukuran array satu dimensi, 16 sel.

Selalu tepat setelah nama array terdapat tanda kurung siku yang menunjukkan ukuran array satu dimensi; inilah yang membedakan array dari semua variabel lainnya.

//cara lain untuk mendeklarasikan array satu dimensi ke dalam mas, a;

Dua array satu dimensi mas dan a dideklarasikan dengan ukuran masing-masing 10 dan 16. Selain itu, dalam metode deklarasi ini, semua array akan memiliki tipe data yang sama, dalam kasus kita - int.

// array dapat diinisialisasi ketika dideklarasikan: int a = ( 5, -12, -12, 9, 10, 0, -9, -12, -1, 23, 65, 64, 11, 43, 39, -15 ); // inisialisasi array satu dimensi

Inisialisasi array satu dimensi dilakukan dalam kurung kurawal setelah tanda sama, setiap elemen array dipisahkan dari elemen sebelumnya dengan koma.

Int a=(5,-12,-12,9,10,0,-9,-12,-1,23,65,64,11,43,39,-15); // menginisialisasi array tanpa menentukan ukurannya.

Dalam hal ini, kompiler sendiri yang akan menentukan ukuran array satu dimensi. Ukuran array hanya dapat dihilangkan ketika menginisialisasinya; ketika mendeklarasikan array secara normal, ukuran array harus ditentukan. Mari kita kembangkan program sederhana untuk memproses array satu dimensi.

// array.cpp: Mendefinisikan titik masuk untuk aplikasi konsol. #termasuk "stdafx.h" #termasuk << "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; }

// kode Kode::Blok

// Kode Pengembang-C++

// array.cpp: Mendefinisikan titik masuk untuk aplikasi konsol. #termasuk menggunakan namespace std; 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; }

DI DALAM baris 10 - 11 Array satu dimensi bilangan bulat bernama array1 telah dideklarasikan dan diinisialisasi, yang ukurannya 16 sel, artinya array tersebut dapat menyimpan 16 angka. Pemrosesan array apa pun hanya dapat dilakukan jika digabungkan dengan loop. Loop mana yang harus dipilih untuk memproses array terserah Anda. Tapi itu paling cocok untuk tugas ini. Kita akan menggunakan variabel counter counter untuk mengakses elemen array satu dimensi array1. Kondisi untuk melanjutkan perulangan for mengandung tanda pertidaksamaan yang ketat, karena tidak ada indeks keenam belas dalam array satu dimensi array1. Dan karena penomoran sel dimulai dari nol, maka ada 16 elemen dalam array. Di badan loop for, operator cout mencetak elemen array satu dimensi (lihat Gambar 2).

Obrabotka indeks masif elemen array masiva1 5 array1 -12 array1 -12 array1 9 array1 10 array1 0 array1 -9 array1 -12 array1 -1 array1 23 array1 65 array1 64 array1 11 array1 43 array1 39 array1 -15 Untuk melanjutkan, tekan tombol apa saja. . .

Gambar 2 - Array di C++

Mari kita kembangkan program lain untuk memproses array satu dimensi di C++. Program harus membaca sepuluh angka yang dimasukkan dari keyboard secara berurutan. Semua nomor yang dimasukkan dijumlahkan dan hasilnya ditampilkan di layar.

// array_sum.cpp: Mendefinisikan titik masuk untuk aplikasi konsol. #termasuk "stdafx.h" #termasuk << "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; }

// kode Kode::Blok

// Kode Pengembang-C++

// array_sum.cpp: Mendefinisikan titik masuk untuk aplikasi konsol. #termasuk menggunakan namespace std; int main(int argc, char* argv) ( int array1; // mendeklarasikan array bilangan bulat cout<< "Enter elementi massiva: " << endl; int sum = 0; for (int counter = 0; counter < 10; counter++) // цикл для считывания чисел cin >>array1; // membaca angka yang dimasukkan dari keyboard cout<< "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; }

Sebelum memproses array, array harus dideklarasikan, dan ukuran array satu dimensi adalah 10, karena ini ditentukan oleh kondisi tugas. Dalam variabel penjumlahan kita akan mengakumulasi jumlah elemen array satu dimensi. Perulangan for pertama mengisi array satu dimensi yang dideklarasikan dengan angka-angka yang dimasukkan dari keyboard, baris 12 - 13. Variabel counter digunakan untuk mengakses secara berurutan elemen array satu dimensi array1 , mulai dari indeks 0 hingga inklusif ke-9. Perulangan for kedua menampilkan elemen array, baris 15 - 16. Perulangan for ketiga secara berurutan membaca elemen array satu dimensi dan menjumlahkannya, jumlahnya diakumulasikan dalam variabel penjumlahan. baris 17 - 18. Hasil program ditunjukkan pada Gambar 3.

Masukkan elemen masif: 0 1 2 3 4 5 6 7 8 9 array1 = (0 1 2 3 4 5 6 7 8 9 ) sum = 45 Untuk melanjutkan, tekan tombol apa saja. . .

Gambar 3 - Array di C++

Pertama, 10 angka dimasukkan secara berurutan, setelah itu array satu dimensi ditampilkan, dan jumlah angka dalam array dicetak.

Array dua dimensi di C++

Hingga saat ini, kita telah membahas array satu dimensi, yang tidak selalu dapat dibatasi. Katakanlah Anda perlu memproses beberapa data dari sebuah tabel. Sebuah tabel mempunyai dua ciri yaitu jumlah baris dan jumlah kolom. Selain itu pada larik dua dimensi, selain jumlah elemen larik, terdapat ciri-ciri seperti jumlah baris dan jumlah kolom larik dua dimensi. Artinya, secara visual, array dua dimensi adalah tabel biasa, dengan baris dan kolom. Faktanya, array dua dimensi adalah array satu dimensi dari array satu dimensi. Struktur array dua dimensi, bernama a, berukuran m kali n ditunjukkan di bawah ini (lihat Gambar 4).

Gambar 4 - Array di C++

dimana, m adalah jumlah baris array dua dimensi;
n adalah jumlah kolom array dua dimensi;
m * n — jumlah elemen array.

// sintaks untuk mendeklarasikan array dua dimensi /*tipe data*/ /*nama array*/;

Dalam mendeklarasikan array dua dimensi, serta mendeklarasikan array satu dimensi, pertama-tama, Anda perlu menentukan:

  • tipe data;
  • nama larik.

Setelah itu, tanda kurung siku pertama menunjukkan jumlah baris larik dua dimensi, dan tanda kurung siku kedua menunjukkan jumlah kolom larik dua dimensi. Array dua dimensi secara visual dibedakan dari array satu dimensi dengan sepasang tanda kurung siku kedua. Mari kita lihat contoh mendeklarasikan array dua dimensi. Katakanlah kita perlu mendeklarasikan array dua dimensi dengan jumlah elemen sama dengan 15. Dalam hal ini, array dua dimensi dapat memiliki tiga baris dan lima kolom atau lima baris dan tiga kolom.

// contoh deklarasi array dua dimensi: int a;

  • a adalah nama array bilangan bulat
  • angka dalam tanda kurung siku pertama menunjukkan jumlah baris array dua dimensi, dalam hal ini ada 5;
  • angka dalam tanda kurung siku kedua menunjukkan jumlah kolom array dua dimensi, dalam hal ini ada 3.

// inisialisasi array dua dimensi: int a = ( (4, 7, 8), (9, 66, -1), (5, -5, 0), (3, -3, 30), ( 1, 1, 1) );

Array ini memiliki 5 baris, 3 kolom. setelah tanda penetapan, ditempatkan tanda kurung kurawal umum, di dalamnya ditempatkan pasangan tanda kurung kurawal sebanyak yang seharusnya ada dalam larik dua dimensi, dan tanda kurung kurawal ini dipisahkan dengan koma. Pada setiap pasangan kurung kurawal, tulislah elemen-elemen array dua dimensi yang dipisahkan dengan koma. Pada semua kurung kurawal, jumlah elemennya harus sama. Karena ada lima baris dalam array, maka ada juga lima pasang tanda kurung dalam. Tiga elemen ditulis dalam tanda kurung bagian dalam, karena jumlah kolomnya adalah tiga. Secara grafis, array kita akan terlihat seperti tabel dua dimensi (lihat Gambar 5).

Gambar 5 - Array di C++

Di setiap sel array dua dimensi A nilainya ditampilkan, alamat sel ini ditampilkan di sudut kanan bawah. Alamat sel array dua dimensi adalah nama array, nomor baris, dan nomor kolom.

Mari kita kembangkan program sederhana untuk memproses array dua dimensi, yang disebut “Labyrinth”. Labirin harus dibangun berdasarkan susunan dua dimensi. Kami akan memilih ukuran labirin sesuai kebijaksanaan kami.

// array2.cpp: Mendefinisikan titik masuk untuk aplikasi konsol. #termasuk "stdafx.h" #termasuk < 33; i++) //переключение по строкам { for (int j = 0; j < 20; j++)// переключение по столбцам if (mas[i][j] == 1) { // вывести два раза символ (номер которого 176 в таблице аски) в консоль cout << static_cast(176); cout<< static_cast(176); ) kalau tidak, cout<< " "; // вывести два пробела cout << endl; } system("pause"); return 0; }

// kode Kode::Blok

// Kode Pengembang-C++

// array2.cpp: Mendefinisikan titik masuk untuk aplikasi konsol. #termasuk menggunakan namespace std; int main(int argc, char* argv) ( // 1-kondisional “dinding labirin” // 2-“jalur yang benar, keluar dari labirin” // 0-“jalur yang salah” int mas = ( (1, 2,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,), // inisialisasi array dua dimensi ( 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 ,1,0,1, 1,1,1,), (1,2,1,1,0,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,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,) ); // dua loop - internal dan eksternal, mengakses setiap elemen array for (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); ) kalau tidak, cout<< " "; // вывести два пробела cout << endl; } return 0; }

Jalur yang benar dan jalur yang salah dapat dilambangkan dengan angka yang sama, misalnya nol, tetapi untuk lebih jelasnya, jalur yang benar dilambangkan dengan angka 2. Array diinisialisasi secara manual, hanya untuk menyederhanakan program. Karena program memproses array dua dimensi, diperlukan dua loop untuk beralih antar elemen array dua dimensi. Perulangan for pertama beralih antar baris array dua dimensi. Karena ada 33 baris dalam array dua dimensi, variabel penghitung i bertambah dari 0 menjadi 33, baris 46. Di dalam loop pertama terdapat loop for yang menelusuri elemen baris array dua dimensi. Di badan loop for kedua, operasi konversi tipe data unary dilakukan di dalam - static_cast<>() , yang mencetak nomor karakter 176. Operasi konversi tipe data diduplikasi untuk menambah lebar labirin. Hasil program (lihat Gambar 6).

Gambar 6 - Array di C++

Saat menyelesaikan masalah dengan sejumlah besar data dengan tipe yang sama, penggunaan variabel dengan nama berbeda yang tidak diurutkan berdasarkan alamat memori membuat pemrograman menjadi sulit. Dalam kasus seperti ini, bahasa C menggunakan objek yang disebut array.

adalah bagian memori yang berdekatan yang berisi rangkaian objek dengan tipe yang sama, dilambangkan dengan satu nama.

Array dicirikan oleh konsep dasar berikut:

Elemen array (nilai elemen array)– nilai yang disimpan dalam sel memori tertentu yang terletak di dalam array, serta alamat sel memori ini.
Setiap elemen array dicirikan oleh tiga nilai:

  • alamat elemen - alamat sel memori awal tempat elemen ini berada;
  • indeks elemen (nomor urut elemen dalam array);
  • nilai elemen.

Alamat array – alamat elemen awal array.

Nama array adalah pengidentifikasi yang digunakan untuk merujuk ke elemen array.

Ukuran array – jumlah elemen array

Ukuran elemen adalah jumlah byte yang ditempati oleh satu elemen array.

Secara grafis, lokasi array dalam memori komputer dapat direpresentasikan sebagai strip alamat yang berkesinambungan.

Array yang ditunjukkan pada gambar berisi elemen q dengan indeks dari 0 hingga q-1. Setiap elemen menempati k byte dalam memori komputer, dan susunan elemen dalam memori berurutan.

Alamat elemen ke-i dari array adalah

Alamat array adalah alamat elemen awal (nol) array. Untuk mengakses elemen array digunakan nomor seri (indeks) elemen yang nilai awalnya adalah 0. Jadi, jika sebuah array berisi elemen q, maka indeks elemen array tersebut bervariasi dari 0 hingga q-1.

Panjang array adalah jumlah byte yang dialokasikan dalam memori untuk menyimpan semua elemen array.

Panjang Array = Ukuran Elemen * Jumlah Elemen

Fungsi ini dapat digunakan untuk menentukan ukuran elemen array

int ukuran(tipe);

Misalnya,

ukuran(karakter) = 1;
ukuran(int) = 4;
sizeof(mengambang) = 4;
ukuran(ganda) = 8;

Mendeklarasikan dan menginisialisasi array

Untuk mendeklarasikan array di C, sintaks berikut digunakan:

ketik nama[dimensi]=(init);

Inisialisasi adalah sekumpulan nilai awal elemen array, ditentukan dalam kurung kurawal, dipisahkan dengan koma.

int a = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9); // array a yang terdiri dari 10 bilangan bulat

Jika jumlah nilai inisialisasi yang ditentukan dalam kurung kurawal lebih kecil dari jumlah elemen array yang ditentukan dalam tanda kurung siku, maka semua elemen yang tersisa dalam array (yang nilai inisialisasinya tidak mencukupi) akan menjadi nol. Properti ini mudah digunakan untuk menyetel semua elemen array ke nilai nol.

ke dalam b = (0); // array b dari 10 elemen diinisialisasi ke 0


Jika array diinisialisasi saat dideklarasikan, maka nilai awal konstanta elemen-elemennya ditunjukkan dengan dipisahkan koma dalam kurung kurawal. Dalam hal ini, jumlah elemen dalam tanda kurung siku dapat dihilangkan.

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

Saat mengakses elemen array, indeks elemen yang diperlukan ditunjukkan dalam tanda kurung siku.

Contoh di C

1
2
3
4
5
6
7
8

#termasuk
ke dalam utama()
{
int a = ( 5, 4, 3, 2, 1 ); // array a berisi 5 elemen
printf("%d %d %d %d %d\n" ,a,a,a,a,a);
getchar();
kembali 0;
}

Hasil eksekusi program:

Namun, seringkali nilai elemen array perlu diatur selama eksekusi program. Ini menggunakan deklarasi array tanpa inisialisasi. Dalam hal ini, penunjukan jumlah elemen dalam tanda kurung siku adalah wajib.

ke dalam;

Untuk mengatur nilai awal elemen array, loop parametrik sangat sering digunakan:

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


#termasuk
ke dalam utama()
{
ke dalam;
ke dalam aku;
// Memasukkan elemen array
untuk (saya = 0; saya<5; i++)
{
printf("a[%d] = ",i);
scanf("%d", &a[i]);
}
// Keluaran elemen array
untuk (saya = 0; saya<5; i++)
printf("%d ", a[i]); // spasi dalam format cetak diperlukan
getchar(); getchar();
kembali 0;
}

Hasil eksekusi program

Array multidimensi

Array multidimensi juga dapat dideklarasikan dalam C. Perbedaan antara array multidimensi dan array satu dimensi adalah bahwa dalam array satu dimensi, posisi suatu elemen ditentukan oleh satu indeks, dan dalam array multidimensi - oleh beberapa indeks. Contoh array multidimensi adalah matriks.

Bentuk umum mendeklarasikan array multidimensi

ketik nama[dimensi1][dimensi2]...[dimensim];

Elemen array multidimensi terletak di sel RAM yang berurutan dalam urutan alamat yang menaik. Dalam memori komputer, elemen-elemen array multidimensi disusun berjajar, misalnya array dengan 2 baris dan 3 kolom,

ke dalam;


akan ditempatkan di memori sebagai berikut

Jumlah total elemen dalam array dua dimensi tertentu ditentukan sebagai

Jumlah Baris * Jumlah Kolom = 2 * 3 = 6.

Jumlah byte memori yang diperlukan untuk menampung array diberikan oleh

Jumlah Item * Ukuran Item = 6 * 4 = 24 byte.

Inisialisasi array multidimensi

Nilai elemen array multidimensi, seperti dalam kasus satu dimensi, dapat ditentukan dengan nilai konstanta saat dideklarasikan, diapit tanda kurung kurawal (). Namun, dalam hal ini, jumlah elemen dalam baris dan kolom harus ditunjukkan dalam tanda kurung siku.

Contoh di C

1
2
3
4
5
6
7
8
9

#termasuk
ke dalam utama()
{
int a = ( 1, 2, 3, 4, 5, 6 );
printf("%d %d %d\n" ,a,a,a);
getchar();
kembali 0;
}



Namun, lebih sering Anda perlu memasukkan nilai elemen array multidimensi selama eksekusi program. Untuk tujuan ini, akan lebih mudah untuk menggunakan loop parametrik bersarang.

Contoh di C

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

#tentukan _CRT_SECURE_NO_WARNINGS
#termasuk
ke dalam utama()
{
ke dalam; // array 2 baris dan 3 kolom
ke dalam aku, j;
// Memasukkan elemen array
untuk (saya = 0; saya<2; i++) // mengulang-ulang baris
{
untuk (j = 0; j<3; j++) // mengulang kolom
{
printf("a[%d][%d] = ", saya, j);
scanf("%d", &a[i][j]);
}
}
// Keluaran elemen array
untuk (saya = 0; saya<2; i++) // mengulang-ulang baris
{
untuk (j = 0; j<3; j++) // mengulang kolom
{
printf("%d ", a[i][j]);
}
printf("\n" ); // garis baru
}
getchar(); getchar();
kembali 0;
}



Melewati array ke suatu fungsi

Pemrosesan array dapat diatur dengan mudah menggunakan fungsi khusus. Untuk memproses array, Anda harus meneruskan argumen ke fungsi tersebut

  • alamat susunan,
  • ukuran susunan.

Pengecualiannya adalah fungsi pemrosesan string, yang cukup meneruskan alamat saja.

Saat meneruskan variabel sebagai argumen ke suatu fungsi, data diteruskan sebagai salinan. Artinya, jika nilai parameter di dalam suatu fungsi berubah, hal ini tidak akan memengaruhi nilainya di dalam fungsi pemanggil.

Jika alamat variabel (atau alamat array) diteruskan ke suatu fungsi, maka semua operasi yang dilakukan dalam fungsi pada data dalam lingkup alamat yang ditentukan dilakukan pada data asli, sehingga array asli (atau nilai variabel) dapat diubah oleh fungsi yang dipanggil.

Contoh dalam array C Dan yang terdiri dari 10 elemen. Tukar elemen terbesar dan elemen awal array. Untuk operasi pencarian dan pertukaran elemen secara maksimal, gunakan fungsi tersebut.

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

#tentukan _CRT_SECURE_NO_WARNINGS
#termasuk
// Fungsi pertukaran
batalkan perubahan(int *x, int n)
{
// x - penunjuk ke array (alamat array)
// n - ukuran larik
ke dalam aku;
int maks, indeks;
maks = x;
indeks = 0;
// Menemukan elemen maksimum
untuk (saya = 1; saya {
jika (x[i]>maks)
{
maks = x[i];
indeks = saya;
}
}
// Menukarkan
x = x;
x = maks;
}
// Fungsi utama
ke dalam utama()
{
ke dalam;
ke dalam aku;
untuk (saya = 0; saya<10; i++)
{
printf("a[%d] = ",i);
scanf("%d", &a[i]);
}
perubahan(a, 10); // memanggil fungsi pertukaran
// Keluaran elemen array
untuk (saya = 0; saya<10; i++)
printf("%d ", a[i]);
getchar();
getchar();
kembali
p = p * x[saya];
}
kembali p;
}
// Fungsi utama
ke dalam utama()
{
ke dalam; // mendeklarasikan array a yang terdiri dari 5 elemen
ke dalam aku;
ke dalam pr;
// Memasukkan elemen array
untuk (saya = 0; saya<5; i++)
{
printf("a[%d] = ",i);
scanf("%d", &a[i]); // &a[i] - alamat elemen ke-i dari array
}
pr = fungsi(a, 5); // menghitung produknya
printf("\n pr = %d", pr); // menampilkan hasil kali elemen genap
getchar(); getchar();
kembali 0;
}



Array dua dimensi dalam Pascal diperlakukan sebagai array satu dimensi yang tipe elemennya juga berupa array (array of array). Posisi elemen dalam array Pascal dua dimensi dijelaskan oleh dua indeks. Mereka dapat disajikan dalam bentuk tabel atau matriks persegi panjang.

Pertimbangkan array Pascal dua dimensi dengan dimensi 3*3, artinya, ia akan memiliki tiga garis, dan setiap baris akan memiliki tiga elemen:

Setiap elemen memiliki nomornya sendiri, seperti array satu dimensi, tetapi sekarang nomor tersebut sudah terdiri dari dua angka - nomor baris di mana elemen tersebut berada, dan nomor kolom. Jadi, nomor elemen ditentukan oleh perpotongan baris dan kolom. Misalnya, 21 adalah elemen yang muncul pada baris kedua dan kolom pertama.

Deskripsi array Pascal dua dimensi.

Ada beberapa cara untuk mendeklarasikan array Pascal dua dimensi.

Kita telah mengetahui cara mendeskripsikan array satu dimensi, yang elemen-elemennya dapat bertipe apa pun, dan oleh karena itu, elemen-elemen itu sendiri dapat berupa array. Perhatikan uraian tipe dan variabel berikut ini:

Contoh deskripsi array Pascal dua dimensi

Jenis
Vektor = larik<тип_элементов>;
Matriks= susunan vektor;
Var m: matriks;

Kita telah mendeklarasikan array Pascal dua dimensi m, terdiri dari 10 baris, masing-masing memiliki 5 kolom. Dalam hal ini, setiap baris ke-i dapat diakses dengan m[i], dan setiap elemen ke-j di dalam baris ke-i dapat diakses dengan m[i,j].

Definisi tipe array Pascal dua dimensi juga dapat ditentukan dalam satu baris:

Jenis
Matriks = array dari array< тип элементов >;
atau bahkan lebih sederhana:
jenis
matriks = array dari<тип элементов>;

Mengakses elemen array dua dimensi memiliki bentuk: M [i, j]. Artinya kita ingin mendapatkan elemen yang terletak pada baris ke-i dan kolom ke-j. Hal utama di sini adalah jangan mengacaukan baris dengan kolom, jika tidak, kita mungkin akan mengakses elemen yang tidak ada lagi. Misalnya, mengakses elemen M memiliki notasi yang benar, tetapi dapat menyebabkan kesalahan pada program.

Operasi dasar dengan array Pascal dua dimensi

Segala sesuatu yang telah dikatakan tentang operasi dasar dengan array satu dimensi juga berlaku untuk matriks. Satu-satunya tindakan yang dapat dilakukan pada seluruh matriks bertipe sama adalah penugasan. Artinya, jika program kita mendeskripsikan dua matriks bertipe sama, misalnya,

jenis
matriks= susunan bilangan bulat;
var
a , b: matriks ;

kemudian selama eksekusi program Anda dapat menetapkan matriks A nilai matriks B(Sebuah:= b). Semua tindakan lainnya dilakukan elemen demi elemen, dan semua operasi valid yang ditentukan untuk tipe data elemen array dapat dilakukan pada elemen tersebut. Ini berarti bahwa jika array terdiri dari bilangan bulat, maka operasi yang ditentukan untuk bilangan bulat dapat dilakukan pada elemennya, tetapi jika array terdiri dari karakter, maka operasi yang ditentukan untuk bekerja dengan karakter dapat diterapkan pada elemen tersebut.

Masukan array Pascal dua dimensi.

Untuk memasukkan elemen array satu dimensi secara berurutan, kami menggunakan perulangan for di mana kami mengubah nilai indeks dari yang pertama ke yang terakhir. Namun posisi suatu elemen dalam array Pascal dua dimensi ditentukan oleh dua indeks: nomor baris dan nomor kolom. Ini berarti kita perlu mengubah nomor baris secara berurutan dari tanggal 1 hingga terakhir dan di setiap baris melakukan iterasi melalui elemen kolom dari tanggal 1 hingga terakhir. Ini berarti kita memerlukan dua perulangan for, dengan salah satunya bertumpu pada perulangan lainnya.

Mari kita lihat contoh memasukkan array Pascal dua dimensi dari keyboard:

Contoh program untuk memasukkan array Pascal dua dimensi dari keyboard

jenis
matriks= susunan bilangan bulat;
var
a, : matriks;
saya, j: bilangan bulat; (indeks array)
mulai
for i:=1 to 5 do (perulangan untuk mengulangi semua baris)
bacaln(a[i,j]); (input keyboard dari elemen pada baris ke-i dan kolom ke-j)

Array Pascal dua dimensi dapat diisi secara acak, mis. gunakan fungsi acak (N), dan tetapkan juga nilai beberapa ekspresi untuk setiap elemen matriks. Metode untuk mengisi array Pascal dua dimensi bergantung pada tugas yang ada, tetapi bagaimanapun juga, setiap elemen di setiap baris dan setiap kolom harus didefinisikan.

Mencetak array Pascal dua dimensi ke layar.

Pencetakan elemen array Pascal dua dimensi juga dilakukan secara berurutan; elemen setiap baris dan setiap kolom perlu dicetak. Pada saat yang sama, saya ingin elemen-elemen pada baris yang sama dicetak berdampingan, mis. menjadi satu baris, dan elemen kolom terletak satu di bawah yang lain. Untuk melakukan ini, Anda perlu melakukan urutan tindakan berikut (pertimbangkan bagian program untuk array yang dijelaskan dalam contoh sebelumnya):

Contoh program untuk mencetak array Pascal dua dimensi

for i:=1 to 5 do (perulangan untuk mengulangi semua baris)
mulai
untuk j:=1 hingga 10 do (iterasi semua elemen baris demi kolom)
tulis(a[i,j]:4); (mencetak elemen yang terletak pada baris ke-i matriks dalam satu garis layar, dengan 4 posisi dialokasikan untuk menampilkan setiap elemen)
tulis; (sebelum mengubah nomor baris dalam matriks, Anda perlu memindahkan kursor ke awal baris layar baru)
akhir ;

Catatan ( itu penting!): sering sekali pada program pelajar terjadi error ketika mencoba masuk dari keyboard atau menampilkan array sebagai berikut: readln(a), writeln(a), dimana A adalah variabel array. Pada saat yang sama, mereka dikejutkan oleh pesan kompiler bahwa variabel jenis ini tidak dapat dibaca atau dicetak. Mungkin Anda akan mengerti mengapa hal ini tidak dapat dilakukan jika Anda membayangkan N mug berdiri berjajar, dan di tangan Anda, misalnya, ada ketel berisi air. Bisakah Anda menggunakan perintah “tuangkan air” untuk mengisi semua mug sekaligus? Tidak peduli seberapa keras Anda mencoba, Anda harus menuangkannya ke dalam setiap cangkir secara terpisah. Pengisian dan tampilan elemen array juga harus dilakukan secara berurutan dan elemen demi elemen, karena Dalam memori komputer, elemen array terletak di sel yang berurutan.

Representasi array Pascal dua dimensi dalam memori

Elemen array abstrak dalam memori mesin secara fisik ditempatkan secara berurutan, sesuai dengan deskripsi. Dalam hal ini, setiap elemen menempati jumlah byte dalam memori sesuai dengan ukurannya. Misalnya, jika sebuah array terdiri dari elemen bertipe integer, maka setiap elemen akan menempati dua byte. Dan seluruh array akan memakan S^2 byte, di mana S adalah jumlah elemen dalam array.

Dan berapa banyak ruang yang dibutuhkan oleh array yang terdiri dari array, mis. matriks? Jelasnya: S i^S j, dimana S i adalah banyaknya garis, dan S j adalah banyaknya elemen pada setiap baris. Misalnya, untuk array seperti

Matriks = array bilangan bulat;

Diperlukan memori 12 byte.

Bagaimana elemen array ini ditempatkan di memori? Mari kita pertimbangkan tata letak array M bertipe matriks di memori.

Untuk setiap elemen M bertipe integer, dua sel memori dialokasikan. Penempatan memori dilakukan dari bawah ke atas. Elemen ditempatkan dalam urutan perubahan indeks, yang sesuai dengan pola loop bersarang: baris pertama ditempatkan terlebih dahulu, lalu baris kedua, ketiga... Di dalam baris, elemen disusun secara berurutan: pertama, kedua, dst.

Seperti yang kita ketahui, akses ke variabel apa pun hanya dimungkinkan jika alamat sel memori tempat variabel disimpan diketahui. Memori khusus dialokasikan untuk variabel ketika program dimuat, yaitu korespondensi timbal balik dibuat antara variabel dan alamat sel. Tetapi jika kita mendeklarasikan suatu variabel sebagai array, maka program “mengetahui” alamat awal array, yaitu elemen pertamanya. Bagaimana Anda mengakses semua elemen array lainnya? Saat sebenarnya mengakses sel memori yang menyimpan elemen array dua dimensi, sistem menghitung alamatnya menggunakan rumus:

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

di mana Addr adalah alamat awal sebenarnya di mana array berada di memori; I, J – indeks elemen dalam array dua dimensi; SizeElem – ukuran elemen array (misalnya, dua byte untuk elemen bertipe integer); Cols – jumlah elemen dalam baris.

Ekspresi SizeElem * Cols *(I -1)+ SizeElem *(J -1) disebut offset relatif terhadap awal array.

Berapa banyak memori yang dialokasikan untuk array?

Mari kita pertimbangkan bukan pertanyaan tentang berapa banyak memori yang dialokasikan untuk array (kita telah membahasnya di bagian sebelumnya), tetapi berapa ukuran maksimum yang diperbolehkan dari array, mengingat jumlah memori yang terbatas.

Untuk pengoperasian program, memori dialokasikan dalam segmen masing-masing 64 KB, dan setidaknya satu di antaranya didefinisikan sebagai segmen data. Di segmen inilah data yang akan diproses oleh program berada. Tidak ada variabel program yang dapat ditempatkan di lebih dari satu segmen. Oleh karena itu, meskipun hanya ada satu variabel di segmen tersebut, yang digambarkan sebagai array, variabel tersebut tidak akan dapat menerima lebih dari 65536 byte. Namun hampir pasti, selain array, beberapa variabel lain akan dijelaskan di segmen data, sehingga jumlah sebenarnya memori yang dapat dialokasikan untuk array dicari dengan rumus: 65536-S, di mana S adalah jumlah memori sudah dialokasikan untuk variabel lain.

Mengapa kita perlu mengetahui hal ini? Agar tidak heran jika, selama kompilasi, penerjemah menampilkan pesan kesalahan tentang mendeklarasikan array yang terlalu panjang, ketika program menemukan deskripsi (benar dari sudut pandang sintaksis):

Ketik myArray= array bilangan bulat;

Anda telah mengetahui bahwa, dengan representasi bilangan bulat dua byte, sebenarnya dimungkinkan untuk mendeklarasikan array dengan jumlah elemen sama dengan 65536/2 –1=32767. Dan hanya jika tidak ada variabel lain. Array dua dimensi harus memiliki batas indeks yang lebih kecil lagi.

Contoh penyelesaian masalah dengan array Pascal dua dimensi

Tugas: Temukan produk elemen matriks bukan nol.

Larutan:

  • Untuk mengatasi masalah ini kita memerlukan variabel: matriks yang terdiri, misalnya, elemen bilangan bulat; P – hasil kali unsur-unsur selain 0; I, J – indeks array; N, M – jumlah baris dan kolom dalam matriks.
  • Data inputnya adalah N, M - kita akan memasukkan nilainya dari keyboard; matriks – kita akan memasukkan matriks dalam bentuk prosedur; kita akan mengisi matriks secara acak, yaitu menggunakan fungsi acak().
  • Data keluarannya akan menjadi nilai variabel P (produk).
  • Untuk memeriksa kebenaran pelaksanaan program, perlu untuk menampilkan matriks di layar; untuk ini kami akan memformalkan prosedur untuk menampilkan matriks.
  • Kemajuan dalam memecahkan masalah:

Mari kita bahas dulu eksekusi program utama; kita akan membahas implementasi prosedurnya nanti:

  • mari masukkan nilai N dan M;
  • Mari kita perkenalkan array Pascal dua dimensi, untuk ini kita beralih ke prosedur vvod (a), di mana a adalah matriks;
  • Mari kita cetak matriks yang dihasilkan; untuk melakukan ini, gunakan prosedur print (a);
  • Mari kita tetapkan nilai awal ke variabel P =1;
  • Kita akan melakukan iterasi secara berurutan melalui semua baris I dari tanggal 1 hingga ke-N, di setiap baris kita akan melakukan iterasi melalui semua kolom J dari tanggal 1 hingga ke-M, untuk setiap elemen matriks kita akan memeriksa kondisinya: jika a ij ? 0, maka hasil kali P akan dikalikan dengan unsur a ij (P = P * a ij);
  • Mari kita tampilkan nilai hasil kali elemen matriks bukan nol – P;

Sekarang mari kita bicara tentang prosedur.

Komentar (itu penting!) Parameter prosedur dapat berupa variabel apa pun dengan tipe yang telah ditentukan sebelumnya, yang berarti bahwa untuk meneruskan array sebagai parameter ke suatu prosedur, tipenya harus dijelaskan terlebih dahulu. Misalnya:

Jenis
Matriks=array bilangan bulat;
prosedur primer(a: matriks);
..............................

Sekarang mari kita kembali ke prosedur kita.

Prosedur untuk memasukkan matriks disebut vvod, parameter dari prosedur tersebut adalah matriks, dan sebagai hasilnya, harus diteruskan ke program utama, oleh karena itu, parameter tersebut harus diteruskan dengan referensi. Maka header prosedur kita akan terlihat seperti ini:

Prosedur vvod (var m: matriks);

Untuk mengimplementasikan loop bersarang dalam suatu prosedur, kita memerlukan variabel counter lokal, misalnya k dan h. Algoritma pengisian matriks sudah dibahas, jadi kami tidak akan mengulanginya.

Prosedur untuk menampilkan matriks di layar disebut print , parameter dari prosedur ini adalah matriks, tetapi dalam hal ini merupakan parameter masukan, oleh karena itu, diteruskan dengan nilai. Header dari prosedur ini akan terlihat seperti ini:

Prosedur cetak(m:matriks);

Dan sekali lagi, untuk mengimplementasikan loop bersarang di dalam suatu prosedur, kita memerlukan penghitung, biarkan namanya sama - k dan h. Algoritma untuk menampilkan matriks di layar telah dijelaskan di atas;

Contoh program array dua dimensi Pascal

Produksi program;
Jenis
Matriks=array bilangan bulat;
Var
J: matriks;
N, m, saya, j: byte;
P: bilangan bulat;
Prosedur vvod (var m: matriks);
Var k, h: byte;
Mulai
Untuk i:=1 hingga n do (variabel n untuk prosedur bersifat global, dan oleh karena itu “diketahui”)
Untuk j:=1 hingga m do (variabel m untuk prosedur bersifat global, dan oleh karena itu “diketahui”)
M:= acak(10);
Akhir;
Prosedur cetak(m:matriks);
Var k, h: byte;
Mulai
Untuk i:=1 sampai n lakukan
mulai
Untuk j:=1 sampai m lakukan
Menulis(M:4);
menulis;
akhir ;
Akhir ;
Begin (awal program utama)
Writeln("Masukkan dimensi matriks :");
Bacaln(N,M);
Vvod(a);
Cetak(a);
P:=1;
Untuk i:=1 sampai N lakukan
Untuk j:=1 sampai M lakukan
Jika sebuah<>0 lalu p:=p*a;
Tulis(p);
Akhir.