Anda di halaman 1dari 26

Array (Tabel)

Tim Pengajar KU1071


Sem. I 2012/2013

2012/10/23

TW/KU1071/Sem. I 2012/2013

Tujuan Perkuliahan
Mahasiswa memahami makna dan
kegunaan array (tabel)
Mahasiswa dapat menggunakan notasi
pendefinisian dan pengacuan array
dengan benar hingga proses pencarian
terhadap elemen array
Mahasiswa dapat membuat program
dengan menggunakan array
2012/10/23

TW/KU1071/Sem. I 2012/2013

Array, Tabel Kontigu


Type array adalah type yang mengacu kepada sebuah
atau sekumpulan elemen melalui indeks
Merepresentasikan sekumpulan informasi yang bertype
sama dan disimpan dengan urutan yang sesuai dengan
definisi indeks secara kontigu dalam memori komputer
indeks harus suatu type yang mempunyai keterurutan (ada
suksesor dan predesesor), misalnya type integer, karakter,
enumerasi

Elemen dari array dapat diakses langsung jika dan


hanya jika indeks terdefinisi
ditentukan harganya dan sesuai dengan domain yang
didefinisikan untuk indeks tersebut

Disebut juga sebagai tabel, vektor, atau larik


2012/10/23

TW/KU1071/Sem. I 2012/2013

Array contoh visualisasi

NMin

NMin+1

NMin+2

NMin+3

Array
Indeks Array,
dengan tipe ordinal

2012/10/23

NMax-2

NMax-1

NMax

Elemen Array, dengan


tipe homogen untuk
setiap elemen

TW/KU1071/Sem. I 2012/2013

Contoh Penggunaan
KAMUS
TabKata : array [1..100] of string
TabJumlahHari : array [1..12] of integer
type Point : <x : integer, y : integer >
type Indeks : integer [1..10]
TabTitikSurvey : array [Indeks] of Point
TabFREK : array ['A'..'Z'] of integer

Domain :
Domain array sesuai dengan pendefinisian indeks
Domain isi array sesuai dengan jenis array

Konstanta :
Konstanta untuk seluruh array tidak terdefinisi
Konstanta hanya terdefinisi jika indeks dari array terdefinisi

Cara mengacu sebuah elemen: melalui indeks


TabKatai, jika i terdefinisi
TabKata7
TabJumlahHari3

2012/10/23

TW/KU1071/Sem. I 2012/2013

Contoh Pemakaian Array

Kasus-1: Kata
Kata pada dasarnya dapat dipandang sebagai sebuah array of
character,
Contoh :
Kata = BANDUNG
Kata4: D Kata1: B
Program Kata
{ Mengisi Kata yang berbentuk Array of Character, sehingga dapat dilakukan akses
terhadap karakter-karakter pembentuk kata }
Definisi container:
Sebuah kata maksimum terdiri dari 30 karakter
KAMUS
Kata: array [1..30] of character
Indeks efektif: Panjang kata sebenarnya
Panjang: integer { panjang kata }
procedure IsiKata (output K: array[1..30] of character, output P: integer) { mengisi K }
HurufKe : integer

ALGORITMA
IsiKata(Kata,Panjang)
{ Contoh pemanfaatan setelah Tabel Kata terdefinisi isinya }
iterate
{minta masukan HurufKe, hingga masukan dalam range 1..Panjang}
input (HurufKe)
Validasi input, agar di dalam
stop 1HurufKePanjang
batas ukuran kata
2012/10/23 output(Masukan salah)
TW/KU1071/Sem. I 2012/2013
6
output (KataHurufKe) {menampilkan huruf ke-(HurufKe) dari kata}

Contoh Pemakaian Array


Kasus-1: Kata (lanjutan)
procedure IsiKata (output K: array[1..30] of character, output P: integer)
{ mengisi tabel K }
{ I.S. : K dan P sembarang }
{ F.S. : P terdefinisi; K siap dipakai, elemen [1..P] sudah diisi }
Kamus Lokal :
Pil : integer
ALGORITMA
Pilrandom(4)
output(Kategori: Kota di Indonesia)
depend on (Pil)
Pil=1: K1J; K2A; K3M; K4B; K5I; P5
Pil=2: K1S; K2E; K3M; K4A; K5R; K6A; K7N; K8G
P8
Pil=3: K1P; K2A; K3D; K4A; K5N; K6G; P6
Pil=4: K1K; K2E; K3N; K4D; K5A; K6R; K7I; P7
2012/10/23

TW/KU1071/Sem. I 2012/2013

PEMROSESAN SEKUENSIAL
PADA TABEL
2012/10/23

TW/KU1071/Sem. I 2012/2013

Pemrosesan Sekuensial Pada Tabel


Dimungkinkan adanya akses langsung jika
indeks terdefinisi
First-Elmt adalah elemen tabel dengan indeks terkecil
Next-Elmt dicapai melalui suksesor indeks

Model akses sekuensial tanpa mark


kondisi berhenti adalah jika indeks sudah mencapai
harga indeks yang terbesar yang telah terdefinisi
(indeks efektif maksimum)

Tabel tidak mungkin kosong


jika kita mendefinisikan tabel, maka minimal
mengandung sebuah elemen

2012/10/23

TW/KU1071/Sem. I 2012/2013

Skema Pemrosesan Sekuensial


KAMUS UMUM PEMROSESAN TABEL
constant NMin: integer =1
{batas bawah tabel}
constant NMax: integer =100
{batas atas tabel}
type ElType : ...
{suatu type terdefinisi, misalnya integer}
i : integer [NMin..NMax]
{indeks penelusuran tabel}
T : array [NMin..NMax] of ElType {tabel dengan elemen bertype ElType}
procedure Inisialisasi {persiapan yang harus dilakukan sebelum pemrosesan}
procedure Proses (input X : ElType)
{proses thd Current-Elmt tabel T}
procedure Terminasi
{ "penutupan" setelah pemrosesan selesai}
SKEMA PEMROSESAN TABEL T untuk indeks [NMin..NMax]
{Traversal Tabel T untuk Indeks bernilai NMin..Nmax}
Skema :
Inisialisasi
i traversal [NMin..NMax]
Proses(Ti)
Terminasi
2012/10/23

TW/KU1071/Sem. I 2012/2013

Pada skema ini


diasumsikan bahwa seluruh
elemen tabel terisi.

10

Pemrosesan Sekuensial pada Tabel


Contoh 1: mengisi tabel, jumlah elemen diketahui
Program ISITABEL1
{ Traversal untuk mengisi, dengan membaca nilai setiap elemen tabel dari keyboard
jika banyaknya elemen tabel yaitu N diketahui. Nilai yang dibaca akan disimpan di
TNMin s/d TN. Nilai N harus dalam daerah nilai indeks yang valid }
KAMUS
constant NMin : integer = 1 { NMin : batas bawah indeks}
constant NMax : integer = 100 { NMax : batas atas indeks}
i : integer [NMin..NMax]
T : array [NMin..NMax] of integer
N : integer
ALGORITMA
{Inisialisasi }
repeat
input (N)
until (NMin N NMax)
i traversal [NMin..N]
input (Ti)
Catatan: N sebenarnya adalah indeks maksimum efektif. Tetapi, karena NMin=1, maka N
juga merupakan jumlah elemen tabel yang terdefinisi
2012/10/23

TW/KU1071/Sem. I 2012/2013

11

Pemrosesan Sekuensial pada Tabel


Contoh 2: mengisi tabel, jumlah elemen tidak diketahui
Program ISITABEL2
{ Traversal untuk mengisi, dengan membaca nilai setiap elemen tabel dari keyboard
yang diakhiri dengan 9999. Nilai yang dibaca akan disimpan di TNMin s/d TN, nilai N
harus berada dalam daerah nilai indeks yang valid, atau 0 jika tabel kosong}
KAMUS
constant NMin : integer = 1
{ NMin : batas bawah indeks}
constant NMax : integer = 100 { NMax : batas atas indeks}
N : integer [0..NMax]
{ indeks efektif tabel, 0 jika tabel kosong }
i : integer [NMin..NMax+1]
{ indeks untuk traversal tabel }
T : array [NMin..NMax] of integer
x : integer { nilai yang dibaca dan akan disimpan sebagai elemen tabel }
ALGORITMA
i NMin {Inisialisasi }
input (x) {First element }
while (x 9999) and (i<=NMax) do
Ti x { Proses }
i i+1
Jika pada saat input pertama kali sudah
input (x) { Next element }
diisi 9999, maka N akan berisi NMin 1.
{x =9999 or i >NMax }
Karena NMin =1, proses ini aman (N diisi
if (i>NMax) then
output (Tabel sudah penuh )
0). Hati-hati jika NMin <> 1.
Ni-1
2012/10/23

TW/KU1071/Sem. I 2012/2013

12

STUDI KASUS: PROGRAM


TEBAK KATA
2012/10/23

TW/KU1071/Sem. I 2012/2013

13

Deskripsi Persoalan
Program memiliki sejumlah pilihan kata, yang akan ditebak oleh
pengguna, dengan panjang berbeda. Program memilih satu kata
berdasarkan fungsi random (prosedur PilihKata).
Pilihan kata disimpan dalam sebuah array yang setiap elemen berisi:
Kata (array of character) yang akan ditebak
Panjang kata
Kategori

Huruf pembentuk kata tidak harus berbeda.

Pengguna mendapat informasi panjang kata, lalu harus menebak huruf


per huruf. Untuk setiap huruf yang ditebak:
Jika merupakan bagian dari kata, tampilkan posisi yang sesuai
Jika bukan merupakan bagian dari kata, gambarlah hang man secara
bertahap (asumsi: ada prosedur GambarHangMan).
Jika sebuah huruf dimasukkan lebih dari satu kali, masukan kedua dianggap
salah.
Kesempatan menebak huruf habis, jika hang man sudah tergambar
sempurna. Kata yang ditebak harus dimunculkan.

Jika pengguna berhasil menebak kata, akan ditampilkan skor yang


diperoleh (asumsi: ada fungsi HitungSkor).
2012/10/23

TW/KU1071/Sem. I 2012/2013

14

Program TebakKata_Arr
{ input: tebakan kata huruf per huruf
output: status tebakan T/F, posisi huruf jika benar, gambar hangman jika salah,
skor jika kata berhasil ditebak }
KAMUS
constant NMin : integer = 1 { NMin : batas bawah indeks}
constant NMax : integer = 100 { NMax : batas atas indeks}
constant PjgMax : integer = 30 { panjang kata maksimum }
type TKata : array[1..PjgMax] of character
type ElTabKata : < Kata : TKata, Panjang : integer[1..PjgMax], Kategori : string >
TabKata : array[NMin..NMax] of ElTabKata
N : integer { Jumlah elemen terdefinisi pada TabKata }
Kata : TKata { kata yang akan ditebak }
iKata : integer [NMin..NMax] {indeks tabel TabKata yang dipilih}
Panjang : integer[1..PjgMax]; nBenar, nSalah : integer
{ deklarasi prosedur PilihKata, TebakHuruf, dan PrintKata, lihat di blok sub program }
function HitungSkor(nS : integer) integer {menghitung skor}
ALGORITMA
{ Inisialisasi pengisian TabKata, ditinggalkan sebagai latihan }
PilihKata(Kata,Panjang,iKata) { isi Kata secara random dari TabKata }
nBenar 0; nSalah 0
while (nBenar<Panjang) and (nSalah<8) do
TebakHuruf(Panjang,Kata,nBenar,nSalah)
{nBenar=Panjang or nSalah=8}
if (nBenar=Panjang) then {kata berhasil ditebak}
output(HitungSkor(nSalah))
else {kata tidak berhasil ditebak}
PrintKata(TabKataiKata)
2012/10/23

TW/KU1071/Sem. I 2012/2013

15

procedure PilihKata(output K : TKata, output P : integer[1..PjgMax],


output idx : integer[NMin..NMax])
{ I.S.: K, P, idx sembarang, TabKata dan N sudah terdefinisi}
{F.S.: idx terdefinisi, P berisi TabKataidx.Panjang, K berisi TabKataidx.Kata}
{Proses: bangkitkan nilai idx menggunakan fungsi random, salin isi elemen TabKata
pada indeks idx ke P dan K}
KAMUS
i : integer[1..PjgMax]
ALGORITMA
idx random(N) {idx diisi nilai random antara 1..N}
P TabKataidx.Panjang
output(TabKataidx.Kategori,P)
{salin kata}
i traversal [1..P]
Ki TabKataidx.Katai

2012/10/23

TW/KU1071/Sem. I 2012/2013

16

procedure TebakHuruf(input P : integer[1..PjgMax], input/output K : TKata,


input/output nB,nS : integer)
{ I.S.: P, K, nB, nS terdefinisi}
{F.S.: Jika huruf yang ditebak ada pada K, maka
nB = nB awal + jml kemunculan huruf pada K
huruf sesuai pada K diganti menjadi #
Jika huruf yang ditebak tidak ada pada K, nS=nS awal+1, gambar Hang man}
{Proses: minta masukan huruf, kemudian periksa apakah huruf ada pada K}
KAMUS
i : integer[1..PjgMax]
tebakan : character
nbFound : integer
ALGORITMA
input(tebakan)
{telusuri K untuk memeriksa apakah tebakan ada pada K}
nbFound 0
i traversal [1..P]
if (tebakan = Ki) then {ditemukan huruf yang sama}
nbFound nbFound + 1; nB nB + 1; Ki #
output(Posisi ke-,i,tebakan)
if (nbFound=0) then
nS nS + 1
GambarHangMan(nS)
2012/10/23

TW/KU1071/Sem. I 2012/2013

17

Latihan: tuliskan definisi, spesifikasi, dan


algoritma dari prosedur PrintKata, yang
mencetak kata yang terdapat di dalam
sebuah variabel bertipe TKata.
Contoh pemanggilan di dalam program
utama: PrintKata(TabKataiKata)

2012/10/23

TW/KU1071/Sem. I 2012/2013

18

ARRAY PADA BAHASA C

2012/10/23

TW/KU1071/Sem. I 2012/2013

19

Jenis Array Dalam Bahasa C


Array Statik
Merupakan array yang ukurannya sudah
harus ditentukan pada saat pembuatan
program  ukuran fixed.

Array Dinamik
Merupakan array yang ukurannya baru
ditentukan pada saat runtime, menggunakan
perintah alokasi  ukuran dapat disesuaikan
berdasarkan kebutuhan.
2012/10/23

TW/KU1071/Sem. I 2012/2013

20

Array Statik
Notasi Algoritmik

Bahasa C

{ Deklarasi Variabel }
nm_array : array [0..nmax-1]
of type-array

/* Deklarasi Variabel */
type-array nm_array[nmax];
Catatan: indeks array selalu
dimulai dari 0

{ Cara Mengacu Elemen }


nm_arrayindeks

{ Cara Mengacu Elemen }


nm_array[indeks]

Contoh:
TabInt : array [0..99]
of integer
TabInti 1
X TabInt10

Contoh:
int TabInt[100];

10/23/2012

TabInt[i] = 1;
X = TabInt[10];

WDS,FNA,AP,MLK/IF2030/Sem. 1
2012-2013

21

Array Dinamik

Array dinamik: alokasi memori untuk


array (ukuran array) dapat diatur pada
saat runtime
Deklarasi: type-array *nm_array;
Tahapan:
1.
2.
3.
4.

10/23/2012

Deklarasi (definisikan nama)


Alokasi (tentukan ukuran/alokasi memori)
Inisialisasi nilai
Dealokasi (pengembalian memori)
WDS,FNA,AP,MLK/IF2030/Sem. 1
2012-2013

22

Array Dinamik - Contoh


1. Deklarasi (definisikan nama)
int *TabInt;

2. Alokasi (tentukan ukuran/alokasi memori)


TabInt = (int *) malloc (100 * sizeof(int));
/* TabInt dialokasi sebesar 100 */

3. Inisialisasi nilai
*(TabInt + i) = 9; /* pny. efek sama dgn: */
TabInt[i] = 9;

4. Dealokasi (pengembalian memori)


free(TabInt);
10/23/2012

WDS,FNA,AP,MLK/IF2030/Sem. 1
2012-2013

23

Type Data String


Dalam C, string adalah pointer ke array dengan
elemen character
Contoh konstanta string: Ini sebuah string
Konstanta string berada di antara double quotes

String array of char


Representasi internal string selalu diakhiri character
\0, sedang array of character tidak
Jadi, string A sebenarnya terdiri atas dua buah
character yaitu A dan \0

10/23/2012

FN/IF2030/Sem. 1 2012-2013

24

Type Data String (Bahasa C)


Contoh deklarasi (+ inisialisasi):
char msg1[] = ini string; /* deklarasi dan inisialisasi */
char msg2[37]; /* deklarasi string sepanjang 37 karakter */
char *msg3;

Contoh cara assignment nilai:


strcpy(msg2, pesan apa); /* msg2 diisi dgn pesan apa */
msg3 = (char *) malloc (20 * sizeof(char)); /* alokasi
memori terlebih dahulu */
strcpy(msg3, halooo); /* msg3 diisi */
/* HATI-HATI, cara di bawah ini SALAH! */
msg3 = Kamu pesan apa;

10/23/2012

FN/IF2030/Sem. 1 2012-2013

25

Latihan
1. Buatlah sebuah fungsi HitungRataTabel yang menghitung nilai
rata-rata dari seluruh elemen array TabInt (array dengan elemen
bertipe integer, merupakan parameter fungsi) yang elemennya
berjumlah N (juga merupakan parameter fungsi).
2. Buatlah sebuah prosedur KemunculanTerakhir yang mencari
indeks array terakhir yang berisi suatu nilai. Parameter prosedur
adalah TabInt (array dengan elemen integer), N (indeks efektif), X
(nilai yang akan dicari), dan IX (indeks terakhir pada array yang
bernilai X). IX akan bernilai 0 jika X tidak terdapat di dalam TabInt.
Contoh: N=9, TabInt={4,3,7,6,3,8,4,3,6}, X=3, maka IX=8
3. Buatlah sebuah fungsi IsPalindrom yang menerima masukan
sebuah array of character (TChar) dan sebuah integer yang
menyatakan indeks efektif maksimum array (N). Fungsi akan
mengembalikan true apabila karakter2 di dalam TChar adalah
palindrom. Sebuah rangkaian karakter disebut palindrom jika
dibaca dari depan dan dari belakang sama, misalnya: MALAM,
KASUR RUSAK. Array of character kosong adalah palindrom.
2012/10/23

TW/KU1071/Sem. I 2012/2013

26

Anda mungkin juga menyukai