KU1071 Array

26
Array (Tabel) 2012/10/23 TW/KU1071/Sem. I 2012/2013 1 Tim Pengajar KU1071 Sem. I 2012/2013

description

aabcasx

Transcript of KU1071 Array

Array (Tabel)

2012/10/23 TW/KU1071/Sem. I 2012/2013 1

Tim Pengajar KU1071

Sem. I 2012/2013

Tujuan Perkuliahan

• Mahasiswa memahami makna dan kegunaan array (tabel)

• Mahasiswa dapat menggunakan notasi pendefinisian dan pengacuan array

2012/10/23 TW/KU1071/Sem. I 2012/2013 2

pendefinisian dan pengacuan array dengan benar hingga proses pencarian terhadap elemen array

• Mahasiswa dapat membuat program dengan menggunakan array

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

2012/10/23 TW/KU1071/Sem. I 2012/2013 3

– 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

Array – contoh visualisasi

NMin NMin+1 NMin+2 NMin+3 NMaxNMax-1NMax-2

2012/10/23 TW/KU1071/Sem. I 2012/2013 4

NMin NMin+1 NMin+2 NMin+3 NMaxNMax-1NMax-2

ArrayElemen Array, dengan

tipe homogen untuk

setiap elemenIndeks Array,

dengan tipe ordinal

Contoh PenggunaanKAMUS

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

2012/10/23 TW/KU1071/Sem. I 2012/2013 5

• 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 indeksTabKatai, jika i terdefinisi

TabKata7

TabJumlahHari3

Contoh Pemakaian Array

Kasus-1: KataKata 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 }

KAMUS

Definisi container:Sebuah kata maksimum terdiri dari 30 karakter

2012/10/23 TW/KU1071/Sem. I 2012/2013 6

KAMUSKata: array [1..30] of characterPanjang: 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)

stop 1≤HurufKe≤Panjang

output(“Masukan salah”)

output (KataHurufKe) {menampilkan huruf ke-(HurufKe) dari kata}

Sebuah kata maksimum terdiri dari 30 karakter

Indeks efektif: Panjang kata sebenarnya

Validasi input, agar di dalam batas ukuran 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

2012/10/23 TW/KU1071/Sem. I 2012/2013 7

ALGORITMAPil←random(4)

output(“Kategori: Kota di Indonesia”)

depend on (Pil)

Pil=1: K1←’J’; K2←’A’; K3←’M’; K4←’B’; K5←’I’; P←5

Pil=2: K1←’S’; K2←’E’; K3←’M’; K4←’A’; K5←’R’; K6←’A’; K7←’N’; K8←’G’

P←8

Pil=3: K1←’P’; K2←’A’; K3←’D’; K4←’A’; K5←’N’; K6←’G’; P←6

Pil=4: K1←’K’; K2←’E’; K3←’N’; K4←’D’; K5←’A’; K6←’R’; K7←’I’; P←7

PEMROSESAN SEKUENSIAL

PADA TABEL

2012/10/23 TW/KU1071/Sem. I 2012/2013 8

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

2012/10/23 TW/KU1071/Sem. I 2012/2013 9

• 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

Skema Pemrosesan SekuensialKAMUS 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}

2012/10/23 TW/KU1071/Sem. I 2012/2013 10

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

Pada skema ini

diasumsikan bahwa seluruh

elemen tabel terisi.

Pemrosesan Sekuensial pada TabelContoh 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 }

KAMUSconstant NMin : integer = 1 { NMin : batas bawah indeks}constant NMax : integer = 100 { NMax : batas atas indeks}i : integer [NMin..NMax]

2012/10/23 TW/KU1071/Sem. I 2012/2013 11

i : integer [NMin..NMax]T : array [NMin..NMax] of integerN : 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

Pemrosesan Sekuensial pada TabelContoh 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}

KAMUSconstant 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

2012/10/23 TW/KU1071/Sem. I 2012/2013 12

T : array [NMin..NMax] of integerx : integer { nilai yang dibaca dan akan disimpan sebagai elemen tabel }

ALGORITMAi ← NMin {Inisialisasi }input (x) {First element }while (x ≠9999) and (i<=NMax) do

Ti ← x { Proses }i ← i + 1input (x) { Next element }

{x =9999 or i >NMax }if (i>NMax) then

output (“Tabel sudah penuh “)N � i - 1

Jika pada saat input pertama kali sudah

diisi “9999”, maka N akan berisi NMin – 1.

Karena NMin =1, proses ini aman (N diisi

0). Hati-hati jika NMin <> 1.

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 • 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 dianggapsalah.

– 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 }

KAMUSconstant 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 charactertype ElTabKata : < Kata : TKata, Panjang : integer[1..PjgMax], Kategori : string >TabKata : array[NMin..NMax] of ElTabKataN : 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

2012/10/23 TW/KU1071/Sem. I 2012/2013 15

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 ← 0while (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)

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]

ALGORITMAidx ← random(N) {idx diisi nilai random antara 1..N}

2012/10/23 TW/KU1071/Sem. I 2012/2013 16

idx ← random(N) {idx diisi nilai random antara 1..N}P ← TabKataidx.Panjangoutput(TabKataidx.Kategori,P)

{salin kata}i traversal [1..P]

Ki ← TabKataidx.Katai

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 : characternbFound : integer

ALGORITMA

2012/10/23 TW/KU1071/Sem. I 2012/2013 17

nbFound : integerALGORITMA

input(tebakan)

{telusuri K untuk memeriksa apakah tebakan ada pada K}nbFound ← 0i 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) thennS ← nS + 1GambarHangMan(nS)

• Latihan: tuliskan definisi, spesifikasi, dan algoritma dari prosedur PrintKata, yang mencetak kata yang terdapat di dalam sebuah variabel bertipe TKata.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.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

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

21

{ 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];

TabInt[i] = 1;

X = TabInt[10];

Array Dinamik

• Array dinamik: alokasi memori untuk array (ukuran array) dapat diatur pada saat runtime

• Deklarasi: type-array *nm_array;

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

22

• Deklarasi: type-array *nm_array;

• Tahapan:1. Deklarasi (definisikan nama)

2. Alokasi (tentukan ukuran/alokasi memori)

3. Inisialisasi nilai

4. Dealokasi (pengembalian memori)

Array Dinamik - Contoh

1. Deklarasi (definisikan nama)int *TabInt;

2. Alokasi (tentukan ukuran/alokasi memori)TabInt = (int *) malloc (100 * sizeof(int));

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

23

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);

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

10/23/2012 FN/IF2030/Sem. 1 2012-2013 2410/23/2012 24

• 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’

Type Data String (Bahasa C)

• Contoh deklarasi (+ inisialisasi):

• Contoh cara assignment nilai:

char msg1[] = ”ini string”; /* deklarasi dan inisialisasi */

char msg2[37]; /* deklarasi string sepanjang 37 karakter */

char *msg3;

10/23/2012 FN/IF2030/Sem. 1 2012-2013 25

• 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”;

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

2012/10/23 TW/KU1071/Sem. I 2012/2013 26

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.