Latihan

advertisement
Pascal
Delphi menggunakan bahasa Pascal, sebuah bahasa terstruktur generasi ketiga, yang sering juga
disebut sebagai bahasa highly typed, bahasa dengan aturan tipe data yang ketat. hal ini akan
menghasilkan program yang bersih, dengan gaya pemrograman yang konsisten, dan yang terpenting
dapat diandalkan untuk berbagai aplikasi. Pascal mengalami sejarah yang panjang:
Awal mula
Kemunculan Pascal boleh dikatakan terlamabt dalam sejarah bahasa pemrograman. Karena muncul
belakangan, Pascal dapat belajar dari pendahulunya seperti Fortran, Cobol, dan PL/1 yang muncul
sekitar awal 1960-an. Niklaus Wirth menyatakan bahwa di mulai mengembangkan Pascal tahun
1968, dengan implemetasi pertama dilakukan pada mesin seri CDC 6000 di tahun 1970.
Bahasa C belum muncul sampai tahun 1972. C dibuat dengan tujuan yang berbeda dengan Pascal. C
dibuat sebagai bahasa tingkat tinggi yang juga memberikan kemudahan akses pada level bahasa
rendah seperti yang diberikan oleh assembly. Pascal dibangun untuk menghasilkan aplikasi yang
terstruktur dan mudah dikelola.
Tahun 1970-an
Pada tahun 1975, Wirth bekerja bersama Jensen untuk menghasilkan buku referensi Pascal "Pascal
User Manual and Report". Wirth beralih dari Pascal tahun 1977 untuk mengerjakan Modula penerus Pascal.
Tahun 1980-an
Thun 1982 muncul ISO Pascal. Ada seven besar pada bulan November 1983, dengan keluarnya
Turbo Pascal. Tahun 1987 Turbo Pascal sudah mencapai rilis 4. Turbo Pascal mengungguli lawanlawannya dalam hal kecepatan kompilasi dan eksekusi, meninggalkan pesaingnya dengan
kelemahannya.
Dari Turbo Pascal menuju Delphi
Delphi, sebuah lingkungan pengembangan pemrograman yang cukup ampuh di lingkungan
Windows© dan Linux© (dengan nama Kylix) muncul pertama kali pada tahun 1995. Delphi,
merupakan kelanjutan dari Turbo Pascal©.
Borland sepertinya mengadu untung saat memunculkan Pascal versi Object Oriented. Namun
ternyata keberanian itu memperoleh imbalan karena memang IDE tetap disukai dan waktu
kompilasi maupun eksekusi tetap cepat.
Versi pertama Delphi terasa sangat terbatas kemampuannya dibandingkan dengan Delphi yang ada
saat ini, namun saat itu Delphi meraih sukses karena faktor kecepatan. Pada era 1990-an Delphi
terus berubah dengan cepat.
Delphi version 8
Dari versi pertama Delphi sekarang sudah sampai versi 8, yang mengikuti jalur arsitektur
Microsoft© Net. Namun demikian Delphi tetap merupakan, menurut hemat penulis, development
tool yang terbaik untuk Windows maupun Linux. Pascal adalah bahasa yang jernih, dan lebih
disiplin daripada Basic, dan dalam hal adaptasi pemragraman objek juga lebih baik daripada Basic.
Perhatikan program berikut:
program pertama(input,output);
begin
writeln(1+1);
end.
Dari program tersebut didapat
katakunci (keyword) : program, begin, dan end.
pengenal (identifier) : pertama, input, output, dan writeln
tipe data (konstanta) : 1
operator : +
ekspresi : 1 + 1
Baris pertama dari program tersebut oleh kebanyakan sistem (compiler) Pascal diabaikan atau tidak
diproses.
Untuk Turbo Pascal for Windows perlu ditambah baris
uses WinCrt;
setelah baris program. Jika digunakan Delphi baris yang perlu ditambahkan adalah
{$APPTYPE CONSOLE}
Ekspresi (1+1) oleh sistem Pascal akan langsung dievaluasi dan menghasilkan nilai 2. Dengan
demikian statemen tersebut akan sama dengan statemen writeln(2).
Pascal termasuk bahasa pemrograman yang menganut pada format bebas. Artinya program
tidak perlu dibagi dalam baris dan kolom. Dengan kata lain suatu program Pascal dapat
ditulis dalam 1 baris saja atau dalam banyak baris, yang oleh compiler Pascal akan dianggap
sama saja. Namun program tersebut akan berbeda rasaanya jika dibaca oleh manusia yang
lebih memilih tata letak yang baik.
Program Pascal tersusun atas deretan karakter ASCII (termasuk karakter EOL - end of line).
Pada penulisan di buku keyword sering ditulis dalam bentuk huruf tebal, namun dalam
penyimpanannya hanya disimpan dalam bentuk melulu karakter.
Pascal tidak mengenal pembedaan huruf kecil dan huruf kapital, kecuali dalam konstanta
string.
Anda dapat menambah komentar dalam program, yang merupakan keterangan tambahan bagi orang
yang membaca program tersebut tetapi tidak berarti apa-apa bagi compiler Pascal.
Dalam Pascal ada beberapa cara penulisan komentar:
1. Tanda "{" dan "}" digunakan untuk mengapit keterangan. Artinya teks diantara kedua tanda
itu akan diabaikan oleh compiler.
2. Tanda "(*" dan "*)" juga digunakan untuk mengapit keterangan. Tanda ini dapat digunakan
jika dalam keterangan mengandung tanda "{" atau "}".
3. Tanda "//" digunakan untuk mengawali keterangan dalam 1 baris. Setelah ganti baris
komentar berakhir. Jadi komentar hanya berlaku pada teks di belakang tanda "//" ini.
Program yang baik biasanya akan diawali dengan komentar yang berisi antara lain:




informasi pembuat program
nama program
kegunaan program
dan tanggal dilakukannya perubahan terakhir.
Prosedur writeln dapat digunakan untuk menampilkan nilai dari tipedata:

integer : 1, -2, 34566




real : 3.14, 1.0E+07
char : 'a', 'z','%','#'
string : 'selamat pagi','mahasiswa','Jum''at'
boolean : true, false
Prosedur writeln tidak dapat digunakan untuk menampilkan nilai dari tipe data yang dibuat oleh
pemrogram seperti : enumerasi, array, dan record. Namun demikian untuk tipe data buatan yang
merupakan subtipe dari tipe data standar di atas, writeln masih dapat digunakan.
write berfungsi seperti writeln namun tidak diikuti dengan ganti baris. Dengan demikian write(1);
write(2); akan menghasilkan 12.
writeln dan write dapat menampung lebih dari satu nilai yang akan ditampikan secara berurutan.
Contoh:
writeln('Hasilnya adalah : ',1+1)
dapat ditulis dalam bentuk
write('Hasilnya adalah : ');
writeln(1+1);
Perhatikan bahwa writeln(1+1) berbeda dengan writeln('1+1'). Yang pertama akan menghasilkan 2
sedang yang kedua akan menghasilkan "1+1". Tidak dilakukan evaluasi pada string (teks yang
diapit tanda petik tunggal), kecuali '' yang berarti petik tunggal.
Anda dapat menentukan panjang karakter yang akan ditampilkan. Misalnya write(1:3) akan
menghasilkan angka 1 dengan 3 karakter yaitu : " 1".
Jika data yang akan ditampilkan tidak dapat dimuat dalam panjang yang ditentukan, Pascal akan
menampilkannya menurut panjang yang dibutuhkan oleh nilai tersebut.
Jika nilai 3.14 ingin ditampikan "3.14" bukan "3.13000E+00" Anda harus menentukan panjang
angka desimalnya. Format penulisannya menjadi writeln(3.14:4:2). Nilai 2 menunjukkan panjang
angka desimalnya.
Variabel adalah lokasi memory yang digunakan untuk menyimpan nilai. Pada lokasi memori
ini dapat dilakukan:


penyimpanan data
pembacaan data/pengambilan data
Pada saat menyimpan data, jika lokasi tersebut sudah pernah diisi data maka data lama akan
tertindis oleh data yang baru. Pembacaan data tidak mengubah nilai data yang tersimpan di
variabel.
Variabel dalam Pascal selalu mempunyai tipe data. Dengan demikian:

tipe data suatu variabel harus dideklarasikan terlebih dahulu
var n : integer;

nilai data yang dapat disimpan hanya yang cocok tipenya dengan tipe data variabel.
untuk deklarasi di atas nilai 'A' tidak dapat disimpan di n

setiap variabel harus mempunyai nama yang berbeda.
Latihan
Apa yang dihasilkan oleh program berikut?
program lat1;
var n,m : integer;
begin
n := 1;
m := n+1;
m := m+1;
n := m * m;
writeln(n);
end.
Untuk melacak jalannya program perlu dikenal titik-titik pemantauan program. Titik-titik
tersebut adalah :



statemen yang akan dikerjakan
nilai setiap variabel pada saat itu
teks yang dihasilkan
Dari contoh program di atas, pelacakan dilakukan mulai pada baris keempat, yang memuat
statemen pertama (setelah begin). Pada titik itu semua variabel belum terisi, dan tidak ada
yang ditampilkan oleh program.
Ekspresi berisi penghitungan nilai.
Ekspresi tersusun atas :





data literal (konstanta), seperti 1 atau 'a'
variabel, seperti n
operator, seperti +,-,*,/,mod,div
fungsi, seperti sqrt, sin, cos
kurung, ( dan )
Jika tidak ada tanda kurung secara eksplisit, pengelompokan operan dan operator tergantung pada
tingkat prioritas operator. Misalnya * lebih tinggi prioritasnya daripada +.
Operator yang mempunyai prioritas sama akan dikerjakan mulai dari kiri ke kanan.
Struktur ekspresi dapat divisualisasi dengan menggunakan pohon operator, yang menunjukkan
aliran nilai yang masuk ke operator.
Ekspresi a + b * 3 dapat digambarkan sbb:
+
/ \
a
*
/ \
b
3
Latihan
Gambar pohon ekspresi untuk
Pascal mengharuskan pemanggilan fungsi menggunakan tanda kurung. Misal
sin(x) atau ln(a+b)
Jika Anda tidak yakin mengenai urutan prioritasnya, gunakan saja tanda kurung. Cara lain, Anda
dapat menggunakan variabel temporer. Misalnya daripada menulis Anda dapat menggantinya
dengan
Latihan
Tulis program untuk menghitung untuk dan . Hasil akhir ditampilkan dengan format 1 tempat di
belakang koma.
Banyak fungsi dan operator yang dapat dikenakan pada tipe data bawaan (boolean, integer, real, dan
char).
Setiap operator atau fungsi berlaku untuk tipe data tertentu dan menghasilkan nilai dengan tipe data
tertentu juga.
Misal div: integer x integer integer
Artinya argumen untuk div dua-duanya harus integer dan hasil dari div bertipe integer juga.
Dengan demikian "jumlah div 0.25" menjadi error karena tipe data tidak cocok dengan pola
operator div. Bilangan 0.25 bukan integer melainkan real.
Contoh lain :
/: integer x integer real
Berarti / selalu menghasilkan nilai bertipe real.
Jika Anda mencoba mengisi variabel bertipe integer dengan bilangan real, Anda akan mendapat
error. Dalam statemen pengisian nilai (:=) tipe variabel dan tipe nilainya harus kompatibel, yang
berartti kedua tipe sama persis atau hampir sama.
Sehingga a := b / 25 akan error jika a dideklarasikan sebagai variabel bertipe integer.
Beberapa operator bersifat overloaded yaitu satu operator, mempunyai pola 2 atau lebih. Misalnya:
+ : integer x integer integer
+ : real x real real
Jika diperlukan Pascal secara otomatis akan mengubah tipe integer menjadi real. Namun demikian
tidak berlaku sebaliknya. Anda harus menggunakan fungsi trunc arau round.
Apa tipe data hasil dari ekspresi berikut?


1*1+2.4
ln(7 mod 3)
Program Baca;
var n : integer;
begin
write('Ketik nilai untuk n : ');
readln(n);
writeln(n * (n + 1) div 2);
end.
Readln digunakan intuk mengisi nilai variabel dari keyboard.
Dengan demikian readln(n) mirip dengan n := ....
Dalam pernyataan pengisian nilai, nilai berasal dari dalam program. Nilai tersebut dapat
berupa konstanta (eksplisit tertulis) atau hasil dari perhitungan.
Dalam pertanyaan read, nilai berasal dari pengguna.
Read dan Readln hanya dapat digunakan untuk membaca data yang bertipe standar char, integer,
string, atau real. Kecuali jika data tersebut berasal dari file, maka read dapat digunakan juga
membaca bentuk tipe data lain.
Perbedaan antara read dan readln adalah : readln akan mengabaikan data yang masih ada
dibelakangnya sampai ditemukan tanda ganti baris.
Readln(x, y) identik dengan read(x); readln(y);
Urutan pembacaan:


Data dibaca secara urut satu-persatu : artinya tidak ada data yang terlewati dan tidak boleh
dibaca dua kali
Data masukan dapat dianggap sebagai deretan karakter yang harus dibaca pada karakter
pertama. Artinya untuk membaca karakter kedua, maka dilakukan pembacaan terhadap
karakter pertama dan dengan demikian karakter pertama akan hilang dari deretan dan
karakter kedua bergeser menjadi karakter pertama.
Penahan masukan:



Walaupun program Anda hanya membutuhkan masukan 1 karakter, sistem operasi masih
mengijinkan pengguna untuk mengisi lengkap 1 baris hingga ditekan tombol "Enter"
Karakter yang sudah telanjur masuk, tetapi tidak dibutuhkan oleh program akan ditahan oleh
sistem operasi.
Jika masih ada karakter dalam tahanan sistem operasi, dan program berikutnya
membutuhkan masukan, maka karakter yang ditahan tadi akan dilepas untuk memenuhi
permintaan data, tanpa perlu pemasukan data dari pengguna.
Akhir baris:



Tanda akhir baris dalam sistem MS-DOS/Windows menggunakan dua karakter yaitu : CR
(Carriage Return) (ASCII 13) dan LF (Line Feed) (ASCII 10). Dalam sistem Unix hanya
menggunakan satu karakter yaitu LF.
Fungsi eoln digunakan untuk mendeteksi apakah karakter berikutnya adalah CR. Jika ya
eoln bernilai true. Fungsi ini tidak mengubah posisi masukan.
Fungsi readln membaca sampai dengan tanda LF pada akhir baris. Pemanggilan readln
dengan atau tanpa argumen akan memindah posisi masukan ke baris berikutnya.
Pemasukan bilangan:


Sistem operasi selalu memberikan deretan karakter kepada program
Jika Anda memanggil read dengan argumen n (integer), maka read akan melakukan
pembacaan karakter (angka) dari sistem operasi, menghitung nilai integer dari masukan
tersebut dan menyimpannya sebagai integer di n.

read akan mengabaikan spasi di awal dan akhir bilangan atau tanda ganti baris.
Namun demikian, jika di dalam deretan angka terdapat karakter lain (misalnya
huruf), akan mengakibatkan error. Dalam sistem Turbo Pascal, dalam setiap masukan
bilangan harus diikuti oleh spasi atau tanda ganti baris.
Latihan
1. Tulis program untuk menghitung untuk nilai dan dan nilai yang dibaca dari masukan
pengguna.
2. Tulis program untuk membaca 3 angka (sebagai karakter), menghitungnya sebagai 1
bilangan, menambah dengan 1 , dan mencetak hasilnya. Anda bisa menggunakan ekspresi
ord(angka) - ord('0') untuk mengubah karakter menjadi bilangan.
program musik;
var tahun : integer;
begin
write('Kapan Mozart lahir?');
readln(tahun);
if tahun=1756 then
writeln('Benar. Selamat!')
else
writeln('Maaf. Anda belum benar.');
end.
Pernyataan tunggal dapat segera diikuti then dan else.
Jika lebih dari satu pernyataan, maka pernyataan-pernyataan itu harus diapit dengan begin dan end:
if tahun=1756 then begin
writeln('Benar. Selamat!');
jawabanbenar := jawabanbenar+1;
end
Secara teknis, konstruksi begin ... end dianggap satu pernyataan, walaupun berisi banyak statemen.
Tanda ";" sebelum else akan menimbulkan error.
Agar tampilan nampak terstruktur dan enak dilihat gunakan indentasi. Walaupun cara ini tidak
berpengaruh pada compiler karena compiler tidak mengenal perbedaan ada 2 spasi atau 1 spasi atau
ganti baris sekalipun.
Versi terakhir di atas bisa juga ditulis dalam bentuk:
if tahun = 1756 then
begin
writeln('Benar. Selamat!');
jawabanbenar := jawabanbenar + 1;
end
Sebaiknya Anda konsisten menggunakan salah satu model indentasi.
Latihan
Anggap compiler Pascal yang kita gunakan tidak mengenal penentuan panjang tampilan. Buatlah
program untuk menampilkan bilangan dengan 3 tempat. Demikian demikian perlu ditambahi:


dua spasi untuk bilangan dalam rentang 0 s.d. 9
satu spasi untuk bilangan dalam rentang 10 s.d. 99
Untuk bilangan lainnya tidak perlu ditambahi spasi.
Pernyataan if dapat berkalang, artinya pada pernyataan bagian then atau pernyataan bagian else
dapat berisi pernyataan if lain. Bentuk if ... then ...else if ...then biasa digunakan.
Penggunaan AND untuk pemeriksaan seluruh kasus
Misalnya kita mempunyai sederetan pertanyaan (seperti dalam ujian) dan kita ingin tahu apakah
seluruh pertanyaan terjawab dengan benar atau tidak. Untuk menyelesaikan permasalahan ini dapat
ditempuh beberapa cara:

Pertama, kita dapat menggunakan AND
if (jawab1=1756) and (jawab2=1685)
and .... then
writeln('Semua jawaban benar!');


Kedua, kita dapat menghitung jumlah jawaban yang benar seperti contoh sebelumnya, nilai
jawabanbenar bertambah satu demi satu setipa ada jawaban yang benar. Seteleah semua soal
dikerjakan, kita tinggal membandingkan nilai jawabanbenar dengan jumlah soal. Jika
keduanya sama, maka berarti semua jawaban benar.
Ketiga, kita dapat menggunakan variabel "benarsemua", yang pertama diisi dengan nilai
True. Jika didapatkan jawaban yang salah, maka nilai variabel ini berubah menjadi False.
Jika sampai akhir, nilai variabel ini tetap True, berarti semua jawaban benar.
Latihan
Gunakan variabel boolean untuk mengecek apakah tiga deretan karakter yang dimasukkan bernilai
'yyn'.
Case
Statemen case digunakan jika diinginkan ada beberapa alternatif pernyataan yang akan dikerjakan,
tetapi hanya satu yang benar-benar dikerjakan. Pemilihan pernyataan yang dikerjakan ditentukan
oleh nilai ekspresi yang cocok dengan nilai label yang mendahului pernyataan alternatif. Sintaksis
untuk pernyataan case adalah :
CASE {ekspresi} OF
case label1 : pernyataan-1;
case label2 : pernyataan-2;
case label3 : pernyataan-3;
...
case labeln : pernyataan-n;
else pernyataan-else;
END;
Cara kerja pernyataan case adalah sebagai berikut:
1. Ekspresi dievaluasi, nilainya dicocokkan dengan label.
2. Nilai ekspresi tersebut dibandingkan dengan nilai pada label. Jika ada yang cocok maka
pernyataan yang menyertainya dikerjakan.
3. Jika tidak ada label yang cocok dengan nilai tersebut dan ada pernyataan-else, maka
pernyataan-else dikerjakan.
Struktur Iterasi Pada saat diinginkan mengulang-ulang instruksi dalam program yang dibuat, saat
itulah diperlukan iterasi. Struktur iterasi secara sederhana menentukan berapa kali suatu instruksi
atau kelompok instruksi diulang. Pada suatu kasus jumlah iterasi sudah dapat ditentukan
sebelumnya namun pada kasus yang lain jumlah iterasi tidak dapat ditentukan sebelumnya. Untuk
kasus kedua, proses akan berhenti berulang atau keluar dari iterasi setelah tidak memenuhi syarat
untuk dilakukannya iterasi. Syarat tersebut dapat dipenuhi kapan saja. Algoritme iterasi:
1. Inisialisasi pencacah
2. Jika pencacah < maksimum kerjakan
a. instruksi yang diulang
3. naikkan nilai pencacah
jika tidak kerjakan langkah 4
4. Kembali ke langkah 2
5. Selesai
Ada beberapa macam struktur iterasi yaitu:
1. for
2. while
3. repeat
Dalam for jumlah iterasi sudah dapat ditentukan terlebih dahulu sedang pada while dan repeat untuk
melakukan atau menghentikan iterasi perlu dilakukan pengecekan kondisi.
Pada iterasi while, pengecekan kondisi dilakukan sebelum mengerjakan instruksi yang diulang.
Selama kondisi memenuhi syarat (bernilai True), maka instruksi yang diulang dikerjakan. Dengan
demikian jika pada saat pertama kali kondisi sudah tidak memenuhi syarat, maka instruksi yang
diulang tidak pernah dikerjakan.
Pada iterasi repeat, instruksi yang diulang dikerjakan terlebih dahulu baru kemudian dicek
kondisinya. Jika kondisi bernilai True maka iterasi dihentikan. Dengan demikian instruksi yang
diulang pasti pernah dikerjakan paling tidak sekali.
Mungkin struktur iterasi for adalah struktur yang paling mudah dipahami. Dalam for
dilakukan pencacahan berapa instruksi yang mengikutinya diulang-ulang. Untuk keperluan
ini dideklarasikan terlebih dahulu variabel bertipe ordinal (misal integer) sebagai variabel
pencacat jumlah perulangan. Contoh deklarasi:
var
cacah : integer;
Variabel cacah dinamakan variabel kendali iterasi. Variabel ini digunakan sebagai pencacat
sudah berapa kali suatu instruksi dijalankan. Struktur iterasi for kemudian ditulis sbb:
for cacah := 1 to 10 do
Memo1.Lines[Kount].Add(‘Selamat pagi’);
Iterasi tersebut dapat diartikan "Untuk nilai cacah dari 1 sampai dengan 10 tambahkan
'Selamat pagi' pada baris terakhir pada Memo1. Pada contoh tersebut, hanya ada satu
instruksi yang ada dalam iterasi.
Memo1.Lines[Kount].Add(‘Selamat pagi’);
Jika ada lebih dari satu instruksi yang ingin diulang maka diperlukan pengelompokan
instruksi tersebut dengan menggunakan begin dan end Untuk for ada dua 'variasi', yang
pertama untuk pencacah naik dan yang kedua untuk pencacah turun. Prinsip dasar keduanya
sama saja, yaitu digunakan untuk mengulang instruksi sejumlah nilai yang sudah ditentukan.
var cacah : integer;
...
for cacah := awal to akhir do
begin
KerjakanSesuatu;
KerjakanYangLain;
end;
Variabel cacah harus dideklarasikan secara lokal dan bertipe ordinal. Awal dan Akhir adalah
variabel yang bertipe sama atau kompatibel dengan tipe data cacah. Untuk pencacah turun, to
pada iterasi for diganti dengan downto. Jika diinginkan berhenti dari iterasi walaupun nilai
akhir belum tercapai, gunakan break.
Struktur Repeat
Instruksi di antara repeat dan until akan dikerjakan terus menerus sampai kondisi bernilai
True. Jika kondisi tidak pernah mencapai True, instruksi akan terus menerus dikerjakan
selamanya tanpa henti.
repeat
KerjakanSesuatu;
KerjakanYangLain;
until kondisi;
Instruksi di antara repeat dan until akan dikerjakan sekali, kemudian nilai kondisi dicek. Jika
bernilai True, iterasi dihentikan. Namun jika bernilai False, instruksi yang diulang akan
dikerjakan lagi. Penggunaan break juga diperbolehkan dalam repeat.
repeat
if (Nilai < 1) then
break;
Nilai := Nilai * Nilai;
until (Nilai > 1000000);
Pada kasus ini, iterasi repeat mengulang instruksi untuk mengalikan Nilai dengan Nilai
sampai bernilai lebih dari 1000000. Namun demikian, jika Nilai pada awalnya berisi kurang
dari 1, maka iterasi langsung dihentikan. Hal ini dilakukan untuk mencegah perulangan yang
tanpa henti. Seperti diketahui bahwa suatu bilangan jika dikalikan dengan bilangan itu sendiri
nilainya akan bertambah besar, kecuali bilangan itu kurang dari 1. Misalnya 2 x 2 adalah 4,
namun 0.5 x 0.5 adalah 0.25 yang lebih kecil dari 0.5. Oleh karena iterasi akan berhnati jika
Nilai > 1000000, dan ini tidak akan tercapai jika Nilai < 1, maka iterasi akan dikerjakan
terus-menerus tanpa henti. Dengan adanya break perulangan yang terus menerus untuk kasus
tersebut tidak perlu terjadi.
Iterasi While
Instruksi dalam While akan dikerjakan selama kondisi bernilai True. Jika kondisi ini tidak pernah
mencapai False, instruksi akan diulang terus-menerus tanpa henti.
while kondisi do
begin
KerjakanSesuatu;
KerjakanYangLain;
end;
Kondisi harus ekspresi boolean. Pertama, nilai kondisi ini dicek. Jika bernilai True, instruksi antara
begin dan end dikerjakan. Jika bernilai False, instruksi tidak dikerjakan. Begin dan end boleh
dihilangkan jika hanya ada 1 instruksi yang diulang.
Menggambar grafik
Pengantar
Microsoft Windows dan Borland Delphi menawarkan kemudahan untuk menggambar grafik. Objek
yang digunakan untuk menggambar secara khusus dinamakan canvas. Pada kenyataannya semua
objek yang memerlukan penggambaran mempunyai property Canvas yang merupakan instance dari
TCanvas.
Menggambar garis
Penggambaran garis biasanya terdiri atas 2 langkah. Pertama menentukan titik awal garis yang
menggunakan method TCanvas.MoveTo(). Method ini memerlukan 2 argumen yaitu x dan y, yang
menunjukkan koordinat awal garis. Untuk menggambar garis perlu juga diketahui koordinat titik
akhir garis. Koordinat ini diumpankan sebagai argumen untuk method TCanvas.LineTo(). Contoh
penggunaan kedua method itu dapat dilihat pada program untuk event OnPaint dari Form berikut:
procedure TForm1.FormPaint(Sender: TObject);
begin
Canvas.MoveTo(20, 15);
Canvas.LineTo(150, 245);
end;
Jika Anda menghendaki bahwa yang menentukan titik awal dan akhir adalah pengguna, Anda dapat
mengisi program pada event mouse. Sebaiknya Anda menggunakan variabel yang digunakan untuk
mencatat titik awal dari garis tersebut. Misalnya:
var
Form1: TForm1;
StartX, StartY: Integer;
implementation
Pengguna biasanya akan menggambar garis dengan menekan tombol mouse dan menggesernya.
Untuk keperluan ini, perlu diisi program pada event OnMouseDown. Walaupun akan lebih baik jika
penggambaran dilakukan pada TPaintBox atau TBitmap, namun untuk contoh di bawah ini
menggunakan form sebagai tempat untuk menggambar. Implementasi dari kasus tersebut adalah:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
// Reserve the starting point of the line
// using our own StartX and StartY
StartX := X;
StartY := Y;
end;
Pengguna menghentikan penggambaran garis dengan melepas mouse, yang sesuai dengan event
OnMouseUp. Untuk mengimplementasikannya, Anda tinggal menggunakan titik awal yang sudah
dicatat tadi sebagai awla garis dan titik tempat mouse dilepas sebagai titik akhir garis. Bentuk
implementasi bisa seperti berikut ini:
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
// Start the line on the previous point we reserved
Canvas.MoveTo(StartX, StartY);
// End the line on the current point
Canvas.LineTo(X, Y);
end;
Pewarnaan
Penggambaran garis tadi, menggunakan warna yang tersimpan dalam objek Pen yang merupakan
instance dari TPen. Pen ini merupakan anggota dari klas TCanvas. Warna bawaan dari Pen adalah
hitam (clBlack), sehingga garis yang digambar tadi berwarna hitam. Anda dapat mengubah warna Pen
dengan mengubah nilai Pen.Color seperti contoh berikut:
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
// Set the red color to the pen of the convas
Canvas.Pen.Color := clRed;
// Start the line on the previous point we reserved
Canvas.MoveTo(StartX, StartY);
// End the line on the current point
Canvas.LineTo(X, Y);
end;
Jika pengguna diperbolehkan menggambar garis semaunya, maka perlu dibuat fasilitas untuk memilih
warna. Delphi sudah menyediakan fasilitas pemilihan warna dengan komponen ColorGrid yang
dengan mudah dapat dipasang dan digunakan. ColorGrid menyediakan 2 pilihan warna: latar depan
(ForeGroundColor) dan latar belakang (BackgroudColor). Tidak usah terlalu memikirkan penamaan
tersebut, Anda dapat menggunakannya untuk keperluan pemilihan warna. Contohnya, Anda dapat
menggunakan property ForegroundColor untuk mengisi nilai Pen.Color. Contoh:
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
// Set the color of the pen to the color
// selected on the Color Grid control
Canvas.Pen.Color := ColorGrid1.ForegroundColor;;
// Start the line on the previous point we reserved
Canvas.MoveTo(StartX, StartY);
// End the line on the current point
Canvas.LineTo(X, Y);
end;
Download