KU1071 Array
-
Upload
andreas-dwi-putra -
Category
Documents
-
view
49 -
download
1
description
Transcript of KU1071 Array
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
• 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.
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
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.