Algoritma dan Pemrograman
6/1/2008
MATRIKS Algoritma dan Pemrograman Tahar Agastani Teknik Informatika UIN - 2008
Overview • • • •
Definisi Struktur Matriks Array Dimensi Dua Mengakses (Isi dan Baca) data – – – –
Inisialisasi Passing Parameter Mengisi Matriks Menampilkan Matriks
• Menambahkan Dua Matriks • Mengalikan Dua Matriks 2
Kuliah Minggu ke 20
1
Algoritma dan Pemrograman
6/1/2008
Definisi • Di dalam matematika matriks adalah sebuah tabel dari kuantitas-kuantitas abstrak yang bisa dijumlahkan dan dikalikan. • Di dalam ilmu komputer matriks dinyatakan sebagai array dua dimensi.
3
Struktur Matriks Matriks A(m x n) a i,j m baris
A=
i perubahan
n kolom
a 0,0 a 1,0 a 2,0 . .
a 0,1 a 1,1 a 2,1 . .
j perubahan
a 0,2 . . . a 1,2 . . . a 2,2 . . . . . . . . . 4
Kuliah Minggu ke 20
2
Algoritma dan Pemrograman
6/1/2008
Array Dimensi Dua Sintaks deklarasi array dimensi dua: type nama_array[jumlahbaris][jumlah kolom] contoh : int A[3][4]; Elemen-elemen array bisa digambarkan seperti matriks berikut ini: Indeks Baris
Indeks Kolom 0
1
2
3
0
A[0][0]
A[0][1]
A[0][2]
A[0][3]
1
A[1][0]
A[1][1]
A[1][2]
A[1][3]
2
A[2][0]
A[2][1]
A[2][2]
A[2][3] 5
Mengakses (Isi dan Baca) Data Untuk mengakses elemen baris ke-i dan kolom ke-j suatu array dua dimensi ada lima cara yang ekivalen: 1. A[i][j] 2. *(A[i] + j) 3. (*(A + i))[j] 4. *((*(A + i)) + j) 5. *(&A[0][0] + kol*i + j) Mengisi data ke elemen array dilakukan dengan menggunakan assignment operator. Contoh : A[1][1]= 15; A[2][3]= 27; 6
Kuliah Minggu ke 20
3
Algoritma dan Pemrograman
6/1/2008
Inisialisasi
Inisialisasi secara eksplisit saat didefinisikan ada tiga cara yang ekivalen: int A[2][3] = {1,2,3,4,5,6}; int A[2][3] = {{1,2,3}, {4,5,6}}; int A[ ][3] = {{1,2,3}, {4,5,6}};
Inisialisasi setelah didefinisikan: int A[2][3]; for(i=0;i<2;i++) for(j=0;j<3;j++) A[i][j] = 0;
7
Passing Parameter
Jika array digunakan sebagai parameter dalam suatu fungsi, maka passing parameter sbb: int A[][3] atau int (*A)[3]
Contoh: #include <stdio.h> void cetak_array(int xi, int xj, int A[][3]) { printf(“Arr[%d][%d]=%d\n”,xi,xj,A[xi][xj]); } void main() { int Arr[][3] = {{1, 2, 3},{4, 5, 6}}; cetak_array (1, 2, Arr); }
Kuliah Minggu ke 20
8
4
Algoritma dan Pemrograman
6/1/2008
Mengisi Matriks Pengisian matriks atau array dua dimensi pada dasarnya sama dengan pengisian array satu dimensi. Perbedaannya hanya pada penentuan indeks array yang akan diisi. void isi_matriks(int MatX[][MATSIZE], int bar, int kol) { int i,j; for(i=0;i
Menampilkan Isi Matriks Menampilkan isi matriks juga berdasarkan pada penentuan indeks array. void cetak_matriks(int MatX[][MATSIZE], int bar,int kol) { int i,j; for(i=0;i
Kuliah Minggu ke 20
5
Algoritma dan Pemrograman
6/1/2008
Program Mengisi dan MenampilkanMatriks #include <stdio.h> #define MATSIZE 15 void isi_matriks(int MatX[][MATSIZE], int bar, int kol); void cetak_matriks(int MatX[][MATSIZE], int bar,int kol); void main() { int MatA[MATSIZE][MATSIZE]; int bar, kol; printf("Jumlah baris: "); scanf("%d",&bar); printf("Jumlah kolom: "); scanf("%d",&kol); isi_matriks(MatA,bar,kol); putchar('\n'); printf("Isi Matriks: \n"); cetak_matriks(MatA,bar,kol); }
11
Menambahkan Dua Matriks Dua atau lebih matriks dari dimensi yang sama mxn bisa ditambahkan. Ambil matriks A dan B dengan dimensi mxn maka: A + B = (ai,j+bi,j)1≤i<m;1≤j
12
Kuliah Minggu ke 20
6
Algoritma dan Pemrograman
6/1/2008
Algoritma dan Implementasi 1. Pastikan matriks yang ditambahkan berukuran sama. 2. Tambahkan elemen-elemen kedua matriks dari indeks yang bersesuaian dan hasilnya taruh di matriks baru. Untuk implementasi, matriks menggunakan struktur data record (struct), sbb: struct Mat { int elm[MATSIZE][MATSIZE]; int bar, kol; }; Keuntungannya: setiap kali matriks diakses langsung diketahui dimensinya (baris dan kolom) 13
Fungsi Penambahan Matriks void mat_add(Mat &MatA, Mat &MatB, Mat &MatC) { int i,j,k; if((MatA.bar!=MatB.bar)|| (MatA.kol!=MatB.kol)) { printf("Matriks tidak dapat dijumlahkan."); exit(0); }else{ MatC.bar = MatA.bar; MatC.kol = MatA.kol; for(i=0;i<MatC.bar;i++) for(j=0;j<MatC.kol;j++) MatC.elm[i][j] = MatA.elm[i][j]+MatB.elm[i][j]; } } 14
Kuliah Minggu ke 20
7
Algoritma dan Pemrograman
6/1/2008
Mengalikan Dua Matriks Mengalikan dua matriks didefinisikan hanya bila jumlah kolom dari matriks sebelah kiri sama dengan jumlah baris dari matriks sebelah kanan. Jika A adalah matriks mxn dan B adalah matriks nxp, maka hasil perkalian AB adalah matriks mxp sbb: (AB)i,j = ai,1b1,j+ai,2b2,j+...+ai,nbn,j untuk setiap pasangan (i,j) Contoh:
15
Algoritma dan Implementasi 1.
Pastikan kolom matriks kiri berukuran sama dengan baris matriks kanan. 2. Kalikan kedua matriks berdasarkan pada rumus perkalian matriks (diatas) dan hasilnya taruh di matriks baru . Seperti pada penambahan matriks, untuk implementasi matriks menggunakan struktur data record (struct) seperti di atas. struct Mat { int elm[MATSIZE][MATSIZE]; int bar, kol; };
Kuliah Minggu ke 20
16
8
Algoritma dan Pemrograman
6/1/2008
Fungsi Perkalian Matriks void mat_mul(Mat &MatA, Mat &MatB, Mat &MatC) { int i,j,k; if(MatA.kol != MatB.bar) { printf("Matriks tidak dapat dikalikan."); exit(0); }else{ MatC.bar = MatA.bar; MatC.kol = MatB.kol; for(i=0;i<MatA.bar;i++) for(j=0;j<MatB.kol;j++) for(k=0;k<MatA.kol;k++) MatC.elm[i][j] += MatA.elm[i][k] * MatB.elm[k][j]; } } 17
Latihan 1. Tulis sebuah program yang mendeklarasikan array ukuran 3x5 dan inisialisasi array tersebut dengan sejumlah nilai pilihan anda. Buat program mencetak nilainilai tersebut, kalikan semua nilai dengan 3, kemudian tampilkan nilai-nilai baru tersebut. Tulis sebuah fungsi untuk menampilkan dan sebuah fungsi untuk mengalikan dengan 3. 2. Tulis sebuah program yang meminta pengguna untuk memasukkan tiga set dengan masing-masing set berupa lima bilangan double. Program harus menyelesaikan halhal berikut ini: 1. Menyimpan data tersebut dalam array ukuran 3x5. 2. Menghitung nilai rata-rata dari setiap set. 3. Menghitung nilai rata-rata dari ke 15 bilangan. 4. Menentukan nilai terbesar dari ke 15 bilangan 18
Kuliah Minggu ke 20
9
Algoritma dan Pemrograman
6/1/2008
SELESAI
19
Kuliah Minggu ke 20
10