Pemrograman Dasar pt 5

Hahaha, hari ini gue seneng banget! D’you know why? Karena tadi temen sekelas ku ada yang menyadari ni blog! haha, dua harapan ku sudah terkabul satu, yaitu

Moga seseorang di TE UGM menyadari blog ini.

Untuk harapan yng kedua masih belum jelas terkabul apa belum. Coz harapan yang kedua itu:

Moga blog ini berguna bagi yang membacanya.
Hm. . . mungkin akan lebih berguna kalo ada pembahasan PR juga ya? Tapi nanti malah merugikan aku sendiri donk? Ntar lah gue pikir-pikir lagi.

(*harapan tambahan: Moga aku bisa dikenal lebih banyak orang a.k.a popular. he3)

Kembali ke topik kuliah, seperti biasa aku sengaja datang telad setengah jam, dan emang bener dosennya belum ngapa-ngapain. (ho3 Aku mang hebat dalam mengefisienkan waktu). Sebelum libur lebaran kami telah disuruh mbaca-mbaca tentang Array Multidimensional, yang nantinya harus dikusai untuk mengerjakan tugas UTS (Ujian tengah semester).

Apa itu array multidimensional?

Kemarin kita sudah tahu array itu apa, array itu membagi/membuat beberapa tempat/ruang pada sebuah variabel. Misal:

int data[4]={56, 83, 49, 14};

didefinisikan variabel data dibagi menjadi 4 ruang yaitu (*ingat! dimulai dari angka 0) data[0]=56, data[1]=83, data[2]=49, dan data[3]=14.

0

56

1

83

2

49

3

14

Tapi lain halnya denngan:

int data[4][3]={(18, 44, 23), (39, 48, 40), (85, 37, 19), (72, 55, 57)};

definisinya variabel data dibagi menjadi 4 ruang dan ruang tersebut dibagi menjadi 3. Sehingga data[0][0]=18, data[0][1]=44, data[0][2]=23, data[1][0]=39, data[1][1]=48, data[1][2]=40, data[2][0]=85, data[2][1]=37, data[2][2]=19, data[3][0]=72, data[3][1]=55, data[3][2]=57.

0

1

2

0

18

44

23

1

39

48

40

2

85

37

19

3

72

55

57

Yohoho! setelah mengetahui semua itu, tadi kami disuruh untuk membuat program yang melakukan operasi penghitungan pada Matriks (baru tambah sama perkalian sih. . .). Dikerjakan sendiri-sendiri dan dikumpulkan. Soalnya begini: Diketahui Matriks A & B (Matrik 3 × 3, Angkanya bebas), C = A × B, D = A + B. Cari C dan D!

Tadi source code yang kubuat seperti ini (berikut penjelasnnya)

#include <stdio.h>
#include<stdlib.h>

int main()

{

int A[3][3]=
{(1, 2, 3),
(1, 2, 3),
(1, 2, 3)}; //Variabel dan isi dari Matriks A

int B[3][3]=
{(1, 0, 0),
(0, 1, 0),
(0, 0, 1)}; //Variabel dan isi Matriks B

int C[3][3]=
{(0, 0, 0),
(0, 0, 0),
(0, 0, 0)}; //Mendeklarasikan Matriks C. Lebih baik diisi dengan angka nol, karena bisa mengurangi terjadi kesalahan

int D[3][3]=
{(0, 0, 0),
(0, 0, 0),
(0, 0, 0)}; //Sama seperti Matriks C

int i; //Variabel baris dan juga untuk Loop
int j; //Variabel kolom, untuk Loop juga

printf (“Penjumlahan Matriks”); //Aku disini mengerjakan yang Matriks D dulu, karena menurutku lebih mudah. Karena untuk mencari hasil Matrik D di baris ke-2 kolom ke-3 berarti kita menambahkan Matrik A di baris ke-2 kolom ke-3 dengan Matriks B di baris ke-2 kolom ke-3. Itu artinya Matriks D di baris ke-i kolom ke-j = Matrik A di baris ke-i kolom ke-j ditambah Matrik B di baris ke-i kolom ke-j
for (i=0; i<3; i++)

for (j=0; j<3; j++)

D[i][j]=A[i][j]+B[i][j];

printf (“\n %d %d %d “, D[0][0], D[0][1], D[0][2]);
printf (“\n %d %d %d “, D[1][0], D[1][1], D[1][2]);
printf (“\n %d %d %d “, D[2][0], D[2][1], D[2][2]);
printf (“\n\n”);

printf (“Perkalian Matriks”); //Aku disini mengerjakan yang Matriks C, Pertama kita harus cari polanya. Untuk mencari hasil Matrik C di baris ke-2 kolom ke-3 berarti kita mengalikan anggota dari Matrik A di baris ke-2 dengan anggota Matriks B di kolom ke-3, lalu masing-masing hasilnya dijumlahkan (*Udah pada tahu perkalian Matriks kan?). Itu artinya Matriks C di baris ke-i kolom ke-j = masing-masing anggota Matrik A di baris ke-i dikali anggota Matrik B kolom ke-j
for (i=0; i<3; i++)

for (j=0; j<3; j++)

C[i][j]=(A[i][0]*B[0][j]) + (A[i][1]*B[1][j]) + (A[i][2]*B[2][j]);

printf (“\n %d %d %d “, C[0][0], C[0][1], C[0][2]);
printf (“\n %d %d %d “, C[1][0], C[1][1], C[1][2]);
printf (“\n %d %d %d “, C[2][0], C[2][1], C[2][2]);
printf (“\n\n”);

}

Selesai deh garapanku! ho3! Ternyata aku lumayan juga lho! di atas rata-rata deh.🙂. Tapi kenapa aku selalu saja kagol (kecewa) dengan perasaan “Ah sial! Kenapa aku tidak menyadari hal itu!”? Dosennya punya cara yang lebih singkat lagi! Menyebalkan!

Pada perkalian matriks nya, si dosen ini pake 3 Loop! Jadinya seperti ini:

for (i=0; i<3; i++)

for (j=0; j<3; j++)

for (k=0; k<3; k++)

C[i][j]+=(A[i][k]*B[k][j]); //Jangan lupa tanda “+=” nya, yang artinya hasilnya perkaliannya itu dijumlah

Kalian bingung? Mari kita jabarkan. Bagi Beginner mengalikan matriks mungkin langkahnya kan seperti ini

C[0][0]=(A[0][0]*B[0][0])+(A[0][1]*B[1][0])+(A[0][2]*B[2][0]);
C[0][1]=(A[0][0]*B[0][1])+(A[0][1]*B[1][1])+(A[0][2]*B[2][1]);
C[0][2]=(A[0][0]*B[0][2])+(A[0][1]*B[1][2])+(A[0][2]*B[2][2]);
C[1][0]=(A[1][0]*B[0][0])+(A[1][1]*B[1][0])+(A[1][2]*B[2][0]);
C[1][1]=(A[1][0]*B[0][1])+(A[1][1]*B[1][1])+(A[1][2]*B[2][1]);
C[1][2]=(A[1][0]*B[0][2])+(A[1][1]*B[1][2])+(A[1][2]*B[2][2]);
C[2][0]=(A[2][0]*B[0][0])+(A[2][1]*B[1][0])+(A[2][2]*B[2][0]);
C[2][1]=(A[2][0]*B[0][1])+(A[2][1]*B[1][1])+(A[2][2]*B[2][1]);
C[2][2]=(A[2][0]*B[0][2])+(A[2][1]*B[1][2])+(A[2][2]*B[2][2]);

*Pusing dah loe!

Lain halnya dengan yang medium (rata-rata), mungkin dia bisa melihat sesuatu yang bisa diringkas (lihat yang kuberi warna, pada beginner). Jadi seperti ini

for (j=0; j<3; j++)

{

C[0][j]=(A[0][0]*B[0][j])+(A[0][1]*B[1][j])+(A[0][2]*B[2][j]);
C[1][j]=(A[1][0]*B[0][j])+(A[1][1]*B[1][j])+(A[1][2]*B[2][j]);
C[2][j]=(A[2][0]*B[0][j])+(A[2][1]*B[1][j])+(A[2][2]*B[2][j]);

}

Tapi gue, sebagai Advance (Awas muntah) bisa melihat sesuatu yang jauh lebih dalam lagi dari pada seorang medium (lihat yang aku beri warna pada medium, itulah yang kulihat). Alhasil jadi seperti ini:

for (i=0; i<3; i++)

for (j=0; j<3; j++)

C[i][j]=(A[i][0]*B[0][j]) + (A[i][1]*B[1][j]) + (A[i][2]*B[2][j]);

Ternyata ada yang tingkatnya Expert! Dosenku sendiri! (ya iyalha! Masa Dosen gak lebih pinter dari siswanya). Dia bisa melihat yang bisa diringkas lagi (lihat yang beri bold pada advance). Disulap jadi:

for (i=0; i<3; i++)

for (j=0; j<3; j++)

for (k=0; k<3; k++)

C[i][j]+=(A[i][k]*B[k][j]);

Hufh! Persaingan ketat dengan dosennya sendiri. Ckckckck. Dan tidak lupa PR nya:

  1. Matriks Perkalian
  2. Matriks Penjumlahan
  3. Matriks Pengurangan
  4. Matriks Determinan
  5. Invers Matriks

Oia, jangan lupa komen-komen, tanya-tanya, apa aja deh. Thx. CU!

Untuk yang invers aku kasih contohnya deh (CUMA CONTOH). . . nih. .  ini cara yang panjang. . . mu yang pendek? Rahasia. . . 

#include <stdio.h>
#include <stdlib.h>

int main ()

{

int A[3][3]={1, 0, 0, 0, 1, 0, 0, 0, 1}; //Isi dari Matriks A boleh anda ganti
int adjA[3][3]={0, 0, 0, 0, 0, 0, 0, 0, 0};
int determinan_A; //Variabel dari Determinan A
int invers_A[3][3]={0, 0, 0, 0, 0, 0, 0, 0, 0};
int C[3][3]={0, 0, 0, 0, 0, 0, 0, 0, 0};//Veriabel yang ini boleh anda ganti
int i;
int j;

determinan_A=1; //Ini ceritanya dengan cara entah bagaimana kalian udah dapet nilai inversnya. Yang jelas jangan ditulis kayak gini. Ini hanya misalnya

for (j=0; j<3; j++)

{

C[0][j]=((A[1][(j+1)%3]*A[2][(j+2)%3]) – (A[1][(j+2)%3]*A[2][(j+1)%3]));
C[1][j]=((A[0][(j+2)%3]*A[2][(j+1)%3]) – (A[0][(j+1)%3]*A[2][(j+2)%3]));
C[2][j]=((A[0][(j+1)%3]*A[1][(j+2)%3]) – (A[0][(j+2)%3]*A[1][(j+1)%3]));

}

for (i=0; i<3; i++)

for (j=0; j<3; j++)

adjA[i][j]=C[j][i];

for (i=0; i<3; i++)

for (j=0; j<3; j++)

invers_A[i][j]=adjA[i][j]/determinan_A;

for (i=0; i<3; i++)

printf(“\n %d  %d  %d “, invers_A[i][0], invers_A[i][1], invers_A[i][2]);

return 0;

}

6 responses to this post.

  1. Posted by guntur on 30 September 2009 at 6:02 pm

    wess…
    ga nyangka maba telatan jebul bisa pemrograman..

    santai..

    gmana, yang determinan sama invers matrik dah belum?

    Balas

    • Posted by frdteknikelektro on 30 September 2009 at 6:16 pm

      Wakakaka, ,
      masih belum seberapa lah. . .

      Hm . . . yang determinan sih udah, tadi coret2. . udah bisa.
      Yang invers, , ntar ajalah belakangan. . belum kucoba. he3

      Balas

  2. wekkkkkkkkkkk…….

    Balas

  3. sombong2..
    persaingan ma dosen sendiri??????
    wek…..

    awas ntr jatuh looooooooooo,,,,,,,,

    Balas

  4. Posted by sandi99 on 11 Oktober 2009 at 2:46 pm

    kalo bisa ntu postingan ada versi cetaknya..(dalam file dock)
    jadi seklian aku print…
    soalnya pengen dibundel buat belajar klo ada waktu luang
    *(kebiasaan belajar sambil corat-coret kertasnya)

    Balas

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: