Program C : Matriks

Assalamualaikum ...

Selamat pagi. Di pagi hari yang mendung ini, saya kembali akan membahas materi pemrograman dengan bahasa C. Kali ini, materi yang akan saya bahas adalah matriks. Tidak, kita tidak akan bicara tentang film science fiction "The Matrix" itu. Kita akan bicara tentang matriks yang ada di matematika.

Matriks menurut Wikipedia adalah kumpulan bilangan, simbol, atau ekspresi berbentuk persegi panjang yang disusun menurut baris dan kolom. Matriks biasanya diterapkan dalam penyelesaian sistem persamaan linear dan transformasi linear. Matriks dapat diterapkan beberapa operasi matematika, seperti penjumlahan, pengurangan, perkalian, dan dekomposisi.

Sumber : http://rumusrumus.com/wp-content/uploads/2015/06/
cara-menghitung-rumus-perkalian-matriks-dan-rumus-perkalian-
skalar-matriks-matematika.png

Matriks juga dapat diterapkan pada pemrograman. Pemahaman yang diperlukan untuk hal ini adalah pemahaman tentang pengulangan (looping). Anda tentu sudah tahu bahwa dalam program C, kita dapat memberikan instruksi pengulangan dengan pernyataan for, while, dan do-while. Ketiga bentuk tersebut dapat diterapkan untuk melakukan looping di dalam looping. Nah, karena matriks melibatkan pembacaan karakter untuk baris dan kolom (sebanyak dua kali), konsep looping di dalam looping dapat diterapkan.

Sumber : Dokumen pribadi

Seperti yang dapat Anda lihat pada potongan kode program di atas, pernyataan for dinyatakan dua kali. Pernyataan pertama adalah pengulangan untuk membaca input secara horizontal (baris), sedangkan pernyataan kedua adalah pengulangan untuk membaca input secara vertikal (kolom). Pada saat i bernilai 0 (baris pertama), j akan bernilai nol dan membaca input untuk a[0][0]. Kemudian, nilai j bertambah hingga nilai m-1 (dalam contoh di atas nilai j kurang dari m) dan selama itu program akan looping membaca input untuk a[0][1]a[0][2], hingga a[0][n-1]. Kemudian, nilai i bertambah yang berarti pembacaan karakter untuk baris selanjutnya dan selanjutnya program akan membaca input untuk a[1][0]a[1][1]a[1][2] hingga a[1][m-1]. Begitu seterusnya hingga looping selesai, yaitu ketika pembacaan karakter untuk a[n-1][m-1].

Sekarang, saya akan membahas beberapa contoh penerapan matriks dalam pemrograman C. Seperti biasa, kode program akan saya tampilkan di sini. Besar harapan saya bahwa ini akan membantu para pembaca untuk memahami matriks dalam pemrograman. Berikut adalah contoh-contoh tersebut.


1. Cetak kolom matriks tertentu

Program berikut akan menampilkan kolom matriks tertentu dari sebuah matriks yang nilai-nilainya di-input pengguna dengan ukuran matriks yang juga ditentukan pengguna.


#include <stdio.h>
#define SIZE 400

int main(){
int a[SIZE][SIZE],i,j,kolom,n,m;
scanf("%d %d", &n, &m);
printf("\n");
for(i=0;i<n;i++){
for(j=0;j<m;j++){
scanf("%d", &a[i][j]);
}
}
printf("\n");
scanf("%d", &kolom);
printf("\n");
for(i=0;i<n;i++){
printf("%d\n", a[i][kolom-1]);
}
return 0;
}


Output dari program di atas adalah seperti berikut.

Sumber : Dokumen pribadi

Anda tentu dapat mengubah kode program di atas untuk membaca baris tertentu dari sebuah matriks. Mudah bukan?


2. Selisih dua matriks

Kali ini, kita diminta untuk membuat program C yang dapat mengeluarkan output matriks selisih antara dua matriks. Jadi, kita akan input suatu matriks, lalu input matriks kedua, dan program akan mengeluarkan matriks selisih antara dua matriks tersebut. Tentu saja, kedua matriks yang di-input harus berukuran sama. Nah, berikut kode program untuk masalah ini.


#include <stdio.h>
#include <math.h>
#define UKURAN 400

int main(){
int m,n,a[UKURAN][UKURAN],b[UKURAN][UKURAN],k,i,j;
scanf("%d %d", &m, &n);
printf("\n");
for(i=0;i<m;i++){
for(j=0;j<n;j++){
scanf("%d", &a[i][j]);
}
}
printf("\n");
for(i=0;i<m;i++){
for(j=0;j<n;j++){
scanf("%d", &b[i][j]);
}
}
printf("\n");
for(i=0;i<m;i++){
for(j=0;j<n;j++){
printf("%d", a[i][j]-b[i][j]);
if((j+1)%n==0) printf("\n");
else printf(" ");
}
}
return 0;
}


Output dari program di atas adalah seperti berikut.

Sumber : Dokumen pribadi

Untuk mengefisiensikan waktu, kita dapat menyatakan operasi pengurangan dengan hanya menggunakan satu looping di dalam looping dengan pernyataan printf("%d", a[i][j]-b[i][j]) daripada mendefinisikan satu variabel matriks lain, misal c, lalu menyatakan looping di dalam looping untuk c[i][j]=a[i][j]+b[i][j], lalu menyatakan looping di dalam looping lagi untuk mencetak matriks c. Cara ini dapat mengefisiensikan waktu penulisan program, waktu eksekusi program, dan memori yang diperlukan program. Tentu saja, Anda dapat mengubah baris printf("%d", a[i][j]-b[i][j]) untuk mencari matriks jumlah antara dua matriks dan matriks hasil operasi tertentu suatu matriks dengan suatu nilai skalar.


3. Matriks transpos

Masihkah Anda ingat, apakah itu matriks transpos? Ya, matriks transpos adalah matriks yang diperoleh dari penukaran baris menjadi kolom dan kolom menjadi baris dari matriks aslinya. Jika sebuah matriks dinotasikan A, maka matriks transpos biasanya dinotasikan AT.

Sumber : http://2.bp.blogspot.com/-t-YaZRArQ_Q/
VL0epaymQxI/AAAAAAAAHJs/nN88FcehpTM/s1600/
Pengertian%2BTranspose%2BMatriks,%2BSifat-sifatnya%2Bserta%2BContoh%2BSoal%2Bdan%2BPembahasan%2B1.png

Nah, kali ini kita diminta untuk membuat program C yang menghasilkan output berupa sebuah matriks transpos. Berikut kode program untuk masalah tersebut.


#include <stdio.h>
#define UKURAN 100

int main(){
int row,column,i,j,m[UKURAN][UKURAN];
scanf("%d %d", &row, &column);
printf("\n");
for(i=0;i<row;i++){
for(j=0;j<column;j++){
scanf("%d", &m[i][j]);
}
}
printf("\n");
for(j=0;j<column;j++){
for(i=0;i<row;i++){
printf("%d", m[i][j]);
if(i==row-1) printf("\n");
else printf(" ");
}
}
return 0;
}


Output dari program di atas adalah seperti berikut.

Sumber : Dokumen pribadi

Kode program di atas mengeluarkan output matriks transpos hanya dengan penukaran pernyataan looping di dalam looping. Jika sebelumnya kita menyatakan looping pertama untuk baris dan looping kedua untuk kolom, kali ini kita balik kedua pernyataan tersebut. Lebih simpel bukan?


4. Indeks submatriks

Submatriks adalah matriks berukuran tertentu yang elemen-elemennya adalah elemen-elemen dari sebuah matriks yang berukuran lebih besar. Nah, kali ini kita diminta membuat program C yang mengeluarkan output indeks elemen pertama submatriks tertentu dari sebuah matriks (indeks yang dimaksud adalah indeks elemen tersebut pada matriks yang lebih besar). Untuk lebih jelasnya, perhatikan penjelasan berikut.

Sumber : http://poj.org/images/1387_1.jpg

Contoh Masukan

5   5  -----------> Input ukuran matriks besar
1   2   3   4   5
5   4   3   2   1
0   9   8   7   6
6   7   8   9   0
5   7   4   8   1
3   3 -----------> Input ukuran submatriks
4   3   2
9   8   7
7   8   9

Contoh Keluaran

1   1

Penjelasan

Elemen pertama submatriks pada contoh di atas, yaitu 4, adalah elemen baris pertama dan kolom pertama pada matriks besar. Oleh karena itu, program mengeluarkan output 1 dan 1.

Kode program untuk masalah ini adalah sebagai berikut.


#include <stdio.h>
#define SIZE 100

int main(){
int row1,column1,m1[SIZE][SIZE],row2,column2,m2[SIZE][SIZE],i,j;
scanf("%d %d", &row1, &column1);
printf("\n");
for(i=0;i<row1;i++){
for(j=0;j<column1;j++){
scanf("%d", &m1[i][j]);
}
}
printf("\n");
scanf("%d %d", &row2, &column2);
printf("\n");
for(i=0;i<row2;i++){
for(j=0;j<column2;j++){
scanf("%d", &m2[i][j]);
}
}
printf("\n");
for(i=0;i<row1;i++){
for(j=0;j<column1;j++){
if(m1[i][j]==m2[0][0] && m1[i+row2-1][j+column2-1]==m2[row2-1][column2-1]){
printf("%d %d\n", i, j);
}
}
}
return 0;
}


Output dari program di atas adalah seperti berikut.

Sumber : Dokumen pribadi


5. Tukar dua baris matriks

Kali ini, kita diminta membuat program C yang mengeluarkan output berupa matriks dengan dua baris yang telah ditukar dari matriks aslinya. Baris-baris yang ditukar ditentukan oleh pengguna. Berikut adalah kode program untuk masalah tersebut.


#include <stdio.h>
#define UKURAN 100

int main(){
int m,n,i,j,a[UKURAN][UKURAN],row1,row2,sementara;
scanf("%d %d %d %d", &m, &n, &row1, &row2);
printf("\n");
for(i=0;i<m;i++){
for(j=0;j<n;j++){
scanf("%d", &a[i][j]);
}
}
printf("\n");
for(i=0;i<m;i++){
sementara=a[row1-1][i];
a[row1-1][i]=a[row2-1][i];
a[row2-1][i]=sementara;
}
printf("\n");
for(i=0;i<m;i++){
for(j=0;j<n;j++){
printf("%d", a[i][j]);
if(j==n-1) printf("\n");
else printf(" ");
}
}
return 0;
}


Output dari program di atas adalah seperti berikut.

Sumber : Dokumen pribadi

Program C di atas melibatkan variabel sementara yang digunakan untuk menyimpan nilai yang akan ditukar dengan nilai lainnya. Teknik penukaran dalam pemrograman ini berasal dari solusi pemindahan isi dua gelas air. Pertama, air dari sebuah gelas harus dipindahkan ke gelas kosong. Lalu, gelas pertama yang semula berisi air diisi air dari gelas kedua. Akhirnya, gelas kedua yang sekarang kosong diisi air dari gelas ketiga yang menampung air dari gelas pertama. Itulah prinsip penukaran yang kita terapkan dalam pemrograman.


Nah, demikian lima contoh program C yang berkaitan dengan matriks. Semoga bahasan di atas dapat menambah wawasan Anda mengenai matematika dan pemrograman. Selamat belajar!

Wassalamualaikum ...

Dramaga, 15 Januari 2017

Komentar

  1. Kalo yg indeks sub matriks output programnya pencet apa ya supaya muncul?

    BalasHapus
  2. yang no.1 cetak kolom matriks kenapa ngga bisa?

    BalasHapus
  3. Kalo cari banyak nilai yang sama dalam matrik gimana ya gan?

    BalasHapus

Posting Komentar