ALGORITMA

Tuesday, October 25, 2011

Bab II :ARRAY

Array merupakan tipe data yang paling sederhana yang paling banyak dipergunakan. Hampir semua bahasa pemrograman menyediakan native data tipe array ini. Pada bab sebelumnya telah dijelaskan bahwa array termasuk tipe data struktur karena array selalu terdiri dari 1 atau lebih tipe data atomik atau struktur lainnya.

Pada umumnya letak elemen array secara logika dan fisikal (letak dimemori) adalah sama. Array selalu terdiri atas 2 bagian; index dan komponen. Setiap index hanya selalu bersisi 1 komponen (hubungan antara index dan komponen adalah one-to-one). Maka dari itu hubungan antar elemen pada array bersifat homogenous.

Dalam bahasa C dideinisikan array 1 dimensi:

char student [4];

student adalah array 1 dimensi yang terdiri dari 4 komponen yang bertipe char

index contoh nilai

[0] A

[1] B

[2] C

[3] D

Array bisa diakses secara positional access – pengambilan elemen berdasarkan posisi index, atau dengan associative access – pengambilan elemen berdasarkan isi dari elemen yang bersangkutan.

Karena pencapaian elemen pada positional access dilakukan secara acak, maka dapat disebut juga sebagai random access.

· contoh untuk positional akses

for (i=1; i<=jumax; i++) {

printf(“%d”, a[i]);

}

· contoh untuk associative akses

ketemu = false;

nilaiassociative = 45;

for (i=1; i<=jumax; i++) {

if (a[i] = nilaiassociative) ketemu = true;

}

Jenis operasi yang dapat dilakukan terhadap array adalah:

³ Retrieve, yaitu membaca atau mengambil nilai di elemen tertentu didalam array tersebut

³ Update, yaitu mengubah nilai di lemen tertentu yang terdapat pada array tersebut.

Dimensi

Dalam bentuknya array dapat kita tinjau dari segi pengaturan struktur datanya dalam konteks dimensi sebagai berikut:

· Array 1-dimensi, contohnya: list, vektor

Perhatikan contoh penggunaan array astudent pada program dibawah ini:

#include

Main()

{ char student[6];

int i;

student[0] = A;

student[1] = B;

student[2] = C;

student[3] = D;

student[4] = E;

student[5] = F;

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

{ printf(“Daftar Mahasiswa:\n”);

printf(“Student[%d] = \n”, i, student[i]);

}

}

Hasil program diatas adalah:

Daftar Mahasiswa:

Student[0] = A

Student[1] = B

Student[2] = C

Student[3] = D

Student[4] = E

Student[5] = F

· Array 2-dimensi, contohnya: table, matriks (2 dimensi)

(1,1)

(1,2)

(1,3)

(1,4)

(2,1)

(2,2)

(2,3)

(2,4)

(3,1)

(3,2)

(3,3)

(3,4)

Index(1,1) = A

(4,1)

(4,2)

(4,3)

(4,4)

A

B

C

D

E

F

G

Index(4,4) =

H

I

J

K

L

M

N

O

P

Berikut kita akan membahas array 2-dimensi (5x2) yang diberi nama variabel jual dan dapat kita definisikan sebagai berikut:

A

B

C

D

E

F

G

H

I

J

int jual[2][5];

Contoh penggunaan array 2 dimensi:

#include

Main()

{ int jual[2][5];

int i, j, no;

jual[0][0] = 600;

jual[0][1] = 700;

jual[0][2] = 1000;

jual[0][3] = 800;

jual[0][4] = 750;

jual[1][0] = 700;

jual[1][1] = 1000;

jual[1][2] = 800;

jual[1][3] = 750;

jual[1][4] = 450;

printf(“Daftar Penjualan:\n”);

printf(“Senin Selasa Rabu Kamis Jumat\n”);

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

{ prinf(%d, no = i + 1)

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

printf(“%d”, jual[j][j]);

prinf(“\n”);

}

}

Program diatas membuat daftar penjualan dengan mendefinisikan array 2 dimensi dengan instruksi int jual [2][5];

Table yang dibuat untuk penjualan selama seminggu , yaitu di antara hari senin sampai jum’at , yang diekspresikan melalui panjang array dimensi pertama dengan angka 5. Angka selanjutnya adalah mendefinisikan urutan lainya melalui array di dimensi kedua dengan angka 2. Dengan definisi array 2 dimensi diatas, kita mempunyai array dengan jumlah memori yang dialokasikan sebanyak 10 yang dimulai dari index ke [0][0]s/d index ke [1][4].

Cara melakukan assigment untuk array 2 dimensi tidak banyak berbeda dengan yang kita kenal sebelumnya, yaitu sepertii instruksi jual [0][0] = 600; artinya memory untuk index [0][0] mendapat nilai 600, dan analog untuk lainya. Tulis dengan algoritma untuk menampilkan nilai, seperti :

Tampilkan judul

Selama baris belum habis

Selama kolom belum habis

Tampilkan nilai array

Pindahkan ke baris berikutnya

Lakukan dengan menggunakan instruksi FOR berlapis, seperti ;

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

{ prinf(%d, no = i + 1)

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

printf(“%d”, jual[j][j]);

prinf(“\n”);

proses pengulangan dilakukan dengan menggunakan variable i dan j untuk running index. Hasil yang didapat adalah ;

daftar penjualan :

Senin

Selasa

Rabu

Kamis

Jum’at

1600

700

1000

800

750

2700

1000

800

750

450

· Array 2-dimensi, contohnya: matriks (2 dimensi)

Contoh array 2 dimensi

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

{ prinf(%d, no = i + 1)

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

printf(“%d”, jual[j][j]);

prinf(“\n”);

· Array multi-dimensi, pada prinsipnya, secara teori jumlah dimensi dari matriks tidak terbatas, yang membatasi adalah kemampuan hardware dan besar dari memori.

Parameter array:

Untuk penghitungan lokasi/address dari array kita harus mengetahui beberapa parametr array, yaitu:

1) Base address (b)

Alamat (byte pertama) dari array yang di assign pada saat binding time.

Binding time adalah waktu dimana array di assign pada suatu lokasi di memory, bsa pada saat di compile atau di execute.

2) Component Length (L)

Panjangnya memory untuk menyimpan satu komponen (L) tergantung dari tipe dan bahasa pemrograman , misalkan pada Turbo Pascal 7.0 tipe integer mempunyai L = 2, sedangkan pada Turbo C 2.0 integer L = 2 tetapi pada Visual C++ 5.0, integer L = 5;

3) Lower Bound(lk) & Upper Bound(uk)

Lower Bound adalah nilai index yang terkecil, sedangkan upper bound adalah nilai index yang terbesar. Contoh: int a[5], lk = 0 dan uk = 4

4) Dimension (d)

Besarnya dimensi suatu array. Contoh: untuk int a[5], d = 1 sedangkan untuk int s[5][2], d =2

Array Mapping Function (AMF)

Setelah kita mengetahui definisi dari masing-masing parameter array seperti yang dibahas diatas, maka berikutnya kita mempergunakan parameter tersebut dalam perhitungan lokasi (alamat) dari komponen berdasarkan nilai indeksnya, atau yang lebih dikenal dengan istilah Array Mapping Function disingkat AMF

Array Mapping Function (AMF) adalah suatu fungsi pemetaan nilai indeks (i) dari suatu komponen array ke alamat(adress) dari komponen yang bersangkutan

Rumus yang dipergunakan dalam fungsi pemetaan ini adalah :




Addrs (S[i1][i2]…[id]) = C0 + C1 *i1 + C2* i2 +… + Cd*id)

dimana:

Cd = L

Ct-1 = (ut-lt +1) * C0 * Ct

C0 = b – (C1*l1) - … - (Cd * ld)

Besar memori M = L * (ui-li + 1) * …*(ud-ld+1)

L = component Length

d = dimension

l1 = lower bound u1= upperbound

b = base address

Untuk lebih memperjelas rumus diatas, akan diberikan contoh perhitungan AMF.

Array 1 dimensi

Int S[5];

Diketahui b = 500, L = 2

l1 = 0, u1 = 4

C1 = L= 2

= 500 – (0 * 2)

= 500

Addrs S[i] = c0 + c1 * i1 à Addrs (S[1] )= 500 + 2 * 1 = 502

Addrs (S[2]) = 500 + 2 * 2 = 504

Dan seterusnya sampai S[4].

2.2 STRUCTURE

Structure pada C identik dengan Record pada bahasa Pascal. Structure merupakan kumpulan dari satu atau beberapa variabel yang mempunyai tipe sama atau berbeda (heterogeneous). Variabel didalam structure disebut dengan nama komponen, field, elemen atau members.

Bentuk umum deklarasi structure pada C adalah:

struct{

;

;

...

...

} ;

Contoh:

struct Mahasiswa{

char Nim[10];

char nama[20];

float ip;

int semester;

};

Setelah structure terdefinisi, apabila ada variabel baru yang bertipekan structure tadi, maka:

struct Mahasiswa X;

atau bisa dideklarasikan langsung setelah deklarasi structure:

struct Mahasiswa{

char Nim[10];

char nama[20];

float ip;

int semester;

}; X, Y;

Cara akses field

§ Bentuk umum:

.

à

Contoh:

X.semester=4;

X.ip=3.75;

Mahasiswa *ptr=&X;

ptràsemester=4;

ptràip=3.75;

§ Membaca data dari keyboard

scanf(“%d”,&X.semester);

scanf(“%s”,&X.nama);

§ Besar memori yang dipergunakan oleh structure sama dengan jumlah memori yang diperlukan oleh setiap field-nya.

Parameter Structure

§ Lokasi basis/ base address (b)

§ Field List

§ Field Length

Perhitungan Memori

Alamat Field= base location + offset.

Contoh:

Jika base location = 500, dan komponen length dari tipe integer = 2

struct Tgl{

int tanggal;

int bulan;

int tahun;

};

struct Peg{

int NIP;

Tgl mulai_bekerja;

Tgl berhenti;

};

Nama field

Field type

Panjang field

Offset

NIP

Int

2

0

Mulai Keja

Tgl

6

2

-Tanggal

Int

2

2

- Bulan

Int

2

4

- Tahun

Int

2

6

Berhenti

Tgl

6

8

- Tanggal

Int

2

8

- Bulan

Int

2

10

- Tahun

Int

2

12

Lokasi field berhenti = base location + offset

= 500 + 8 = 508

Lokasi field berhenti.tahun = 500 + 12 = 512

Soal Latihan

1. Bila dideklarasikan dalam bahasa C:

int A[4][6];

dan diketahui Base Addressnya 500

komponen length untuk integer adalah 2

carilah address dari A[0][0], A[1][3], A[4][5] dan besarnya memory yang digunakan.

Latihan dirumah

1. Diketahui int A[5][4]; dengan base address 400; komponen lengthnya 2

buat mapping addressnya dan tentukan berapa memory yang digunakan

2. Buatlah program dengan bahasa C untuk membentuk record seperti dibawah ini

record mahasiswa mempunyai field – field:

NIM bertipe string sebanyak 10

Nama bertipe string sebanyak 20

Alamat bertipe string sebanyak 30

Jenis kelamin bertipe string sebanyak 1

Dll (definisikan menurut anda)

0 comments:

Post a Comment