BAB IV LARIK DAN PENUNJUK I. DASAR TEORI A. Larik Larik (array) adalah struktrur data yang menyimpan sekumpulan elemen data yang bertipe sama dan memiliki nomor indeks yang berbeda-beda. Setiap elemen diakses melalui nomor indeksnya masing-masing. Indeks larik menyatakan urutan elemen-elemen data dalam larik. Indeks larik harus bertipe data yang menyatakan keterurutan misalnya, integer atau karakter. Dalam C/C++ nomer indeks larik biasanya dimulai dari nomor indeks ke-nol (0). Elemen-elemen data pada larik disimpan dalam suatu lokasi tertentu dimemori secara berurutan sesuai dengan nomor indeksnya. Dalam perhitungan matematika larik biasanya dipakai sebagai vektor atau matrik. 1) Larik Satu Dimensi Larik satu dimensi adalah larik yang anggota-anggotanya hanya menunjukkan deretan data satu arah. Dalam matrik, larik ini dapat digunakan untuk menangani data matrik vektor, baik vektor baris maupun vektor kolom. Gambaran larik satu dimensi dalam C/C++ dapat dilihat pada gambar 4.1 dibawah. Gambar ini menunjukkan struktur Larik Nil [ ] yang berisi enam nilai mahasiswa bertipe data int. Larik ini ditandai dengan nomor indeks yang dimulai dan nomor indeks ke- 0 hingga ke-5. Gambar 4.1 Struktur larik dalam C/C++ Sebelum digunakan atau diakses, larik mesti dideklarasikan atau didefinisikan terlebih dahulu. Bentuk umum pendeklarasian larik adalah : Universitas Gadjah Mada 1
Simbol tipe menyatakan tipe data dari masing masing elemen larik. Simbol nama_larik menyatakan nama pengenal yang diberikan untuk larik tersebut. Sedang jumlah_elemen menunjukkan jumlah data yang dimiliki oleh larik tersebut. Contoh 4.1 int nil_mhs[20]; float berat badan [101]; double data_suhu [10000]; Pengaksesan suatu larik dilakukan dengan pemberian nilai kepada anggota larik atau pengambilan nilai atau data dari anggota larik. Pengaksesan anggota larik tidak diperkenalkan diluar jumlah elemen yang telah didefinisikan pada suatu larik. Pengaksesan diluar jumlah elemen yang telah didefinisikan akan menyebabkan data dan variabel atau larik lain berubah. Disamping itu C++ tidak memberikan pesan kesalahan ketika terjadi pengaksesan diluar jumlah elemen yang telah didefinisikan. Bentuk umum pemberian nilai atau data ke anggota larik adalah: Bagian nama_larik menyatakan nama pengenal dan lank. Bagian indeks menunjukkan nomor elemen atau anggota larik yang akan diakses. Larik dalam C++ dimulai dan nomor indeks nol (0). Bagian data menunjukkan nilai data yang diisikan ke anggota larik. Tipe data dari bagian data harus sesuai dengan tipe data anggota larik. Data yang diisikan ke larik dapat berupa nilai yang dikandung oleh suatu variabel, konstanta atau anggota larik lain. Contoh 4.2 : nil mhs[4] = D ; // elemen ke-4 larik nil mhs [ ] diisi data karakter D berat badan [1] =60 // elemen ke -1 larik berat_badan [ ] diisi bilangan bulat 60 data_suhu[5] = data[6]; // elemen ke-5 larik data_suhu [ ] diisi data elemen // ke-6 larik data [ ] konstanta [1] = pi // elemen ke-1 konstanta [ ] diisi nilai konstanta pi = 3.14 Bentuk umum pengambilan nilai atau data dan anggota larik adalah : Universitas Gadjah Mada 2
Bagian variabel menunjukkan variabel tempat menampung data atau nilai yang telah diambil dati salah satu anggota larik. Tipe data dari variabel harus sesuai dengan tipe data anggota larik. Bagian nama_larik menyatakan nama pengenal dari larik. Bagian indeks menunjukkan nomor elemen atau anggota larik yang akan diakses atau diambil nilainya. Contoh 4.3 : Andi = nil mhs [4] ; // nilai elemen ke - 4 larik nil_mhs [ ] diisikan ke // variabel Andi Ahmad = berat_badan [1] ; // nilai elemen ke -1 larik berat badan [ ] diisikan ke // variabel Ahmad Data [5] = data_suhu [5] ; // nilai elemen ke -5 larik data_suhu [ ] // elemen ke-5 larik_data [ ] Suatu larik dapat juga diinisialisasi atau diberi nilai awal pada saat didefinisikan. Apabila suatu larik diinisialisasi saat didefinisikan, jumlah elemen larik boleh tidak disebutkan. Secara otomatis compiler C++ akan menghitung sendiri jumlah elemen larik. Contoh 4.4 : int jum_hari [ ]= { 31,28,31,30,31,30,31,31,30,31,30,31 Contoh : char nilai [ ] = { A, B, C, D, E } 2) Larik dua dimensi adalah larik yang anggota anggotanya menunjukkan deretan data dua arah atau dua indeks, yakni indeks baris dan kolom. Matrik dua dimensi senng dipakai untuk operasi matrik, dengan memakai indeks baris dan kolom. Lokasi anggota atau elemen larik dua dimensi ditunjukkan oleh indeks baris dan indeks kolomnya. Sehingga pengaksesan elemen larik harus menunjukkan nilai indeks baris dan indeks kolom larik. Gambaran larik banyak dimensi dapat disederhanakan dengan menunjukkan gambaran larik dua dimensi yang menyatakan suatu matrik dengan 5 baris (baris ke-0 hingga baris ke-4 ) dan 4 Universitas Gadjah Mada 3
kolom (kolom ke-0 hingga kolom ke-3) seperti yang terlihat pada gambar 4.2 berikut : Pada larik dua dimensi yang menyatakan matrik diatas, elemen baris ke-1 kolom ke-2 bernilai 0. Sedang elemen baris ke-3 kolom ke-2 bernilai 36. Sebelum dipakai, larik dua dimensi dideklarasikan terlebih dahulu. Bentuk umum pendeklarasian larik banyak dimensi adalah : Bagian tipe menyatakan tipe data dan masing-masing elemen larik. Bagian nama_larik menyatakan nama pengenal yang diberikan untuk larik. Sedang jmi_elemen_1 dan jmi_elemen_2 menunjukkan jumlah anggota larik pada indeks ke-1 dan ke-2. Lokasi data pada larik banyak dimensi ditunjukkan oleh beberapa nomor indeksnya secara serempak. Contoh 4.5 : int A [5][4] ; // larik atau matrik A terdiri atas 5 baris dan 4 kolom float B [4][4] ; // larik atau matrik B terdiri atas 4 baris dan 4 kolom. Pengaksesan larik dua dimensi dilakukan dengan pemberian nilai kepada anggota larik atau pengambilan nilai atau data dan anggota larik. Bentuk umum pengambilan nilai atau data dan anggota larik dua dimensi adalah : Universitas Gadjah Mada 4
Contoh 4.6: A [2] [1] =6; // Pengisian lank A baris ke-2 kolom ke-1 dengan bilangan 6 Nil [3][0] = A ; // Pengisian larik Nil baris ke-3 kolom ke - 0 dengan karakter A Tensor [2][4]= pi ; // Pengisian larik Tensor baris ke - 2 kolom ke 4 dengan nilai // konstanta pi = 4.13 adalah : Bentuk umum pengambilan nilai atau data dan anggota larik dua dimensi Bagian variabel menunjukkan variabel tempat menampung data atau nilai yang telah diambil dari salah satu anggota larik. Tipe data dan variabel harus sesuai dengan tipe data anggota larik. Bagian nama_larik menyatakan nama pengenal dari larik. Bagian indeks_1 dan indeks_2 menunjukkan indeks baris dan kolom anggota larik yang akan diakses. Contoh 4.7: data = A[2][1] ; // Elemen larik A baris ke-2 kolom ke-1 diisikan ke variabel // data Ahmad= NiI[3][0] ; // Elemen larik Nil baris ke-3 kolom ke-0 diisikan ke // variabel Ahmad Suatu larik dua dimensi juga diinisialisasi atau diberi nilai awal pada saat didefinisikan. Andaikan larik dua dimensi yang ditunjukkan pada gambar 4.2 adalah berupa matrik A, maka matrik ini dapat diinisialisasi pada saat pendefinisian larik sebagai berikut : Int A [ ] = { {45, 29, 34, 27 }, {84, 18, 0, 21}, {56, 38, 65, 15 }, {13, 52, 36, 39 }, {8, 3, 42,51} } ; Universitas Gadjah Mada 5
Contoh 4.8. : #include <iostreamh> void main() { int baris, kolom; float A[3][5] = { { 3, 4, 0.6, 32,3 }, { 12, 0.9, 1, 10, 2.6 }, { 2, 1, 0.6, 6, 3 }, cout << Nilai matrik A adalah : <<endl; for (baris =0 ; baris <3; baris ++) { for (kolom=0 ; kolom <5; kolom ++) { cout <<A [banis][kolom] << ; cout <<endl; } } 3) Larik Banyak Dimensi Larik banyak dimensi adalah larik yang anggota-anggotanya menunjukkan deretan data banyak arah atau banyak indeks. Larik banyak dimensi memiliki karakteristik yang mirip dengan matrik dua dimensi, kecuali indeksnya Iebih banyak. Bentuk umum pendeklarasian larik banyak dimensi adalah : Simbol tipe menyatakan tipe data dan masing-masing elemen larik. Bagian larik menyatakan nama pengenal yang diberikan untuk larik. Sedang jml_elemen_1, jml_elemen_2 dan jml_elemen_n menunjukkan jumlah anggota larik pada indeks ke-1, ke-2 hingga ke-n. Lokasi data pada larik banyak dimensi ditunjukkan oleh beberapa nomor indeksnya secara serempak. Contoh 4.9: int A[5][4] [3]; float B[4][4] [4]; Universitas Gadjah Mada 6
Pengaksesan larik banyak dimensi dilakukan dengan pemberian nilai kepada anggota larik atau pengambilan nilai atau data dari anggota larik. Bentuk umum pengambilan nilai atau data dari anggota larik banyak dimensi adalah : Bagian nama_larik menyatakan nama pengenal dan larik. Sedang jml_elemen_1, jml_elemen_2 dan jml_elemen_n menunjukkan jumlah anggota larik pada indeks ke-1, ke-2 hingga ke-n. Bagian data menunjukkan data yang diisikan ke anggota lariik. Tipe data dari bagian data harus sesuai dengan tipe data anggota larik. Data yang diisikan ke larik dapat berupa nilai yang dikandung oleh suatu variabel, konstanta atau anggota larik lain. Contoh 4.10 : A[5][4][3] =4.6; nil[4][4][4] = E konstanta [2][1][O] = pi; Bagian variabel menunjukkan variabel tempat menampung data atau nilai yang telah diambil dan salah satu anggota larik. Bagian nama_larik menyatakan nama pengenal dan larik. Sedang jml_elemen_1, jml_elemen_2 dan jml_elemen_n menunjukkan jumlah anggota larik pada indeks ke-1, ke-2 hingga ke-n. Contoh 4.11. : Ahmad = nil[4][4] [4] ; Data=A[5)[4][3] ; Suatu larik tiga dimensi dapat juga diinisialisasi atau diberi nilai awal pada saat didefinisikan. Contoh 4.12: float A [2] [3] [2] = { } ; { {2, 0.1}, {3.1, 0.7}, {9.6, 0.4}} { {3, 6}, {0.2, 3.2), { 2, 4}}, Universitas Gadjah Mada 7
B. Penunjuk Salah satu ciri bahasa C/C++ yang paling penting adalah penunjuk atau pointer. Tipe data penunjuk adalah tipe data yang berisi nilai alamat atau lokasi data di memori, bukan nilal datanya sendiri. Lokasi memori tersebut selanjutnya dapat diakses dan dimanipulasi lewat penunjuknya. Tipe data penunjuk menyediakan metode pemakaian memori secara dinamis, artinya ruang memori dapat dialokasikan atau dipesan saat akan dipakai serta dapat dialokasikan atau dibebaskan ketika sudah tidak dibutuhkan lagi. Berbeda dengan tipe data biasa dan larik dimana ruang memori dialokasikan selama eksekusi program. Deklarasi penunjuk dilakukan dengan menspesifikasikan * sebelum nama variabel / konstanta. Penunjuk dapat dipakali untuk operasi dengan tipe data biasa ataupun larik 1) Penunjuk Tipe Data Biasa Penunjuk tipe data biasa adalah penunjuk yang isinya menunjukkan lokasi memori tempat menyimpan data biasa, bukan larik. Bentuk umum pendeklarasian penunjuk untuk operasi dengan tipe data biasa adalah : Bagian tipe menunjukkan tipe data penunjuk. Sedang bagian nama penunjuk menunjukkan nama yang diberikan untuk penunjuk tersebut. Contoh 4.13 : int * pnilai; int* pharga; char * pkarakter; Lokasi memori yang akan ditunjuk oleh penunjuk yang tetah dideklarasikan harus dialokasikan atau dipesan terlebih dahulu sebelum dipakai untuk menyimpan data. Jika tidak dialokasikan, maka penunjuk akan menunjuk ke lokasi memori yang tidak tepat. Pengalokasian memori untuk penunjuk yang memakai tipe data biasa berbeda dengan pengalokasian memori untuk larik. Pengalokasian memori untuk tipe data biasa dalam bahasa pemprogaman C++ memiliki bentuk umum sebagai berikut : Universitas Gadjah Mada 8
Contoh 4.14 : pnilai = new int; pharga = new float; pkarakter = new char, Pendeklarasian penunjuk juga dapat digabung dengan pengalokasian memori yang memiliki bentuk sebagai berikut : Contoh 4.15 : int* pnilai = new int; float *pharga= new float; char *pkarer = new char; Pengaksesan penunjuk merupakan pemberian nilai ke atau pembacaan nilai dan lokasi memori yang ditunjuk oleh penunjuk. Bentuk umum pemberian nilai ke lokasi memori yang ditunjuk oleh penunjuk adalah : Bagian nama_penunjuk menunjukkan nama yang diberikan untuk penunjuk. Bagian data menunjukkan nilai data yang diisikan ke lokasi memori yang ditunjuk oleh penunjuk. Tipe data dari bagian data harus sesuai dengan tipe data yang ada pada lokasi memori yang ditunjuk oleh penunjuk dapat berupa nilai yang dikandung oleh suatu variabel, konstanta atau lokasi memori yang ditunjuk oleh penunjuk lain. Contoh 4.16 : Pnilai = 73 Pharga = 2.87; Pkarakter = B Bentuk umum pengambilan nilai dari lokasi memori yang ditunjuk oleh penunjuk adalah : Universitas Gadjah Mada 9
Bagian variabel menunjukkan variabel tempat menampung data atau nilai yang telah diambil dari lokasi memori yang ditunjuk oleh petunjuk. Tipe data dari variabel harus sesuai dengan tipe data dari nilai yang ada di lokasi memori yang ditunjuk oleh penunjuk. Bagian nama_penunjuk menunjukkan nama yang diberikan oleh penunjuk. Contoh 4.17: ahmad = pnilai; data =pharga; huruf= pkarakter; Setelah data yang disimpan pada lokasi memori yang ditunjuk oleh penunjuk tidak pakai lagi, maka lokasi memori itu dapat didealokasi (dibebaskan atau dikosongkan). Pembebasan lokasi memori arti lokasi memoni yang ditunjuk oleh penunjuk tidak dipakai lagi dan dapat dipakai untuk kepentingan yang lain. Data atau nilai yang tersimpan pada lokasi memori tersebut akan hilang. Penunjuk dapat menunjuk ke lokasi memori yang lain jika diperlukan dengan terlebih dahulu mengalokasikan atau memesan ruang memori tersebut. Bentuk umum pendealokasian lokasi memori yang ditunjuk oleh penunjuk adalah : Kata kunci delete menunjukan operasi pembebasan atau pendealokasian lokasi memori yang ditunjuk oleh penunjuk. Contoh 4.18: delete pnilai; delete pharga; delete pkarakter; 2) Penunjuk Larik Penunjuk larik adalah penunjuk yang isinya menunjukkan lokasi memori tempat menyimpan data larik. Bentuk umum pendeklarasian penunjuk untuk operasi dengan larik adalah : Bagian tipe menunjukkan tipe data penunjuk. Sedang bagian nama_penunjuk menunjukkan nama yang diberikan untuk penunjuk tersebut. Universitas Gadjah Mada 10
Contoh 4.19 : int * pdata int * psuhu; char * pnilai; Pengalokasian memori untuk penunjuk yang memakai tipe data larik dalam bahasa pemprograman C++ memiliki bentuk umum sebagai berikut : Bagian nama_petunjuk menunjukkan nama yang diberikan untuk penunjuk. Kata kunci new menunjukkan operasi pengalokasian ruang memori. Sedang baian tipe menunjukkan tipe data dan anggota-anggota larik yang disimpan pada lokasi memori yang ditunjuk oleh penunjuk. Bagian jumlah_elemen menunjukkan jumlah elemen data yang dimiliki larik yang disimpan pada lokasi memori yang ditunjuk oleh penunjuk. Contoh 4.20 : pdata = new int [50]; psuhu = new float [100]; pnilai = new char [601]; Pendeklarasian penunjuk untuk larik juga dapat digabung dengan pengalokasian lokasi memori yang memiliki bentuk sebagai berikut : Pengaksesan penunjuk untuk larik merupakan pemberian nilai ke atau pembacaan nilai dan salah satu elemen atau anggota larik yang ada pada lokasi memori yang ditunjuk oleh penunjuk. Bentuk umum pemberian nilai ke salah satu elemen atau anggota larik yang ada pada lokasi memori yang ditunjuk oleh penunjuk adalah : Bagian nama_penunjuk menunjukkan nama yang diberikan untuk penunjuk. Bagian data menunjukkan nilal data yang diisikan ke elemen atau anggota larik yang ada pada lokasi memori yang ditunjuk oleh penunjuk. Tipe data dan bagian data harus sesuai dengan tipe data anggota larik. Data yang diisikan ke lokasi Universitas Gadjah Mada 11
memori yang ditunjuk oleh penunjuk dapat berupa nilai yang dikandung oleh suatu variabel, konstanta atau anggota larik lain lain. Sedang bagian indeks menunjukkan nomor unit elemen atau anggota larik yang dibaca. Contoh 4.22 : pdata [3] = 100; psuhu [0] = 50.3; pnilai [23] = D ; Bentuk umum pengambilan nilai dan salah satu elemen atau anggota larik yang ada pada lokasi memori yang ditunjuk oleh penunjuk adalah : Setelah larik yang disimpan pada lokasi memori yang ditunjuk oleh penunjuk tidak pakai lagi, maka lokasi memori itu dapat didealokasi (dibebaskan atau dikosongkan). Bentuk umum pendealokasian lokasi memoriyang dipakai untuk larik adalah : Kata kunci delete diikuti oleh nama_penunjuk dan tanda [ ] menunjukan operasi pembebasan atau pendealokasian lokasi memoni bensi lank yang ditunjuk oleh penunjuk. Contoh 4.24: delete pdata []; delete psuhu []; delete pnilai []; Universitas Gadjah Mada 12
II. STUDI KASUS Studi Kasus 1 Berikut ini ditunjukkan program untuk menghitung rata rata dengan menggunakan larik. Studi Kasus 2 Berikut ini ditunjukkan program untuk menghitung rata-rata data dengan menggunakan penunjuk. Universitas Gadjah Mada 13
Studi Kasus 3 Berikut ini ditunjukkan program untuk mengurutkan data dan kecil ke besar dengan menggunakan larik. Studi Kasus 4 Berikut ini ditunjukkan program untuk menghitung mean dan modus data dengan menggunakan fungsi dan penunjuk. Universitas Gadjah Mada 14
Studi Kasus 5 Berikut ini ditunjukkan program untuk menghitung penjumlahan dua buah matrik orde 4x4 dengan nilai tiap matrik sudah diinisialisasi diawal program. Universitas Gadjah Mada 15
Studi Kasus 6 Berikut ini ditunjukkan program untuk menghitung perkalian dua buah matrik orde 4x4 dengan nilai tiap matrik sudah diinisialisasi diawal program. Universitas Gadjah Mada 16
III. LATIHAN Latihan I Buatlah program untuk mengurutkan data dan besar ke kecil dengan menggunakan penunjuk dan fungsi. Latihan 2 Buatlah program untuk menghitung perbedaan suhu rata-rata dua tempat yang diukur pada saat yang sama dengan menggunakan penunjuk sebagai tempat penyimpanan data. Latihan 3 Buat program dengan menggunakan fungsi dan penunjuk untuk menghitung median, deviasi standar dan variansi dan sekumpulan data. Petunjuk : Jika dipunyai i data x i yang berjumlah N maka : Universitas Gadjah Mada 17
Latihan 4 Tulislah program dengan menggunakan fungsi untuk menghitung hambatan pengganti dan N resistor yang dipasang secara seri atau paralel. Masukan dan program ini adalah jumlah resistor (N) dan N bilangan real yang masing-masing menyatakan besamya hambatan pengganti jika N resistor tersebut dipasang secara seri maupun paralel. Petunjuk : - Hambatan pengganti dari N resistor, R1, R2, R3,, R N yang dipasang seri adalah : - Hambatan pengganti dari N resistor, R1, R2, R3,, R N yang dipasang paralel adalah : Latihan 5 Buatlah program untuk menghitung penjumlahan, pengurangan dan perkalian matrik dengan menggunakan fungsi dan penunjuk. Latihan 6 Buatlah program untuk menghitung determinan matrik orde nxn dengan menggunakan larik. Latihan 7 Buatlah program untuk menghitung myers dan matrik orde nxn dengan menggunakan larik. Latihan 8 Buatlah program untuk menghitung titik pusat masa dari n buah masa partikel yang diketahui koordinat titik-titik partikelnya dalam sistem koordinat kartesian tiga dimensi. Data masa dan koordinat partikel dapat diletakkan dalam larik atau penunjuk. Universitas Gadjah Mada 18
Latihan 9 Tulislah program dengan menggunakan fungsi untuk menghitung kapasitansi pengganti dan N kapasitor yang dipasang secara seri atau paralel. Masukan dari program ini adalah jumlah kapasitor (=N) dan N bilangan real yang masing masing menyatakan besarnya kapasitansi pengganti jika N kapasitor tersebut dipasang secara seri maupun paralel. Universitas Gadjah Mada 19