Java

Soal Matrik Rotasi dengan bahasa pemrograman Java

A = 123 B = 3 6
456 2 5
1 4

Penyelesaian kasus ini didapat dengan mencari pola pemetaan indeks-indeks baris dan kolom matriks B terhadap matriks A. Sebagai contoh data yang ada di baris ke 0, kolom ke 0 dari matriks B berasal dari baris ke 0, kolom ke 2 matriks A. Pemetaan indeks-indeks baris dan kolom matriks B terhadap matriks A secara lengkap adalah :

B[0][0]  A[0][2]
B[0][1]  A[1][2]

B[1][0]  A[0][1]
B[1][1]  A[1][1]

B[2][0]  A[0][0]
B[2][1]  A[1][0]

Jumlah baris untuk matriks A adalah 2 dan jumlah kolomnya 3. Pada matriks B jumlah baris dan kolom ini menjadi berkebalikan. Jumlah baris untuk matriks B adalah 3 dan jumlah kolomnya adalah 2. Karena matriks yang akan diisi (matriks B) dipakai sebagai acuan, jumlah baris dan kolom yang dipakai juga mengacu pada jumlah baris dan kolom untuk matriks B.

Bila indeks baris dinyatakan oleh variable i yang berjalan mulai dari 0 sampai 2 (ada 3 baris) dan indeks kolom dinyatakan oleh variable j yang berjalan mulai dari 0 sampai 1 (ada 2 kolom) maka pengisian matriks B dapat ditulis :

For(int i=0;i<3;i++)
For (int j=0;j<2;j++)
B[i][j]=A[j][???]

Dapat dilihat bahwa nilai indeks baris untuk matriks A ternyata sama dengan nilai indeks kolom untuk matriks B. Karena nilai indeks kolom matriks B ditentukan oleh variable j, nilai indeks baris untuk matriks A dapat diisi dengan variable j.

Data terakhir yang harus kita isi adalah nilai indeks kolom untuk matriks A. Bila Anda melihat nilai-nilai indeks kolom matriks A pada pemetaan diatas dapat diketahui bahwa nilai indeks ini pasti mempunyai hubungan dengan nilai indeks baris matriks B. Hanya saja nilai-nilai yang ada pada indeks baris matriks B berbanding terbalik dengan nilai-nilai indeks kolom matriks A. Jika nilai pada indeks baris matriks B berganti-ganti mulai dari nilai kecil ke nilai besar, maka indeks kolom matriks A berganti-ganti mulai dari nilai besar ke nilai kecil.

Bila nilai suatu indeks berbanding terbalik dengan indeks lain, maka dapat dipastikan nilai indeks yang dicari dapat diketahui dengan mengurangkan atau membagi suatu nilai konstan terhadap nilai lain. Untuk contoh ini, pola nilai yang ada adalah :

Saat indeks baris matriks B = 0, nilai indeks kolom matriks A = 2
Saat indeks baris matriks B = 1, nilai indeks kolom matriks A = 1
Saat indeks baris matriks B = 2, nilai indeks kolom matriks A = 0

Nilai konstan yang kita punyai adalah angka 3 yang menunjukkan jumlah maksimum baris yang boleh diakses dan angka 2 yang mempunyai arti yang sama tapi berlaku pada kolom. Karena perubahan nilai yang ada pada matriks B terjadi pada baris, maka nilai konstan yang dapat kita gunakan adalah nilai konstan untuk baris yaitu 3. Bila peningkatan angka indeks baris matriks B direpresentasikan oleh variabel i, maka nilai indeks kolom matriks A bisa diperoleh dengan rumus :

Idx_kolom = 3 – i – 1

Sehingga penulisan perintah untuk mengisi matriks B dari matriks A, yang terjadi karena matriks A diputar sejauh 1×90º adalah :
For (int i=0; i<3;i++)
For(int j=0;j<2;j++)
B[i][j]=A[j][3-i-1];

Program dibawah ini akan menunjukkan penyelesaian matrik rotasi secara lengkap tanpa fungsi terlebih dahulu. Pada program tersebut terdapat looping yang dapat memutar sebuah matriks sebanyak 1X90º. Pemutaran matriks sebanyak n kali dapat dilakukan dengan memanggil fungsi/looping ini sebanyak n kali. Jangan lupa, untuk selalu memindahkan isi matriks hasil ke matriks asal kembali sebelum melakukan pemutaran yang selanjutnya. Hal ini disebabkan karena proses pemutaran isi matriks selalu dilakukan terhadap matrik asal.

import java.io.*;

class matrikrotasi{

public static void main (String [] args) throws Exception
{

//DataInputStream (System.in);
DataInputStream input = new DataInputStream (System.in);

int [][]A=new int[15][20]; //MATRIKS ASAL
int [][]B=new int[15][20]; //MATRIKS BANTUAN
int [][]C=new int[15][20]; //MATRIKS TUJUAN
int baris, kolom, n;

System.out.print("Program Pemutar Matriks nx90 derajat ke kiri\n");
System.out.print("——————————————–\n");

System.out.print("\nMasukkan banyak baris matriks (maks 15): ");
baris = Integer.parseInt(input.readLine()); //buat inputan spt yg Anda kenal

System.out.print("\nMasukkan banyak kolom matriks (maks 20): ");
kolom = Integer.parseInt(input.readLine()); //buat inputan spt yg Anda kenal

System.out.print("\nMasukkan banyak putaran (n) : ");
n = Integer.parseInt(input.readLine());

//PROSES PENGISIAN MATRIKS (array dua dimensi)
for (int i=0;i<baris;i++){
for(int j=0;j<kolom;j++){
System.out.print("Isi data di "+" baris ["+(i+1)+"] kolom ["+(j+1)+"]=");
A[i][j]=Integer.parseInt(input.readLine());
}
System.out.println();
}

//===========================================

//PROSES PENCETAKAN MATRIKS
System.out.print("\nPROSES PENCETAKAN MATRIKS\n");
System.out.print("\nIsi matriks mula-mula adalah\n");

for (int i=0;i<baris;i++){
for(int j=0;j<kolom;j++){
System.out.print(A[i][j]+"");
}
System.out.println();
}

//===========================================

//SEBELUM MEMUTAR KEKIRI HARUS DIPINDAH KE MATRIK BANTUAN TERLEBIH DAHULU
//dengan bantuan looping FOR sebanyak n putaran yang diinputkan

for (int y=0;y<n;y++){
//pakai baris dan kolom utk matriks hasil atau bantu
//dg cara menukar nilai brs dan klm mtrk asal

int bantu=baris;
baris=kolom;
kolom=bantu;

//LOOPING MEMUTAR MATRIKS 90 DERAJAT KE KIRI

for(int j=0;j<baris;j++){
for(int k=0;k<kolom;k++){
B[j][k]=A[k][baris-j-1];

}
}

//MENGCOPY MATRIKS DARI MATRIKS ASAL KE MATRIKS TUJUAN
for(int s=0;s<baris;s++){
for(int t=0;t<kolom;t++){

C[s][t]=B[s][t];

}
}

}

//============================================

//MENAMPILKAN HASIL AKHIR DARI MATRIKS
System.out.print("\nHasil pemutaran 90 derajat kekiri \n");

for (int l=0;l<baris;l++){
for(int p=0;p<kolom;p++){
System.out.print(C[l][p]+"");
}
System.out.println();
}

}

}

Butuh Kursus Java di Surabaya dan Pasuruan dan sekitarnya

Hubungi saya 081 3307 154 10 / 031 – 71 566 878

 

 

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: