Array & String
4.1 Array
Array merupakan sekumpulan elemen berindeks yang memiliki tipe yang sama (base type).
Pendefinisian array ditunjukkan dengan format:
array [<indexType1>,...,<indexTypen>] of <baseType>
yang mana <indexType> merupakan suatu tipe bilangan (ordinal) yang tidak boleh melebihi dari 2GB.
Contoh yang sederhana adalah array satu dimensi yang hanya memiliki satu indexType. Contoh pendeklarasian,
var
Larik: array [1..255] of char;
mendeklarasikan suatu variabel bernama Larikyang menampung 255 karakter (255 bytes).
Sehingga,Larik[11]berarti karakter ke-11 dari Larik. Jika kita membuat array tetapi tidak mengisikan nilai pada semua elemennya, elemen yang tidak terpakai masih tetap dialokasikan di memori tetapi datanya belum diinisialisasi.
Selain yang sederhana (satu dimensi), ada juga array multidimensi yang merupakan array dari array, dengan kata lain memiliki lebih dari satu indeks. Contohnya:
type
Matriks = array [1..3] of array [1..5] of longint;
Bentuk di atas sama juga dengan bentuk berikut:
type
Matriks = array [1..3, 1..5] of longint;
Bentuk yang manapun sama saja efeknya, mengalokasikan array sebanyak 15 longint(15*4
= 45 bytes).
4.2 Penghitung Karakter Vokal
Program berikut akan membaca masukan string, kemudian dihitung jumlah huruf vokalnya. Yang termasuk huruf vokal antara lain A,I,U,E,O.
Sesi
4
Gambar 1. Program Pembaca Masukan String.
Komponen Properti Nilai
Edit1, Edit2 Text (kosongkan)
Label1 Caption String
Label2 Caption Jumlah Vokal
BitBtn1 Kind
Caption bkOK
Hitung
BitBtn2 Kind
Caption bkClose
Tutup
Form1 Caption Program Pembaca Masukkan String
Kode program untukeventOnClickpada komponenBitBtn1adalah sebagai berikut :
procedure TForm1.BitBtn1Click(Sender: TObject);
var
i, vokal: integer;
teks: string;
begin
teks := Edit1.Text;
vokal := 0;
for i:=1 to Length(teks) do begin
if UpCase (teks[i]) = 'A' then vokal := vokal+1;
if UpCase (teks[i]) = 'I' then vokal := vokal+1;
if UpCase (teks[i]) = 'U' then vokal := vokal+1;
if UpCase (teks[i]) = 'E' then vokal := vokal+1;
if UpCase (teks[i]) = 'O' then vokal := vokal+1;
end;
Edit2.Text := IntToStr(vokal);
end;
Gambar 2. Program Pembaca Masukan String setelah dieksekusi.
Dari contoh eksekusi di atas huruf vokal yang muncul adalah e,a,a,o,a,e, dan i, sehingga berjumlah 7 buah.
Penjelasan :
Variabel teks yang bertipe string dapat diperlakukan sebagai array. Ini dikarenakan string merupakan array dari karakter.
PerintahUpCase()digunakan untuk merubah suatu karakter menjadi huruf besar. Sehingga tidak peduli huruf kecil atau besar, semua akan menjadi huruf besar dan dianggap sebagai huruf vokal yang bersesuaian dengan kondisi if-nya.
Perlu diketahui, ada juga perintah UpperCase() yang digunakan untuk mengkonversi semua abjad dalam satu kalimat (string) menjadi huruf kapital semua. Kebalikannya adalah fungsi
LowerCase().
Catatan : Baris :
if UpCase (teks[i]) = 'A' then vokal := vokal+1;
if UpCase (teks[i]) = 'I' then vokal := vokal+1;
if UpCase (teks[i]) = 'U' then vokal := vokal+1;
if UpCase (teks[i]) = 'E' then vokal := vokal+1;
if UpCase (teks[i]) = 'O' then vokal := vokal+1;
dapat diubah menjadi :
if UpCase(teks[i]) in [‘A’, ‘I’, ‘U’, ‘E’, ‘O’] then vokal := vokal + 1;
Kemudian, pernyataan:
vokal := vokal + 1;
bisa disederhanakan menjadi:
inc(vokal,1);
atau
inc(vokal);
4.3 Pembalik Kalimat
Pada program berikutnya, kita akan membalikan kalimat yang diinputkan olehuser. Siapkan 2 buah
Label, 2Edit, dan 2BitBtn. Atur masing-masing propertinya sebagai berikut:
Komponen Properti Nilai
Edit1, Edit2 Text (kosongkan)
Edit2 Color clBtnFace
Label1 Caption Masukkan sembarang kalimat
Label2 Caption Hasil pembalikan
BitBtn1 Kind
Caption bkRetry
Balikkan
BitBtn2 Kind
Caption bkClose
Tutup
Form1 Caption Program Pembalik Kalimat
Rancanglah agar tampak seperti gambar berikut ini:
Gambar 3. Rancangan Program Pembalik Kalimat.
Masukkan kode berikut keeventOnClickpada tombol yang bertuliskan “Balikkan”:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
kalimat, hasil: string;
i, panjang: integer;
temp: string[1];
begin
//Inisialisasi
kalimat := Edit1.Text;
hasil := '';
panjang := Length(kalimat);
for i := 1 to panjang do begin
temp := Copy(Kalimat, panjang+1-i, 1);
hasil := Concat(hasil, temp);
end;
Edit2.Text := hasil;
end;
Gambar 4. Tampilan program setelah dieksekusi.
Penjelasan :
Perintah Length(x) digunakan untuk mengetahui jumlah karakter yang terkandung dalam variabelx.
Perintah Copy(S, P, I) digunakan untuk menyalin karakter-karakter di variabel S mulai dari posisiPsebanyakI.
Perintah Concat(A, B) digunakan untuk menggabungkan kalimat yang terkandung pada variabelA dan B. Perintah ini akan sama hasilnya dengan pernyataanA+B. Sebagai catatan, parameter dalam perintah ini bisa berjumlah berapa saja. Misalnya untuk menggabungkan empat string dapat digunakan perintah:Concat(A, B, C, D).
Catatan :
Pada program di atas, pernyataan :
temp := Copy(kalimat, panjang+1-i, 1);
hasil := Concat(hasil, temp);
dapat disederhanakan menjadi :
temp := Kalimat[panjang+1-i];
hasil := hasil + temp;
4.4 Menghitung Jumlah Masing-Masing Karakter
Pada contoh berikut, akan dibuat program yang akan menghitung jumlah dari masing-masing karakter dalam satu kalimat.
Pertama-tama masukkan terlebih dahulu komponen Panel, kemudian tempatkan semua komponen yang tampak pada gambar ke dalam panel tersebut:
Gambar 5. Rancangan program penghitung jumlah karakter.
Komponen Properti Nilai
Edit1, Edit2 Text (kosongkan)
Label1 Caption Kalimat
Label2 Caption Indeks
Label3 Caption Jumlah
ComboBox1 Style csDropDownList
BitBtn1 Kind
Caption bkOK
Proses
BitBtn2 Kind bkClose
Form1 Caption Program Pencacah Karakter
Panel1 Caption (kosongkan)
PadaeventOnClick BitBtn1, masukkan kode berikut:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
i: byte;
kalimat: string;
karakter: char;
begin
//inisialisasi
for karakter := Spasi to Tilde do jumkar[karakter] := 0;
kalimat := Edit1.Text;
//perhitungan jumlah per karakter for i := 1 to length(kalimat) do begin
karakter := kalimat[i];
jumkar[karakter] := jumkar[karakter] + 1;
end;
//masukkan indeks ke ComboBox ComboBox1.Clear;
for karakter := Spasi to Tilde do ComboBox1.Items.Add(karakter);
end;
Kemudian padaeventOnChange ComboBox1, masukkan juga kode program berikut:
procedure TForm1.ComboBox1Change(Sender: TObject);
var
kar: char;
begin
kar := ComboBox1.Text[1];
Edit2.Text := IntToStr(jumkar[kar]);
end;
Namun, sebelumnya deklarasikan dulu konstanta di bawah ini di atas pernyataantype:
const
Spasi = #32;
Tilde = '~';
type
TForm1 = class(TForm)
Kemudian, deklarasikan juga variabeljumkardi dalam deklarasitypetersebut:
type
TForm1 = class(TForm) Panel1: TPanel;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
Edit1: TEdit;
Label1: TLabel;
ComboBox1: TComboBox;
Edit2: TEdit;
Label2: TLabel;
Label3: TLabel;
procedure BitBtn1Click(Sender: TObject);
procedure ComboBox1Change(Sender: TObject);
private
{ Private declarations }
jumkar: array[Spasi..Tilde] of byte;
public
{ Public declarations } end;
Gambar 6. Tampilan program setelah dijalankan.
Penjelasan :
Pada program di atas, kita menggunakan array dengan indeks bertipe karakter. Range
Spasi..Tilde dimaksudkan agar semua karakter pada keyboard bisa tercakup (lihat tabel ASCII), sehingga kita bisa mengakomodasi semua karakter yang ditekan olehuser.
EventOnChange terjadi ketika isi yang ditampilkan dari objek yang bersangkutan (dalam hal ini
ComboBox1) berubah. Pada program di atas, ketika user memilih suatu karakter yang terdapat dalam ComboBox, program akan mencarikan jumlah karakter yang tersimpan di array jumkar untuk ditempatkan di kolom jumlah (Edit2).
Latihan :
Buat program untuk merubah kalimat yang diinputkan menjadi huruf kecil semua atau huruf besar semua, menggunakan pilihanRadioButton.
Catatan: gunakan perintahUpperCase()danLowerCase().
Buat program untuk menghitung jumlah huruf kecil dan huruf besar.