Anda di halaman 1dari 29

]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C

Oleh : Andri Heryandi, ST

ARRAY DAN OPERASINYA


1. Definisi Array
Array adalah sekumpulan variable yang mempunyai tipe data yang sama yang
disimpan di memori secara berurutan.
Setiap variabel dalam sebuah array disebut sebagai sebuah elemen dan dapat
diakses dengan memberikan nama array-nya serta dengan index urutannya.
Cara pendeklarasian array dalam pemrograman adalah sebagai berikut :

Dalam Pascal :
Var
Data:array[1..10] of integer;

Dalam C :
int Data[10];

Kedua perintah tersebut berguna untuk membuat suatu array bernama Data
yang mempunyai 10 buah elemen. Perbedaannya adalah pendeklarasian yang
menggunakan bahasa Pascal adalah pendeklarasian array yang mempunyai index
elemen dari 1 sampai 10, sedangkan pendeklarasian array yang menggunakan bahasa
C membuat array yang selalu dimulai dari index ke-0 sampai 9 yaitu banyakdata-1.
Untuk melihat bagaimana array disimpan dalam memori, asumsikan kita
mempunyai kode program sebagai berikut :

int data[5];
data[0]=5;
data[1]=8;
data[3]=data[0]+data[1];

Berdasarkan perintah di atas, maka penyimpanan dalam memorinya dapat


dilihat seperti gambar di bawah ini.

Elemen Alamat Isi


[2 byte]
data[0] 1000 5
data[1] 1002 8
data[2] 1004 Tidak terdefinisi
data[3] 1006 13
data[4] 1008 Tidak terdefinisi

Catat bahwa pada data[2] dan data[4] berisi nilai yang terdefinisi, itu bukan
berarti tidak terdapat data atau 0, tetapi berisi data yang tidak bisa diperkirakan.
Untuk menghindari kesalahan, lebih baik ketika pembuatan array ada inisialisasi data.

Halaman - 1
]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C
Oleh : Andri Heryandi, ST

Contoh aplikasi array dengan menggunakan bahasa C adalah :

#include <stdio.h>
#include <conio.h>

#define maks 5

main()
{
int i;
int data[5];
clrscr();
printf("Pemasukan data :\n");
for(i=0;i<maks;i++)
{
printf("Masukan data[%d]: ",i);
scanf("%d",&data[i]);
}
printf("\nData yang telah di masukan adalah :\n");
for(i=0;i<maks;i++)
{
printf("data[%d] ada di alamat %u dengan isi : %i\n",
i,&data[i],data[i]);
}
getch();
return 0;
}
Program 1. Program pengisian dan menampilkan data menggunakan array

Setelah di-run, akan menghasilkan tampilan seperti di bawah ini.


Pemasukan data :
Masukan data[0]: 6
Masukan data[1]: 3
Masukan data[2]: 2
Masukan data[3]: 5
Masukan data[4]: 9

Data yang telah di masukan adalah :


data[0] ada di alamat 65516 dengan isi : 6
data[1] ada di alamat 65518 dengan isi : 3
data[2] ada di alamat 65520 dengan isi : 2
data[3] ada di alamat 65522 dengan isi : 5
data[4] ada di alamat 65524 dengan isi : 9

Halaman - 2
]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C
Oleh : Andri Heryandi, ST

2. Operasi-operasi Array
Pengaksesan data array
Pengaksesan data array dapat dilakukan dengan cara memberikan nama variabel
array tersebut serta indexnya.
Contoh :
Data[0]=5;
Data[1]=7;
Printf(“Data pertama adalah %d \n”,Data[0]);

Cara lain untuk pengaksesan data array dalam bahasa C adalah dengan
menggunakan pointer.
Contoh :
1 int data[5]={1,4,5,6,7};
2 int *p,i; //p adalah pointer ke data int, i adalah sebuah int
3 p=data;
4 i=data[2];
5 *p=50; // identik dengan data[0]=50
6 *(p+1)=15; // identik dengan data[1]=15
7 *(p+2)=*p+data[1]; // identik dengan data[2]=data[2]+data[1];
8 p++; // alamat p ditambah 1 (p berisi alamat int berikutnya)
9 printf(“Isi P adalah : “,*p);// akan muncul data[1] yaitu 50
10 p=p+2; // alamat p ditambah 2(p berisi alamat 2 int berikutnya
11 printf(“Isi P sekarang : “,*p);// akan muncul data[3] yaitu 6

Perintah di atas dapat dijelaskan seperti gambar di bawah ini.


Variabel
Array Data p i
data[0] data[1] data[2] data[3] Data[4]
Alamat  1000 1002 1004 1006 1008 100A 100C
1 1 4 5 6 7 bd bd
2 1 4 5 6 7 tdk tdk
3 1 4 5 6 7 1000 tkd
4 1 4 5 6 7 1000 5
5 50 4 5 6 7 1000 5
BARIS

6 50 15 5 6 7 1000 5
7 50 15 65 6 7 1000 5
8 50 15 65 6 7 1002 5
9 Isi P adalah : 50
10 50 15 65 6 7 1006 5
11 Isi P Sekarang : 6
Keterangan : bd = belum dideklarasikan, tdk = memiliki nilai tetapi tidak diketahui

Pengaksesan data dengan menggunakan pointer akan banyak dipakai dalam


pertemuan-pertamuan mendatang. Ini dikarenakan kemampuan pointer untuk
mengambil/menyimpan data berupa alamat di memori.
Oleh karena itu, program 1 dapat diedit dengan mengganti proses pembacaan dan
menampilkan dengan data menggunakan pointer.

Halaman - 3
]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C
Oleh : Andri Heryandi, ST

#include <stdio.h>
#include <conio.h>

#define maks 5

main()
{
int i,*p;
int data[5];
p=data;
clrscr();
printf("Pemasukan data :\n");
for(i=0;i<maks;i++)
{
printf("Masukan data[%d]: ",i);
scanf("%d",p+i);
}
printf("\nData yang telah di masukan adalah :\n");
for(i=0;i<maks;i++)
{
printf("Data[%d] ada di alamat %u dengan isi : %i\n",
i,p+i,*(p+i));
}
getch();
return 0;
}

Menampilkan data array


Operasi ini berguna untuk menampilkan data yang ada dalam array sebanyak
banyaknya data. Oleh karena itu berarti akan ada perulangan dari data pertama
sampai data terakhir. Program untuk menampilkan data array dapat dilihat dalam
potongan program di bawah ini.
int i;
int data[5]={1,5,8,9,8};
int banyakdata=5;
for(i=0;i<banyakdata;i++)
{
printf("data[%d]: %i\n",i,data[i]);
}

Jika ingin menggunakan pointer, maka programnya adalah :


int i,*p;
int data[5]={1,5,8,9,8};
int banyakdata=5;
p=data;
for(i=0;i<banyakdata;i++)
{
printf("data[%d]: %i\n",i,*(p+i));
}

Kedua perintah di atas sama-sama menampilkan data dalam array. Jika dijalankan
akan menghasilkan tampilan seperti dibawah ini.

Halaman - 4
]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C
Oleh : Andri Heryandi, ST

data[0]=1;
data[1]=5;
data[2]=8;
data[3]=9;
data[4]=8;

Karena proses menampilkan data array ini akan sangat banyak dipakai, maka
sebaiknya proses ini dibuat dalam bentuk sebuah fungsi yang memiliki
parameter/argumen berupa array dan banyaknya data. Fungsi tersebut adalah :

void view_array(int data[],int banyakdata)


{
int i;
for(i=0;i<banyakdata;i++)
{
printf("%4d ",data[i]);
}
}

atau jika parameternya ingin berupa pointer

void view_array(int *data,int banyakdata)


{
int i;
for(i=0;i<banyakdata;i++)
{
printf("%4d ",*(data+i));
}
}

Setelah fungsi tersebut dibuat, maka jika ingin menampilkan data array, akan
lebih mudah. Perhatikan contoh di bawah ini.

int a[5]={2,5,6,7,8};
int banyakdata=5;
printf("3 buah Isi A adalah : ");
view_array(a,3); printf("\n");
printf("Seluruh Isi A adalah : ");
view_array(a,banyakdata);

Halaman - 5
]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C
Oleh : Andri Heryandi, ST

Penambahan data ke array


Penambahan data ke array adalah proses menambahkan sebuah elemen ke dalam
sebuah array. Biasanya posisi data barunya berada di akhir array.
Contoh :
Kondisi Awal :
data[0] data[1] data[2] data[3] data[4] banyakdata
3 5 6 - - 3

Misalkan ada satu data baru yaitu 7, maka data baru tersebut disimpan di yang
paling akhir, kemudian variabel banyakdata harus ditambah 1.

baru
7

data[0] data[1] data[2] data[3] data[4] banyakdata


3 5 6 7 - 4

Begitu juga bila ada data baru lagi dengan nilai 80, maka akan ada proses
penyimpanan data di akhir array dan menambah variabel banyakdata akan
bertambah 1 menjadi 5. Sehingga kondisi data di memori dapat digambar seperti
gambar di bawah ini.

Baru
80

data[0] data[1] data[2] data[3] data[4] banyakdata


3 5 6 7 80 5

Dari gambar di atas, dapat dilihat bahwa array sudah penuh. Jika ada
penambahan lagi, maka data akan disimpan di tempat yang salah. Oleh karena itu
sebaiknya ada pemeriksaan kondisi apakah banyak data sudah mencapai batas
maksimal. Jika belum mencapai data maksimal, maka proses penambahan dapat
dilakukan, dan jika telah mencapai data maksimal, maka proses penambahan data
tidak dapat dilakukan.

Agar lebih bermanfaat, maka lebih baik proses tersebut dibuat menjadi sebuah
fungsi yang mempunyai parameter/argumen berupa array, variabel banyakdata
yang akan berganti nilai ketika proses penambahan telah terjadi dan variabel
baru yang berisi data yang akan disisipkan.

Halaman - 6
]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C
Oleh : Andri Heryandi, ST

void tambah_array(int data[], int *banyakdata, int baru)


{
if (*banyakdata < maks)
{
data[*banyakdata]=baru;
*banyakdata+=1;
}
else
{
printf("Array Penuh. Penambahan gagal\n");
}
}

Contoh pemanggilan fungsinya adalah :

int a[5];
int bd=0;
tambah_array(a,&bd,3);
tambah_array(a,&bd,5);
view_array(a,bd);// Menampilkan data array A sebanyak bd

Penyisipan data ke array


Penyisipan data ke array adalah proses menyisipkan data di array di lokasi
tertentu. Masalah yang timbul ketika ada suatu proses penyisipan nilai, yaitu
adanya pergeseran nilai pada data berikutnya. Untuk lebih jelas, perhatikan
ilustrasi di bawah ini.

Kondisi Awal :
data[0] data[1] data[2] data[3] data[4] banyakdata
3 5 6 - - 3

Jika ada penyisipan data baru dengan nilai yang akan dimasukan adalah 4 dan
ingin disimpan di posisi array ke-2 (urutan 1 jika dalam array bahasa C), maka
data pada posisi 2 dan berikutnya harus bergeser sehingga data-data tersebut
tidak hilang. Jika proses ini telah selesai maka variabel banyakdata akan
bertambah 1 sehingga menjadi 4.

data[0] data[1] data[2] data[3] data[4] banyakdata


3 5 6 - - 3

Baru Pergeseran Nilai dilakukan dari posisi terakhir ke


4 posisi penyisipan

Sehingga setelah proses penyisipan, array akan berisi :


data[0] data[1] data[2] data[3] data[4] banyakdata
3 4 5 6 - 4

Halaman - 7
]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C
Oleh : Andri Heryandi, ST

Proses penyisipan data hanya dapat dilakukan jika posisi tempat penyisipan
berada di antara 1 sampai banyakdata (dalam bahasa C harus di antara 0 sampai
banyakdata-1 karena array dalam bahasa C selalu dimulai dari data ke-0).

Algoritma penyisipan data array adalah :


a. Jika array belum penuh, lanjutkan ke proses b, dan jika telah penuh, proses
berakhir dan proses dibatalkan.
b. Jika posisi penyisipan berada dalam range array, maka kerjakan proses c
sedangkan jika posisi penyisipan di luar range array, maka proses penyisipan
dibatalkan.
c. Lakukan pergeseran dari posisi banyakdata menurun sampai posisi
penyisipan, dengan ketentuan data[i+1]=data[i], dimana i mempunyai nilai
dari posisi banyakdata sampai posisi penyisipan data (menurun).
d. Isikan nilai baru ke data[posisi sisip]. (data[posisi]=baru).
e. Variabel banyakdata ditambah 1.

Untuk lebih jelas, algoritma tersebut diimplementasikan dengan menggunakan


bahasa C. Proses penyisipan membutuhkan 3 parameter yaitu array yang akan
memuat data, banyakdata sekarang yang akan berubah setelah proses, data baru,
dan posisi penyisipannya.

void sisip_array(int data[], int *banyakdata, int baru,


int posisi)
{
int i;
if (*banyakdata < maks)
{
if((posisi>0)&&(posisi<=*banyakdata))
{
posisi--; // dalam C array dimulai dari 0,
// sehingga posisi harus dikurang 1
for(i=*banyakdata;i >= posisi;i--)
{
data[i+1]=data[i];
}
data[posisi]=baru;
*banyakdata+=1;
}
else
printf("Posisi di luar jangkauan. Penyisipan gagal\n");
}
else
{
printf("Array Penuh. Penyisipan gagal\n");
}
}

Halaman - 8
]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C
Oleh : Andri Heryandi, ST

Contoh pemanggilan fungsi tersebut adalah :

int a[5];
int bd=0,baru;
tambah_array(a,&bd,3);
tambah_array(a,&bd,5);
sisip_array(a,&bd,8,2);// sisip nilai 8 di posisi 2
baru=56;
sisip_array(a,&bd,baru,1);//sisip nilai variable baru di posisi 1
sisip_array(a,&bd,88,15);// gagal karena di luar range array
view_array(a,bd);// Menampilkan data array A sebanyak bd

Setelah program itu dijalankan, maka array akan berisi 56,3,8,5

Penghapusan data dari array


Penghapusan data dari array berarti menghilangkan suatu elemen data dalam
array pada posisi tertentu. Proses penghapusan ini mengakibatkan adanya
pergeseran data. Untuk lebih jelas lihat ilustrasi di bawah ini.

Kondisi Awal :
data[0] data[1] data[2] data[3] data[4] banyakdata
3 5 6 8 - 4

Jika ada penghapusan dilakukan pada posisi 2, maka data posisi 3 akan
dipindahkan ke posisi 2, data di posisi 4 akan dipindahkan ke posisi 3, dan proses
pemindahan data ke posisi sebelumnya dilakukan sampai data terakhir. Setelah
proses ini dilakukan, maka variabel banyakdata akan dikurangi 1 karena ada data
yang dihapus.

data[0] data[1] data[2] data[3] data[4] banyakdata


3 5 6 8 - 4

Proses penggeseran nilai dilakukan terhadap data dari posisi hapus +1 sampai
posisi banyakdata.

Sehingga setelah proses penghapusan, array akan berisi :


data[0] data[1] data[2] data[3] data[4] banyakdata
3 6 8 - - 3

Proses penghapusan data hanya akan bisa terjadi kalau posisi hapus ada dalam
range array (posisi 1 s/d posisi banyakdata). Jika posisi hapus berada di luar
range array yang sudah terisi data, maka proses penghapusan dibatalkan. Jika
array kosong (banyakdata=0) maka proses penghapusan juga tidak bisa
dilakukan (dibatalkan).

Halaman - 9
]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C
Oleh : Andri Heryandi, ST

Algoritma penghapusan data array adalah :


a. Jika array tidak kosong (banyakdata>0), maka lanjutkan ke proses b. Jika
array kosong proses penghapusan dibatalkan.
b. Jika posisi penghapusan berada dalam range array, maka kerjakan proses c
sedangkan jika posisi penghapusan berada di luar range array, maka proses
penghapusan dibatalkan.
c. Lakukan perulangan untuk i dari posisi hapus sampai data terakhir-1,
kemudian lakukan pemindahan data agar data pada posisi ke-i diisi dengan
berikutnya (posisi i+1). Sederhananya proses pemindahan dapat dilakukan
dengan ketentuan data[i]=data[i+1];
d. Setelah proses pergeseran data, variabel banyakdata dikurangi 1, karena telah
ada 1 data yang dihapus.

Implementasi dari algoritma di atas dapat dilihat pada script program berbahasa
C di bawah ini.

void hapus_array(int data[], int *banyakdata, int posisi)


{
int i;
if (*banyakdata > 0)
{
if((posisi>0)&&(posisi<=*banyakdata))
{
posisi--;//posisi-1 karena array dlm C imulai dari 0
for(i=posisi;i < *banyakdata;i++)
{
data[i]=data[i+1];
}
*banyakdata-=1;
}
else
printf("Posisi di luar jangkauan. Penghapusan batal");
}
else
{
printf("Array Kosong. Penghapusan gagal\n");
}
}

Contoh pemanggilan fungsi tersebut adalah :


int a[5]={1,2,3,4,5};
int bd=5;
clrscr();
hapus_array(a,&bd,4);// hapus posisi 4, sehingga bd menjadi 4
hapus_array(a,&bd,2);// hapus posisi 2, sehingga bd menjadi 3
hapus_array(a,&bd,5);// hapus posisi 5 akan gagal karena bd=3
view_array(a,bd);

Setelah dijalankan maka data dalam array adalah 1,3,5

Halaman - 10
]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C
Oleh : Andri Heryandi, ST

Pencarian data
Pencarian data berarti proses mencari suatu data terdapat dalam array atau tidak.
Proses ini biasanya menghasilkan nilai benar atau salah.
Adapun algoritma-algoritma yang biasa digunakan untuk melakukan proses
pencarian dalam array adalah :
- Algoritma Sekuensial (Sequential Search)
Pencarian sekuensial adalah suatu metode pencarian dengan cara menelusuri
seluruh elemen, biasanya dari data pertama sampai data yang dicari
ditemukan atau sampai data terakhir. Pencarian sekuensial dapat dilakukan
pada array yang terurut atau tidak terurut.
Ada dua jenis pencarian secara sekuensial, yaitu
a. Pencarian sekuensial dengan sentinel
Pencarian ini dilakukan dengan cara menelusuri data yang ada di array
dan membandingkannya dengan data yang dicari sampai data yang dicari
ditemukan. Oleh karena itu, maka untuk mengatasi apabila data yang
dicari tidak ada di array, maka digunakan sentinel yaitu suatu
Pencarian yang menggunakan sentinel selalu dapat menemukan data.
Tetapi sebelum pencarian data, ada proses pengisian sentinel (data
terakhir diisi dengan data yang dicari),
Contoh 1:
Data yang dicari adalah : 7 Untuk Sentinel
Banyak data : 5
Array :
5 8 7 6 9

Ketika pencarian, nilai yang dicari diisikan ke urutan terakhir. Sehingga


array berisi :
5 8 7 6 9 7

Sehingga ketika pencarian dengan teknik ini, maka pencarian akan selalu
menemukan data yang dicari. Untuk menentukan kondisi apakah data
tersebut ditemukan atau tidak adalah dengan memeriksa di index ke
berapa data tersebut ditemukan. Jika index data bernilai masih di bawah
atau sama dengan banyak data yang ada di array, maka itu berarti data
ditemukan dan jika index data melebihi dari banyak data yang ada di
array berarti data tidak ditemukan.

Untuk kasus di atas, maka pencarian akan berakhir pada index ke-3,
karena data ada. Tetapi kalau data yang dicari adalah 10, maka array akan
berisi :
5 8 7 6 9 10
Sehingga pencarian akan berakhir pada index ke-6. Karena 6 lebih besar
dari 5 (banyak data), itu berarti data tidak ditemukan.

Kekurangan dari algoritma ini adalah kita harus menyediakan 1 tempat


untuk sentinel.

Halaman - 11
]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C
Oleh : Andri Heryandi, ST

Contoh script berbahasa C untuk pencarian menggunakan sentinel adalah


sebagai berikut :
int cari_sekuensial_sentinel(int data[],int banyakdata,
int dicari)
{

int i=0;
data[banyakdata]=dicari;//pengisian sentinel
while(data[i]!=dicari)//selama belum ditemukan
{
i++;
}
if(i<banyakdata)
return i+1;
else
return 0;
}

Cara penggunaan fungsi pencarian ini adalah :


int a[6]={10,22,34,42,55,0};//0 untuk sentinel
int bd=5;
int posisi;
clrscr();
view_array(a,bd);printf("\n");
posisi=cari_sekuensial_sentinel(a,bd,34);
if(posisi!=0)
printf("Data ditemukan di posisis : %d\n",posisi);
else
printf("Data tidak ditemukan\n");

b. Pencarian Sekuensial tanpa sentinel


Pencarian ini dilakukan dengan cara menelurusi data yang ada dalam
array dan membandingkannya dengan data yang dicari. Pencarian
berhenti ketika data ditemukan atau penelurusan telah mencapai data
terakhir.
Contoh :

Data yang dicari adalah : 9


Array :
5 8 7 6 9 3 20 2 1 4

Algoritma pencariannya adalah :


a. Inisialisasi variabel ditemukan dengan false
b. Lakukan perulangan i dari 1 (data pertama) selama data ke-i tidak
sama dengan data yang dicari (data belum ditemukan) dan selama
nilai i masih lebih kecil dari banyak data. Lakukan langkah c.
c. Jika data ke-i sama dengan data yang dicari, maka isi variable
ditemukan dengan nilai true yang menandakan data telah ditemukan,
tetapi jika tidak sama maka variabel i ditambah 1 untuk memeriksa
data selanjutnya.

Halaman - 12
]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C
Oleh : Andri Heryandi, ST

d. Setelah perulangan b s/d c selesai, maka jika variabel ditemukan


mempunyai nilai true, berarti data yang dicari ada di posisi ke-i. Jika
variabel ditemukan mempunyai nilai false, berarti data yang dicari
tidak ditemukan.

Implementasi dari algoritma di atas adalah :


int cari_sekuensial(int data[],int banyakdata,
int dicari)
{

int i=0;
int ditemukan=0;// dalam bahasa c, false adalah nilai 0
while((i<banyakdata) // i belum mencapai data terakhir
&& // dan
(ditemukan==0))// data belum ditemukan, maka
{
if(data[i]==dicari)
ditemukan=1;//ditemukan diisi dengan true (1)
else
i++;
}
if(ditemukan==1)
return i+1;
else
return 0;
}

Cara penggunaan fungsi tersebut adalah :

int a[5]={10,22,34,42,55};
int bd=5;
int posisi;
clrscr();
posisi=cari_sekuensial(a,bd,34);
if(posisi!=0)
printf("Data ditemukan di posisis : %d\n",posisi);
else
printf("Data tidak ditemukan\n");

- Algoritma Binary Search


Pencarian binary merupakan suatu teknik pencarian dalam data yang sudah
terurut. Pencarian teknik ini mempunyai beban komputasi yang lebih ringan
dibandingkan dengan pencarian sekuensial.
Algoritma pencarian secara binary adalah dengan membagi array menjadi 2
bagian yang ditandai dengan bagian kiri, tengah dan kanan. Bagian pertama
dibatasi dengan variabel kiri sampai dengan tengah, dan bagian kedua
dibatasi dengan variabel tengah sampai variabel akhir. Jika data yang dicari
lebih kecil data di posisi tengah, berarti pencarian hanya boleh dilanjutkan
pada bagian 1 (kemudian data kanan diisi dengan posisi tengah dan posisi
tengah diisi dengan posisi tengah antara kiri dan kanan), dan jika data yang
dicari lebih besar dari data di posisi tengah, maka pencarian berikutnya
dilanjutkan pada bagian 2 (kemudian data kiri diisi dengan posisi tengah dan

Halaman - 13
]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C
Oleh : Andri Heryandi, ST

posisi tengah diisi dengan posisi tengah antara posisi kiri baru dan kanan),
dan jika data yang dicari sama dengan data di posisi tengah, maka berarti data
telah ditemukan. Perulangan dilakukan selama posisi kiri < posisi kanan
(belum berseberangan) dan data belum ditemukan.

Untuk lebih jelas, perhatikan urutan pencarian data secara binary.

Contoh 1 (kasus data yang dicari ada dalam array):


Data yang dicari adalah : 50
Banyak data : 10
Array :
1 4 8 9 10 15 16 25 50 55

Urutan pencariannya adalah :


Kiri = 1
Kanan = 10
Tengah = (1+10)/2 = 5,5 = 5 [ambil bilangan bulatnya]
1 4 8 9 10 15 16 25 50 55

Kiri Tengah Kanan

Kemudian bandingkan data yang dicari (50) dengan data posisi tengah (10).
Ada 3 kemungkinan yang terjadi, yaitu :
- Jika data posisi tengah > data yang dicari, maka pencarian dilakukan di
array bagian kiri, dengan cara memindahkan kanan ke posisi tengah+1
(kanan=tengah-1) dan posisi tengah dicari kembali dengan rumus
(kiri+kanan)/2.
- Jika data posisi tengah < data yang dicari, maka pencarian dilakukan di
array bagian kanan, dengan cara memindahkan posisi kiri dengan posisi
tengah+1, dan posisi tengah dicari kembali dengan rumus (kiri+kanan)/2.
- Jika data posisi tengah = data yang dicari, berarti data telah ditemukan
pada posisi tengah.

Dengan kasus di atas (data[tengah]=10 dan dicari=50), maka pencarian yang


akan dilakukan adalah pada array bagian kanan. Oleh karena itu posisi kiri
berpindah dari 0 menjadi 6 (tengah+1).

Kiri = 6
Kanan = 10
Tengah = (6+10)/2 = 8 [ambil bilangan bulatnya]
1 4 8 9 10 15 16 25 50 55

Kiri Tengah Kanan

Halaman - 14
]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C
Oleh : Andri Heryandi, ST

Lakukan kembali proses pembandingan seperti tadi sehingga didapatkan


bahwa nilai yang dicari lebih besar daripada nilai di posisi tengah, maka
pencarian dilakukan lagi pada bagian kanan dengan kondisi :
Kiri=tengah+1=9
Kanan=10
Tengah=(kiri+kanan)/2=(10+9)/2=9.
1 4 8 9 10 15 16 25 50 55

Kiri/Tengah Kanan

Kemudian lakukan lagi perbandingan, sehingga didapatkan bahwa data yang


dicari (50) sudah sama dengan data posisi tengah, maka itu berarti data telah
ditemukan pada posisi ke 9.

Contoh 2 (kasus data yang dicari tidak ada dalam array) :


Data yang dicari adalah : 5
Banyak data : 5
Array :
1 4 8 9 10 15 16 25 50 55

Urutan pencariannya adalah :


Kiri = 1
Kanan = 10
Tengah = (1+10)/2 = 5,5 = 5 [ambil bilangan bulatnya]
1 4 8 9 10 15 16 25 50 55

Kiri Tengah Kanan

Kemudian bandingkan data yang dicari (5) dengan data posisi tengah (10),
sehingga didapatkan bahwa data yang dicari lebih kecil dari data posisi
tengah, sehingga pencarian dilakukan pada array bagian kiri. Kondisi
pencariannya :
Kiri=1;
Kanan=Tengah-1 = 5-1 = 4
Tengah=(1+Kanan)/2 = (1+4)/2= 5/2 =2

1 4 8 9 10 15 16 25 50 55

Kiri Tengah Kanan


Kemudian bandingkan lagi data yang dicari (5) dengan data yang di posisi
tengah (4). Didapatkan kondisi bahwa data yang dicari (5) lebih besar dari
posisi tengah (4), maka pencarian kembali dilakukan di posisi kanan, sehingga
kondisi pencarian adalah :

Halaman - 15
]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C
Oleh : Andri Heryandi, ST

Kiri = Tengah+1 = 2+1 =3


Kanan = 4
Tengah = (Kiri+Kanan)/2 = (3+4)/2 = 7/2 =3
1 4 8 9 10 15 16 25 50 55

Kiri/Tengah Kanan
Kemudian bandingkan lagi data yang dicari (5) dengan data tengah (8),
didapatkan kondisi bahwa data yang dicari lebih kecil dari data tengah
sehingga pencarian harus dilakukan di posisi kiri sehingga kondisi pencarian
adalah :
Kanan = (Tengah-1) = 3-1 =2
Kiri = 3
Tengah = (Kiri+Kanan) =(2+3)/2 = 5/2 =2
1 4 8 9 10 15 16 25 50 55

Kanan/Tengah Kiri

Berseberangan

Karena posisi kiri telah melebihi posisi kanan, maka pencarian selesai dan itu
menunjukan bahwa data tidak ditemukan.

Implementasi dari algoritma di atas adalah :


int cari_binary(int data[],int banyakdata, int dicari)
{
int kiri,kanan,tengah,ditemukan=0;
kiri=0;
kanan=banyakdata-1;
while((kiri<=kanan)&&(ditemukan==0))
{
tengah=(kiri+kanan)/2;
if(data[tengah]>dicari)
kanan=tengah-1;
else
if(data[tengah]<dicari)
kiri=tengah+1;
else
if(data[tengah]==dicari)
ditemukan=1;
}
if(ditemukan==1)
return tengah+1;
else
return 0;
}

Halaman - 16
]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C
Oleh : Andri Heryandi, ST

Cara penggunaan fungsi tersebut adalah :


int a[5]={10,22,34,42,55};
int bd=5;
int posisi;
clrscr();
view_array(a,bd);printf("\n");
posisi=cari_binary(a,bd,34);
if(posisi!=0)
printf("Data ditemukan di posisis : %d\n",posisi);
else
printf("Data tidak ditemukan\n");

Pengurutan Data
Pengurutan data berarti proses menyusun data yang ada dalam array sehingga
dapat terurut baik ascending (menaik) atau descending (menurun).
Adapun algoritma-algoritma yang biasa digunakan untuk melakukan proses
pengurutan data dalam array adalah :
- Algoritma Bubble Sort
Algoritma pengurutan dengan menggunakan teknik bubble sort adalah
dengan membandingkan sebuah elemen array ke-i dengan elemen array
berikutnya (elemen ke-i+1). Jika isi elemen array ke-i lebih besar dari elemen
array ke-i+1, maka tukarkan isinya. Algoritma ini adalah algoritma
pengurutan yang paling sederhana, tetapi paling lambat untuk array yang
memiliki elemen yang banyak.

Contoh Kasus dengan banyak data adalah 10 :


Array: 5 3 7 9 2 3 6 4 3 1
Catatan : untuk kasus di atas sengaja angka terkecil dipakai di akhir data
sehingga ini akan menghasilkan kondisi terburuk dari pengurutan.

Awal: 5 3 7 9 2 3 6 4 3 1
L. 1 3 5 7 2 3 6 4 3 1 9
L. 2 3 5 2 3 6 4 3 1 7 9
L. 3 3 2 3 5 4 3 1 6 7 9
L. 4 2 3 3 4 3 1 5 6 7 9
L. 5 2 3 3 3 1 4 5 6 7 9
L. 6 2 3 3 1 3 4 5 6 7 9
L. 7 2 3 1 3 3 4 5 6 7 9
L. 8 2 1 3 3 3 4 5 6 7 9
L. 9 1 2 3 3 3 4 5 6 7 9
Catatan : data yang diarsir adalah data yang telah terurut.

Dari gambaran di atas, ketika banyak data adalah 10, maka proses pertukaran
dilakukan sebanyak 9 langkah. Jadi dapat diketahui bahwa langkah yang
dilakukan agar data terurut maksimal sebanyak N-1 langkah dimana N adalah
banyaknya data.

Halaman - 17
]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C
Oleh : Andri Heryandi, ST

Algoritma pengurutan data dengan algoritma bubble sort adalah :


a. Lakukan perulangan untuk i dimulai dari 1 sampai N-1, lakukan proses b.
b. Lakukan perulangan j dimulai dari 1 sampai N-1, lakukan perbandingan
antara data ke-j dengan data ke-(j+1). Jika data ke-j lebih besar dari data
ke-(j+1), maka tukarkan datanya.

Implementasi dari algoritma di atas adalah :


void sort_bubble(int data[], int banyakdata)
{
int i,j,temp;
for(i=0;i<(banyakdata-1);i++)//langkah ke-i s/d bd-1
{
for(j=0;j<(banyakdata-1);j++)
{
if(data[j]>data[j+1])
{
temp=data[j];
data[j]=data[j+1];
data[j+1]=temp;
}
}
}
}

Cara penggunaan dari fungsi tersebut adalah :


int a[5]={5,4,3,2,1};
int bd=5;
clrscr();
view_array(a,bd);printf("\n");
sort_bubble(a,bd);
view_array(a,bd);printf("\n");

- Algoritma Selection Sort


Algoritma selection sort bekerja dengan cara menyimpan data terkecil dari
data ke posisi kiri. Data paling kiri yang telah terurut tidak perlu
dibandingkan lagi. Untuk lebih jelas, perhatikan gambaran pengurutan di
bawah ini :
Kondisi Awal :
Awal: 5 3 7 9 2 3 6 4 3 1

Langkah 1 :
Cari index bilangan terkecil dari data ke-1 sampai data terakhir terakhir untuk
disimpan di posisi ke-1. Dari data di atas didapatkan bahwa data terkecil
berada di index ke-10. Tukarkan isi data ke-1 dengan indek ke 10.
5 3 7 9 2 3 6 4 3 1
Menjadi
1 3 7 9 2 3 6 4 3 5
Langkah ke-2 :

Halaman - 18
]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C
Oleh : Andri Heryandi, ST

Cari index bilangan terkecil dari data ke-2 sampai data terakhir untuk
disimpan di posisi-2. Dari data sebelumnya didapatkan bahwa data terkecil
berada di index ke-5. Tukarkan isi data ke-2 dengan data index ke-5.
1 3 7 9 2 3 6 4 3 5
Menjadi
1 2 7 9 3 3 6 4 3 5

Langkah ke-3 :
Cari index bilangan terkecil dari data ke-3 sampai data terakhir untuk
disimpan di posisi-3. Dari data sebelumnya didapatkan bahwa data terkecil
berada di index ke-5. Tukarkan isi data ke-3 dengan data index ke-5.
1 2 7 9 3 3 6 4 3 5
Menjadi
1 2 3 9 7 3 6 4 3 5

Langkah ke-4 : Posisi terkecil = 6


1 2 3 9 7 3 6 4 3 5
Menjadi
1 2 3 3 7 9 6 4 3 5

Langkah ke-5 : Posisi terkecil = 9


1 2 3 3 7 9 6 4 3 5
Menjadi
1 2 3 3 3 9 6 4 7 5

Langkah ke-6 : Posisi terkecil = 8


1 2 3 3 3 9 6 4 7 5
Menjadi
1 2 3 3 3 4 6 9 7 5

Langkah ke-7 : Posisi terkecil = 10


1 2 3 3 3 4 6 9 7 5
Menjadi
1 2 3 3 3 4 5 9 7 6

Langkah ke-8 : Posisi Terkecil = 10


1 2 3 3 3 4 5 9 7 6
Menjadi
1 2 3 3 3 4 5 6 7 9

Langkah ke-9 : Posisi Terkecil = 9, Tidak ada pertukaran data


1 2 3 3 3 4 5 6 7 9
Menjadi
1 2 3 3 3 4 5 6 7 9

Halaman - 19
]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C
Oleh : Andri Heryandi, ST

Algoritma di atas adalah :


a. lakukan perulangan i untuk mewakili langkah dari 1 sampai N-1,dimana
N adalah banyak data. Lakukan proses b.
b. Lakukan pencarian index terkecil dalam range data ke-i sampai data ke-N,
dan simpan index posisinya dalam variabel idxterkecil. Lanjutkan ke
proses c.
c. Jika data ke-i lebih besar dari data ke-indexterkecil, maka tukarkan data
ke-i dengan data ke-indexterkecil.

Implementasi dari program di atas adalah :


void sort_selection(int data[], int banyakdata)
{
int i,j,temp,idxterkecil;
for(i=0;i<(banyakdata-1);i++)// langkah ke-i
{
idxterkecil=i;
for(j=i+1;j<banyakdata;j++)
{
if (data[j]<data[idxterkecil])
idxterkecil=j;
}
temp=data[i];
data[i]=data[idxterkecil];
data[idxterkecil]=temp;
}

Cara penggunaan fungsi tersebut adalah :


int a[5]={5,4,3,2,1};
int bd=5;
clrscr();
view_array(a,bd);printf("\n");
sort_selection(a,bd);
view_array(a,bd);printf("\n");

Algoritma ini lebih baik dari pengurutan dengan algoritma bubble sort,
karena dengan algoritma ini, proses pertukaran elemen hanya terjadi
sebanyak N-1 kali.

Halaman - 20
]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C
Oleh : Andri Heryandi, ST

- Algoritma Quick Sort


Algoritma ini merupakan suatu algoritma pengurutan yang cepat. Langkah
langkah pengurutan dengan algoritma ini adalah dengan membagi data
menjadi dua bagian (kiri dan kanan), dan kemudian setiap bagian dilakukan
lagi pengurutan dengan metode yang sama sehingga quick sort dilakukan
secara rekursif.

Contoh proses pengurutan dengan menggunakan algoritma quick sort adalah


sebagai berikut :
Contoh data.
44 33 11 55 77 90 40 60 99 22 88 66
Kiri Kana
Pivot n

a. Langkah pertama adalah buat patokan (pivot) di posisi kiri, kemudian


bandingkan dengan posisi kanan, ulangi selama data di posisi kanan lebih
besar dari data di posisi pivot. Selama data di posisi kanan > dari pada
posisi pivot dan posisi kanan tidak sama dengan pivot, maka posisi kanan
dikurang 1 (agar posisi kanan bergeser ke sebelah kiri). Dari langkah di
atas diketahui bahwa posisi kanan akan berhenti di nilai 22 (posisi 10).
Lakukan pertukaran antara posisi pivot dengan posisi kanan (10).
Sehingga didapatkan data sebagai berikut :
22 33 11 55 77 90 40 60 99 44 88 66
Kiri Kana
n
Pivot

b. Langkah berikutnya adalah dengan membuat patokan dari posisi kanan,


kemudian bandingkan dengan posisi kiri, ulangi selama data di posisi kiri
masih lebih kecil daripada data di posisi pivot. Selama data di posisi kiri
< daripada data di posisi pivot dan posisi kiri tidak sama dengan posisi
pivot, maka posisi kiri ditambah 1 (agar posisi kiri bergeser ke kanan).
Sehingga didapatkan bahwa posisi kiri akan berhenti di nilai 55 (posisi 5).
Lakukan pertukaran antara data di posisi kiri dengan data di posisi pivot
sehingga didapatkan data sebagai berikut :
22 33 11 44 77 90 40 60 99 55 88 66
Kiri Kana
Pivot n

c. Langkah selanjutnya mirip dengan langkah a, yaitu dengan membuat


pivot di posisi kiri, lakukan perbandingan dengan posisi kanan selama
data yang dikanan > daripada data di posisi pivot. Posisi kanan akan terus
bergeser ke kiri dan akan berhenti ketika nilai mencapai 40 yaitu pada
posisi 7. Sehingga data diposisi kanan(7) ditukar dengan data di posisi
pivot (4) sehingga array menjadi.
22 33 11 40 77 90 44 60 99 55 88 66

Halaman - 21
]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C
Oleh : Andri Heryandi, ST

Kiri Kana
n
Pivot

d. Langkah berikutnya mirip dengan langkah b, yaitu membuat pivot di


posisi kanan, lakukan perbandingan dengan data kiri selama data di posisi
kiri lebih kecil daripada data di posisi pivot. Posisi kiri akan berhenti di
nilai 77 (posisi 5). Langkah selanjutnya adalah dengan menukarkan data
di posisi kiri dengan data di posisi pivot sehingga didapatkan data seperti
di bawah ini.
22 33 11 40 44 90 77 60 99 55 88 66
Kiri Kana
Pivot n

e. Langkah selanjutnya kembali mirip dengan langkah a dimana kita


membuat patokan di posisi kiri, kemudian bandingkan dengan posisi
kanan selama data posisi kanan lebih besar dari pada posisi pivot, maka
posisi kanan digeser ke kiri (dikurangi 1). Dalam contoh ini posisi kanan
akan berhenti di data 44 (posisi 44). Jika terjadi posisi kanan atau kiri
mempunyai nilai sama maka itu berarti data pivot merupakan data tengah
dari array dan data telah terbagi menjadi 2 bagian. Perhatikan bahwa data
di bagian kiri selalu lebih kecil atau sama dengan data di posisi pivot dan
data di bagian kanan selalu lebih besar atau sama dengan data di posisi
pivot. Oleh karena itu proses pembagian array menjadi 2 bagian (partisi)
telah selesai. Dengan urutan data terakhir di array adalah :
22 33 11 40 44 90 77 60 99 55 88 66
Kiri
Kana
n
Pivot

Catatan : perulangan langkah a dan langkah b dilakukan hanya ketika


posisi kiri lebih kecil dari posisi kanan

f. Langkah berikutnya adalah dengan melakukan proses di atas terhadap


data di ruas kiri (posisi 1 sampai dengan posisi pivot-1), dan ruas kanan
(posisi pivot+1 sampai dengan posisi terakhir). Oleh karena itu setiap
proses quick sort ini membutuhkan 2 variabel yaitu awal dan akhir yang
menandakan dari posisi berapa dan sampai posisi berapa data harus
diurutkan.

Implementasi dari algoritma di atas dalam bahasa C adalah :

void tukar(int *a, int *b)


{
int temp;
temp=*a;
*a=*b;

Halaman - 22
]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C
Oleh : Andri Heryandi, ST

*b=temp;
}

void urut_quick(int data[], int awal, int akhir)


{
int kiri,kanan,pivot;
kiri=awal;
kanan=akhir;
while(kiri<kanan)
{
pivot=kiri;
while((data[pivot]<=data[kanan])&&(pivot<kanan))
kanan--;
if(pivot==kanan) break;
if (data[pivot]>data[kanan])
tukar(&data[pivot],&data[kanan]);
pivot=kanan;
while((data[kiri]<=data[pivot])&&(kiri<pivot))
kiri++;
if(pivot==kiri) break;
if(data[kiri]>data[pivot])
tukar(&data[kiri],&data[pivot]);
}
if (kanan>awal)
urut_quick(data,awal,pivot-1);
if (kiri<akhir)
urut_quick(data,pivot+1,akhir);
}

Cara pemanggilan fungsi di atas adalah :


int a[12]={44,33,11,55,77,90,40,60,99,22,88,66};
int banyakdata=12;
urut_quick(a,0,banyakdata-1);

3. Array Multi Dimensi (2 dimensi atau lebih)


Array 2 Dimensi
Array 2 dimensi sering disebut Matriks. Matrik adalah sekumpulan informasi
yang setiap individu elemennya dipanggil dengan menggunakan 2 buah index
posisi yaitu posisi baris dan posisi kolom.
Matrik biasanya digambarkan sebagai berikut :

KOLOM
1 2 3
BARIS 1 N1,1 N1,2 N1,3
2 N2,1 N2,2 N2,3
3 N3,1 N3,2 N3,3

Halaman - 23
]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C
Oleh : Andri Heryandi, ST

- Pendeklarasian Matrik
Pendeklarasian sebuah matrik dalam bahasa C adalah :

Tipedata namamatrik[banyakbaris][banyakkolom];

Contoh :
int mat1[3][3]; // matrik bertipe integer dengan kolom 3 dan baris 3.
float mat2[5][2];//matrik bertipe float dengan kolom 5, baris 2
int mat[3][3]={{1,3,5},
{4,2,2},
{3,5,7}};

- Pengisian Matrik
Pembacaan matrik membutuhkan 2 buah perulangan yaitu perulangan untuk
baris dan untuk kolom. Untuk mengisi nilai sebuah elemen matrik, caranya
adalah :
Nama_matrik[baris][kolom] = nilai;

Contoh :
mat[1][1]=7;// data baris ke-1 kolom ke-1 diisi 7
mat[2][1]=5; // data baris ke-2 kolom ke-1 diisi 5

Contoh pembacaan seluruh elemen matrik dalam bahasa C adalah :


int data[3][3];
int b,k;
for(b=0;b<3;b++)
{
for(k=0;k<3;k++)
{
printf("Baris-%d Kolom-%d : ",b,k);
scanf("%d",&data[b][k]);
}
}

Jika ingin membuat fungsi pembacaan matrik maka fungsinya adalah :


void baca_matrik(int data[][maks], int baris, int kolom)
{
int b,k;
for(b=0;b<baris;b++)
{
for(k=0;k<kolom;k++)
{
printf("Baris-%d Kolom-%d : ",b,k);
scanf("%d",&data[b][k]);
}
}
}
Catatan : maks adalah nilai maksimal untuk kolom.
Contoh pemanggilannya adalah :
int mat1[3][3];
baca_matrik(mat1,3,3);

Halaman - 24
]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C
Oleh : Andri Heryandi, ST

- Menampilkan Matrik
Menampilkan suatu matrik juga memerlukan 2 buah perulangan yaitu baris
dan kolom. Contoh program/fungsi untuk menampilkan suatu matrik adalah :

int b,k,data[3][3];
baca_matrik(data,3,3);
for(b=0;b<3;b++)
{
for(k=0;k<3;k++)
{
printf("%5d",data[b][k]);
}
printf("\n");//pindah baris setelah 1 baris lengkap
}

Script di atas dapat dikembangkan menjadi sebuah fungsi view_matrik seperti


di bawah ini :
void view_matrik(int data[][maks], int baris, int kolom)
{
int b,k;
for(b=0;b<baris;b++)
{
for(k=0;k<kolom;k++)
{
printf("%5d",data[b][k]);
}
printf("\n");
}
}

Contoh pemanggilannya adalah :


int mat[3][3];
baca_matrik(mat,3,3);
view_matrik(mat,3,3);

Halaman - 25
]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C
Oleh : Andri Heryandi, ST

- Operasi-Operasi Matrik
Selain pengisian dan menampilkan matrik, operasi-operasi lain yang dapat
dilakukan terhadap matrik adalah penambahan atau pengurangan matrik,
perkalian matrik, transpose matrik, identifikasi matrik dan lain-lain.
a. Penambahan Matrik
Maksudnya adalah menjumlahkan elemen 2 buah matrik yang
bersesuaian posisinya. Operasi ini menghasilkan matrik baru yang
menampung hasil perhitungan. Secara umum aturan penjumlahan matrik
mempunyai persamaan

Cb,k = Ab,k + Bb,k , dimana b=baris dan k=kolom.

Proses di atas harus diulang sesuai dengan banyaknya baris dan kolom.
Sehingga kalau diimplementasikan dalam bahasa C, script programnya
adalah :

int mat1[3][3]={{1,2,3},{4,5,6},{7,8,9}};
int mat2[3][3]={{1,1,1},{2,2,2},{3,3,3}};
int mat3[3][3];
int b,k;
for(b=0;b<3;b++)
{
for(k=0;k<3;k++)
{
mat3[b][k]=mat1[b][k] + mat2[b][k];
}
}
view_matrik(mat3,3,3,);

Jika perintah tersebut ingin dijadikan sebagai fungsi maka akan menjadi
seperti di bawah ini :
void jumlahkan_matrik(int mat1[][maks],int mat2[][maks],
int mat3[][maks],
int baris, int kolom)
{
int b,k;
for(b=0;b<baris;b++)
{
for(k=0;k<kolom;k++)
{
mat3[b][k]=mat1[b][k] + mat2[b][k];
}
}
}

Cara penggunaan fungsi tersebut adalah :


int mat1[3][3],mat2[3][3],mat3[3][3];
baca_matrik(mat1,3,3);
baca_matrik(mat2,3,3);
jumlahkan_matrik(mat1,mat2,mat3,3,3);
view_matrik(mat3,3,3);

Halaman - 26
]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C
Oleh : Andri Heryandi, ST

b. Pengurangan matrik
Maksudnya adalah pengurangan elemen 2 buah matrik yang bersesuaian
posisinya. Operasi ini menghasilkan matrik baru yang menampung hasil
perhitungan. Secara umum aturan pengurangan matrik mempunyai
persamaan

Cb,k = Ab,k - Bb,k , dimana b=baris dan k=kolom.

Proses di atas harus diulang sesuai dengan banyaknya baris dan kolom.
Sehingga kalau diimplementasikan dalam bahasa C, script programnya
adalah :

int mat1[3][3]={{1,2,3},{4,5,6},{7,8,9}};
int mat2[3][3]={{1,1,1},{2,2,2},{3,3,3}};
int mat3[3][3];
int b,k;
for(b=0;b<3;b++)
{
for(k=0;k<3;k++)
{
mat3[b][k]=mat1[b][k] - mat2[b][k];
}
}
view_matrik(mat3,3,3,);

Jika perintah tersebut ingin dijadikan sebagai fungsi maka akan menjadi
seperti di bawah ini :
void pengurangan_matrik(int mat1[][maks],int mat2[][maks],
int mat3[][maks],
int baris, int kolom)
{
int b,k;
for(b=0;b<baris;b++)
{
for(k=0;k<kolom;k++)
{
mat3[b][k]=mat1[b][k] + mat2[b][k];
}
}
}

Cara penggunaan fungsi tersebut adalah :


int mat1[3][3],mat2[3][3],mat3[3][3];
baca_matrik(mat1,3,3);
baca_matrik(mat2,3,3);
pengurangan_matrik(mat1,mat2,mat3,3,3);
view_matrik(mat3,3,3);

Halaman - 27
]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C
Oleh : Andri Heryandi, ST

c. Perkalian Matrik
Perkalian matrik hanya bisa dilakukan jika banyak kolom pada matrik
pertama sama dengan banyak baris pada matrik kedua. Sebagai contoh :
Matrik A mempunyai baris=2, dan kolom=2
Matrik B mempunyai baris=2, dan kolom=4
Maka akan dihasilkan matrik baru (C) dengan baris=2, dan kolom=4.

Matrik A Matrik B

A1,1 A1,2 B1,1 B1,2 B1,3 B1,4


A2,1 A2,2 B2,1 B2,2 B2,3 B2,4

Matrik C

C1,1 C1,2 C1,3 C1,4


C2,1 C2,2 C2,3 C2,4

C1,1 = A1,1 * B1,1 + A1,2 * B2,1


C1,2 = A1,1 * B1,2 + A1,2 * B2,2
C1,3 = A1,1 * B1,3 + A1,2 * B2,3
C1,4 = A1,1 * B1,4 + A1,2 * B2,4
C2,1 = A2,1 * B1,1 + A2,2 * B2,1
C2,2 = A2,1 * B1,2 + A2,2 * B2,2
C2,3 = A2,1 * B1,3 + A2,2 * B2,3
C2,4 = A2,1 * B1,4 + A2,2 * B2,4

Sehingga secara umum persamaan untuk mencari elemen hasil di posisi


b,k adalah :

Dimana n adalah banyak kolom matrik 1 atau banyak baris matrik 2.

Halaman - 28
]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C
Oleh : Andri Heryandi, ST

Implementasi dalam bahasa C adalah :


int b,k,i;
int mat1[maks][maks],mat2[maks][maks],mat3[maks][maks];
int bm1=2,km1=2,bm2=2,km2=4;
baca_matrik(mat1,bm1,km1);
baca_matrik(mat2,bm2,km2);
for(b=0;b<bm1;b++)
{
for(k=0;k<km2;k++)
{
mat3[b][k]=0;
for(i=0;i<km1;i++)
mat3[b][k]=mat3[b][k]+mat1[b][i]*mat2[i][k];
}
}

view_matrik(mat3,bm1,km2);

Jika operasi tersebut dijadikan sebagai sebuah fungsi, maka script tersebut
akan berbentuk seperti di bawah ini.
void perkalian_matrik(int mat1[][maks], int bm1, int km1,
int mat2[][maks], int bm2, int km2,
int mat3[][maks], int *bm3, int *km3)
{
int b,k,i;
for(b=0;b<bm1;b++)
{
for(k=0;k<km2;k++)
{
mat3[b][k]=0;
for(i=0;i<km1;i++)
mat3[b][k]=mat3[b][k]+mat1[b][i]*mat2[i][k];
}
}
*bm3=bm1;
*km3=km2;
}

Contoh pemanggilannya :
int baris3,kolom3;
int mat1[maks][maks],mat2[maks][maks],mat3[maks][maks];
baca_matrik(mat1,2,2);
baca_matrik(mat2,2,4);
perkalian_matrik(mat1,2,2,
mat2,2,4,
mat3,&baris3,&kolom3);
view_matrik(mat3,baris3,kolom3);

Halaman - 29

Anda mungkin juga menyukai