Translate
Rabu, 19 September 2012
Pascal Bab Perulangan
Proses yang Berulang
Seringkali kita harus melakukan
pengulangan terhadap suatu proses. Untuk memudahkan hal ini, Turbo Pascal
menyediakan tiga macam pernyataan:
§ FOR
§ WHILE
§ REPEAT
Dengan menggunakan
pernyataan ini, suatu proses yang berulang dapat ditulis dengan kode yang
pendek. Sebagai sontoh, jika Anda diminta menampilkan tulisan ‘Turbo Pascal’
seratus kali, tidaklah mungkin kita menuliskan perintah Writeln (‘Turbo
Pascal’) seratus kali. Bila hal ini harus dilakukan karena tidak ada pernyataan
lain yang mendukung, pemrograman akan terasa membosankan. Untungnya hal ini
tidak harus terjadi!
Ketiga Pernyataan di atas merupakan komponen
yang membuat Pascal merupakan suatu bahasa pemrograman yang terstruktur. Suatu
pengulangan dapat dilakukan tanpa menggunakan pernyataan GOTO sebagaimana
dilakukan pada bahasa-bahasa pendahulu Pascal (meskipun pascal juga
menyediakannya).
?
Terdapat Istilah
loop atau kalang. Istilah ini menyatakan proses yang berulang.
|
1.1 Pernyataan FOR
Pernyataan FOR biasa digunakan untuk melakukan
pengulangan yang jumlahnya telah diketahui sebelumnya. Sebagai contoh, FOR dapat digunakan untuk menampilkan
tulisan ‘Turbo Pascal’ 10 kali atau pun dalam jumlah yang lebih banyak lagi.
1.1.1 FOR TO
Salah satu bentuk
pernyataan FOR adalah sebgai
berikut:
FOR variabel :=
nilai_awal TO nilai_akhir DO
pernyataan
|
Gambar 1.1 Pernyataan FOR
Pada format ini, variabel bertindak sebagai variabel
pengontrol pengulangan. Variabel akan
diisi dengan nilai, dimulai dari nilai_awal
hingga nilai_akhir untuk setiap
iterasi (putaran). Untuk setiap iterasi, pernyataan
akan dijalankan. Gambar 1.1 menunjukkan mekanisme pengulangan oleh FOR.
Pada bentuk FOR di atas:
§ Variabel, nilai_awal
dan nilai_akhir harus bertipe sama
atau kompatibel
§ Tipe yang digunakan
pada ketiga komponen tersebut harus berupa ordinal.
§ Nilai_awal harus lebih kecil atau sama dengan nilai_akhir. Kalau nilai_akhir lebih kecil daripada nilai_awal, bagian pernyataan tidak dijalankan sama sekali.
Contoh program yang
menggunakan FOR untuk menampilkan tulisan ‘Turbo Pascal’ 10 kali:
Program 1.1
|
Program x10;
{
----------------------------------------------------------- }
{ Contoh pemakaian FOR untuk }
{ menampilkan tulisan Turbo
Pascal 10 kali. }
{
----------------------------------------------------------- }
USES Crt;
Var
Pencacah
BEGIN
ClrScr;
For Pencacah := TO 10 DO
Writeln (‘Turbo Pascal’);
END.
Akhir Program
|
Pada contoh diatas,
Pencacah akan bernilai 1, 2, 3, 4 hingga 10 secara berturut-turut. Untuk setiap
nilai tersebut, pernyataan:
WriteLn
(‘Turbo Pascal’);
dieksekusi. Sebagai
akibatnya, pada layar muncul tulisan:
Turbo
Pascal
Sebanyak 10 kali.
Pada contoh berikut,
isi dari variabel pengontrol FOR
ditampilkan.
Program 1.2
|
PROGRAM Deret;
{------------------------------------------------------}
{Menampilkan
bilangan 1 sampai 10. }
{------------------------------------------------------}
Uses
Crt;
Var
Pencacah : Integer;
BEGIN
Clrscr;
For Pencacah := 1 to 10 do
WriteLn (Pencacah);
END.
Akhir Program
|
Hasilnya berupa bilangan dari 1 sampai
dengan 10:
1
2
3
4
5
6
7
8
9
10
|
Di depan telah dijelaskan bahwa nilai awal
yang diberikan pada FOR-TO harus
lebih kecil dari nilai akhir. Apa yang terjadi seandainya aturan ini dilanggar?
Marilah kita lihat contoh berikut:
FOR Pencacah := 10 TO
1 DO
WriteLn
(pencacah);
Perintah
seperti di atas tidak menghasilkan keluaran apapun. Anda dapat melihat Gambar 1.1 untuk menganalisis kenapa hasilnya tidak ada.
Sebuah gambaran atas penggunaan pernyataan
majemuk di dalam pernyataan FOR
ditunjukkan pada program berikut:
Program 1.3
|
Program
Rata2;
{---------------------------------------------------------------------- }
{Contoh
program untuk menghitung nilai rata-rata }
{ dari sejumlah nilai }
{---------------------------------------------------------------------- }
USES Crt;
VAR
Nilai, {Menampung data dari
keyboard}
Jum : Real; {Untuk menampung jumlah semua data }
Pencacah
: Integer;
BEGIN
Clrscr;
Jum
:= 0; {Diisi dengan nol
terlebih dulu}
FOR
pencacah := 1 to 5 do
BEGIN
Write (‘Nilai ke-‘, Pencacah, ‘ : ‘);
ReadLn
(Nilai);
Jum
:= Jum + Nilai; {Tambahkan Nilai ke Jum
}
END;
WriteLn
(‘Nilai rata-rata = ‘, Jum / 5 : 0 :2 ) ;
END.
Akhir Program
|
Contoh
di atas menggambarkan cara menghitung rata-rata dari 5 buah nilai. Mula-mula
variabel Jum yang akan digunakan untuk menghitung jumlah kelima nilai diisi
dengan nol. Kemudian untuk setiap nilai Pencacah yang bergerak dari 1 hingga 5,
pernyataan:
Write ( ‘Nilai ke-‘,
Pencacah, ‘ : ‘);
ReadLn (Nilai) ;
Jum := Jum + Nilai;
akan
dijalankan.
Setelah FOR
berakhir, Jum berisi total dari
semua nilai yang dimasukkan dari keyboard. Kemudian untuk menghitung nilai
rata-rata, Jum tinggal dibagi dengan
5.
Contoh
pengeksekusian terhadap Program 1.3:
Nilai ke-1 :
70
Nilai ke-2 : 80
Nilai ke-3 : 75
Nilai ke-4 : 90
Nilai ke-5 : 60
Nilai rata-rata =
75.00
|
Telah
disinggung di depan bahwa variabel yang digunakan sebagai pengontrol FOR dapat
bertipe CHAR. Contoh tentang hal ini dapat dilihat pada program berikut :
Program 1.4
|
Program
Abjad;
{------------------------------------------------------------------------------ }
{ Contoh
pemakaian FOR dengan variabel pengontrol }
{ bertipe
Char. }
{------------------------------------------------------------------------------ }
USES Crt;
Var
Kar
: Char;
Begin
Clrscr;
FOR
Kar := ‘A’ TO ‘z’ DO
Write
(Kar) ;
WriteLn;
END.
Akhir Program
|
Pada
contoh ini , secara berturut-turut Kar akan berisi dari ‘A’ hingga ‘Z’. Itulah
sebabnya hasil dari program di atas berupa:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
|
Adapun
contoh berikut menunjukkan variabel pengontrol yang bertipe Boolean.
FOR Saklar := False
TO True DO
WriteLn (Saklar) ;
Hasil
dari pernyataan di atas berupa:
nFALSE
nTRUE
Program
berikut memberikan gambaran cara menampilkan bilangan ganjil antara 1 sampai
dengan 15.
Program 1.5
|
PROGRAM
Ganjil;
{------------------------------------------------------------------------ }
{
Menampilkan bilangan ganjil antara 1 sampai dengan 15. }
{----------------------------------------------------------------------- }
USES Crt;
Var
Bilangan
: Integer;
BEGIN
Clrscr;
FOR
Bilangan := 1 to 15 DO
IF
Odd(Bilangan) THEN { Kalau ganjil }
WriteLn
(Bilangan) ;
END.
Akhir Program
|
Hasil
program:
1
3
5
7
9
11
13
15
|
1.1.2 FOR DOWNTO
Kalau FOR-TO
digunakan untuk mencacah naik, FOR-DOWNTO
adalah kebalikannya. Pada FOR-DOWNTO,
nilai awal justru harus lebih besar (atau sama dengan) nilai akhir. Format
selengkapnya:
For variabel ;= nilai_awal DOWNTO nilai_akhir DO
pernyataan
|
Pernyataan
seperti:
FOR
Pencacah := 10 DOWNTO 1 do
WriteLn (Pencacah);
Menghasilkan
berupa:
10
9
8
7
6
5
4
3
2
1
|
Adapun
contoh berikut digunakan untuk menampilkan huruf Z hingga A:
FOR
Huruf := ‘Z’ DOWNTO “a” DO
Write (Huruf) ;
Hasil:
ZYXWVUTSRQPONMLKJIHGFEDCBA
1.1.3 Kenaikan atau
Penurunan Tidak Sebesar Satu
FOR merupakan pernyataan yang cocok untuk
menangani pencacah yang kenaikan atau penurunannya sebesar satu. FOR-TO dipakai untuk pencacahan yang
naik sebesar satu (nilai ordinalnya),
sedangkan FOR-DOWNTO digunakan untuk
pencacahan yang menurun sebesar satu (nilai ordinalnya). Bila selang kenaikan
atau penurunan pencacahan tidak sebesar satu, WHILE dan REPEAT-lah
yang cocok dipakai untuk keperluan itu.
1.1.4 FOR Bersarang
Pada masalah tertentu ada kemungkinan FOR di dalam FOR yang lain. Bentuk seperti ini biasa disebut FOR bersarang (nested FOR). Contoh penerapan FOR bersarang adlah untuk membuat
gambar seperti berikut ini:
*
**
***
****
*****
******
*******
********
Program
untuk membuat pola seperti di atas ditunjukkan di bawah ini.
Program 1.6
|
PROGRAM
Bintang;
{------------------------------------------------ }
{ Contoh
pemakaian IF di dalam IF. }
{------------------------------------------------ }
USES Crt;
CONST
AKHIR
= 8; { -- Jumlah * pada bari terakhir
-- }
VAR
Baris,
Kolom : Integer;
BEGIN
Clrscr;
FOR
Baris := 1 TO AKHIR DO
BEGIN
FOR
Kolom := 1 TO Baris DO
Write
(‘*’) ;
WriteLn; { ---- Pindah Baris --- }
END;
END.
Akhir Program
|
FOR yang terluar dipakai
untuk mengontrol baris. Baris yang dibuat bergerak dari 1 sampai dengan AKHIR. Kemudian untuk setiap nilai
baris, tanda * ditulis sebanyak nomor baris saat itu. Dapat dilihat, baris
pertama berisi 1 buah tanda *, baris kedua berisi 2 buah tanda * dan
seterusnya. Untuk menampilakan banyaknya tanda * dalam satu baris, pernyataan
yang digunakan adalah FOR yang
kedua:
FOR Kolom := 1 TO Baris DO
Write (‘ * ’) ;
Setelah
menampilkan tanda * yang terakhir untuk setiap baris, kursor dipindahkan ke
baris berikutnya dengan menggunakan WriteLn.
?
FOR
bersarang umum dipakai pada operasi matriks.
|
1.1.5
FOR Tanpa Diikuti oleh Pernyataan
Suatu
pernyataan FOR bisa saja tidak diikuti dengan sebuah pernyataan pun. Contoh:
FOR I
:= 1 TO 20000 DO ;
Writeln (‘Halo’) ;
Tampak
bahwa sesudah DO terdapat titik
koma. Ini menandakan bahwa FOR tidak diikuti dengan pernyataan yang akan
diulang. Pernyataan di atas jelas berbeda dengan:
FOR I
:= 1 TO 20000 DO
Writeln ( ‘ Halo ‘ );
Bukan
karena tulisan Writeln ditulis masuk ke kanan, tetapi berhubung tanda titik
koma tidak ada pada akhir DO, pernyataan yang terakhir ini akan mengulang
Writeln sebanyak 20.000 kali. Sedangkan pernyataan FOR pada contoh sebelumnya akan
menunda pengerjaan Writeln sampai I bernilai 20.000 terlampaui ( Writeln hanya
dikerjakan sekali).
?
Cara
penundaan eksekusi terhadap suatu perintah melalui bentuk semacam:
FOR
I := 1 TO 20000 DO;
Sangat
bergantung oleh kecepatan computer. Lama penundaan menjadi tidak tentu. Cara
yang terbaik untuk melakukan penundaan eksekusi adalah dengan memakai
prosedur standar bernama delay (bab 20)
|
1.2 Pernyataan WHILE
Pernyataan WHILE biasa dipakai untuk
melakukan pengulangan yang jumlahnya tidak diketahui di depan atau selang
pencacah tidak sebesar 1 atau -1. Bentuk pernyataan WHILE:
WHILE kondisi DO
pernyataan
|
1.2.1 Pencacahan Meningkat
Contoh
program berikut menunjukkan pemakaian WHILE untuk menggantikan perintah:
FOR
Pencacah := 1 TO 10 DO
Writeln (I) ;
Program 1.7
|
PROGRAM
Whill;
{-------------------------------------------------------------------- }
{Contoh
WHILE untuk menampilkan bilangan }
{ antara 1 sampai 10 }
{-------------------------------------------------------------------- }
USES Crt;
VAR
Pencacah
: Integer:
Begin
Clrscr;
Pencacah
:= 1; { - - - Nilai awal - - - }
While
Pencacah <= 10 DO
BEGIN
WriteLn(Pencacah);
Pencacah
:= Pencacah +1; { - - - Menaikkan nilai Pencacah - - - }
END;
END.
Akhir Program
|
Pada
contoh di atas:
Pencacah
:= 1;
While Pencacah <= 10 DO
BEGIN
WriteLn(Pencacah);
Pencacah := Pencacah +1;
END;
Menggantikan:
FOR
Pencacah := 1 TO 10 DO
WriteLn (Pencacah);
Tampak
bahwa pada instruksi di atas:
n Pemberian nilai awal
terhadap variabel pengndali pengulangan berupa:
Pencacah := 1;
n Upaya untuk menaikkan
nilai variabel pengontrol pengulangan, berupa:
Pencacah := Pencacah +1;
n Kondisi pengulangan
berupa: Pencacah <= 10 DO.
Kondisi ini
menentukan terjadinya pemrosesan bagian pernyataan
kalau bernilai True.
Ketiga
hal tersebut perlu diperhatikan dengan seksama. Kekeliruan seperti kealpaan
terhadap penaikan variabel pengontrol pengulangan ( Pencacah pada contoh
diatas) berakibat fatal. Misalnya bila pernyataan:
Pencacah := Pencacah
+ 1;
Pada
Program 9.7, tidak disertakan bagian yang terletak di dalam BEGIN END yang mengikuti WHILE akan dijalankan terus-menerus.
?
Jika
keadaan ini terjadi dan Anda sedang berada di linhkungan IDE, Anda bisa
menekan tombol Ctrl+Break untuk menghentikannya.
|
1.2.2 Pencacahan
Menurun
WHILE
juga dapat diakai untuk menggantikan FOR-DOWNTO, yaitu sebagai contoh:
Pencacah := 10;
WHILE Pencacah >0 DO
BEGIN
WriteLn (Pencacah);
Pencacah := Pencacah -1;
END;
Merupakan
pengganti dari:
FOR Pencacah := 10
DOWNTO 1 DO
WriteLn (Pencacah);
Contoh
Program:
Prgram 1.8
|
Program
Whil2;
{---------------------------------------------------------------- }
{Contoh
WHIle untuk menampilkan bilangan }
{ dari 10 ke 1. }
{---------------------------------------------------------------- }
USES Crt;
VAR
Pencacah
: Integer;
BEGIN
Clrscr;
Pencacah
:= 10; { - - - Nilai Awal - - - }
WHILE
Pencacah >= 1 DO
BEGIN
WriteLn
(Pencacah);
Pencacah
:= Pencacah -1; { - - - Menurunkan nilai
Pencacah }
END;
END.
Akhir Program
|
Hasil:
1.2.3 Kenaikan atau
Penurunan Tidak Sebesar Satu
10
9
8
7
6
5
4
3
2
1
|
Dengan mengatur selang kenaikan pada variabel
pengontrol pengulangan, WHILE bisa
dimanfaatkan, misalnya untuk mendapatkan sederetan bilangan ganjil ataupun
menampilkan bilangan dari 1 sampai dengan 10 dengan kenaikan sebesar 0,2.
Sebagai contoh (dengan Bil bertipe Real):
Bil := 1:
WHILE Bil <= 2.0 DO
BEGIN
WriteLn (Bil :0:2);
Bil := Bil + 0.2;
END;
Hasil
dari pernyataan-pernyataan di atas adalah:
1.00
1.20
1.40
1.60
1.80
2.00
1.2.4 Tidak Selamanya
Ada Pencacahan
Beberapa
contoh WHILE yang telah diberikan
melibatkan pencacahan (yang meningkat ataupun menurun). Hal ini sebenarnya
belum tentu ada. Pada contoh berikut dapat dilihat bahwa pengndalian kondisi WHILE ditentukan oleh keabsahan yang
dimasukkan dari keyboard.
Program 1.9
|
PROGRAM While;
{---------------------------------------------------------------------- }
{ Contoh WHILE yang tidak melibatkan pencacah. }
{---------------------------------------------------------------------- }
USES Crt;
VAR
Absah : Boolean;
Pil :
Integer;
BEGIN
Clrscr;
Absah :=
FALSE; { --- Nilai Awal --- }
WHILE NOT
Absah DO
BEGIN
Write
(‘Pilihan [1..3] : ‘);
ReadLn
(Pil) ;
Absah
:= (Pil >= 1) AND (Pil <= 3);
END;
WriteLn
(‘Selesai…’);
END.
Akhir Program
|
Hasil:
Pilihan [1..3]
: 5
Pilihan [1..3]
: 4
Pilihan [1..3]
: 3
Selesai…
|
Pada
WHILE di atas,
Absah := (Pil >=
1) AND (Pil <= 3) ;
Menentukan
bagian yang terletak di dalam BEGIN END
yang mengikuti WHILE akan diproses
lagi atau tidak. Dari contoh di atas terlihat bahwa kalau nilai seperti 4 atau
5 dimasukkan, bagian BEGIN END akan
diproses kembali, mengingat Absah bernilai False
disebabkan nilai 4 atau 5 tidak terletak antara 1 sampai dengan 3.
1.2.5 WHILE Bersarang
Bagian yang akan diulang oleh WHILE juga bisa
mengandung WHILE yang lain.
Gambaran
mengenai hal ini, yaitu misalnya untuk membuat gambar seperti berikut:
*
***
*****
*******
Programnya dapat dilihat di bawah ini.
Program 1.10
|
PROGRAM Bintang2;
{----------------------------------------------------- }
{ Contoh yang menggunakan WHILE }
{ di
dalam WHILE. }
{----------------------------------------------------- }
USES Crt;
VAR
Baris, { - - Pencacah
Baris - - }
Kolom, { - - Pencacah
Kolom - }
JumBaris
: Integer; { - - Jumlah Baris - - - }
BEGIN
Clrcr;
Write
(‘ Jumlah baris : ‘);
Readln
(JumBaris);
Baris
:= 1;
WHILE
Baris <= JumBaris DO
BEGIN
{
- - Menulis * yang pertama - - }
Write
(‘*’ : JumBaris + 1 – Baris);
{
- - Menulis * selanjutnya - - }
Kolom
:= 2;
WHILE
Kolom <= (2 * Baris -1) DO
BEGIN
Write
(‘*’);
Kolom
:= Kolom +1; { - - Naikkan Kolom - - }
END;
WriteLn; { - - Pindah baris - - }
Baris
:= Baris +1 { - - Naikkan Baris - - }
END;
END.
Akhir Program
|
Namun
perlu diketahui, program di atas akan menjadi lebih sederhana kalau WHILE
diganti dengan FOR. Anda bisa mencobanya.
1.3 Pernyataan REPEAT
REPEAT
biasa dipakai untuk menangani pengulangan yang jumlahnya belum pasti, tetapi
paling tidak dikerjakan sekali ( Pada WHILE, ada kemungkinan bagian pernyataan
tidak dijalankan sama sekali).
Bentuk
pernyataan REPEAT :
REPEAT
Pernyataan_1;
Pernyataan_2;
…
Pernyataan_n
UNTIL
kondisi
|
Pada dasarnya REPEAT dapat digunakan untuk
semua masalah yang dapat ditangani oleh FOR ataupun WHILE. Sebagai contoh:
FOR Pencacah := 1 TO
10 DO
Writeln (‘Turbo Pascal’);
Dapat
disajikan dengan menggunakan REPEAt seperti berikut:
Pencacah := 1;
REPEAT
Writeln (‘Turbo Pascal’);
Pencacah := Pencacah + 1 : { - -
Menaikkan nilai Pencacah - - }
Contoh berikut memberikan gambaran penggunaan
REPEAt untuk membentuk tabel ekuivalensi derajat celcius, fahrenheit dan
reamur. Rumus yang digunakan:
F=9/5 x C +32
R=4/5 x C
Program 9.11
|
PROGRAM Cfr;
{-------------------------------------------------------------- }
{ Tabel derajar Celcius, Fahrenheit, Reamur. }
{-------------------------------------------------------------- }
USES Crt;
VAR
Celcius,
Reamur,
Fahrenheit :
Real;
Begin
Clrscr;
Writeln
(‘Celcius’ : 12, ‘Reamur’ :12, ‘Fahrenheit’ : 12);
Writeln
(‘---------------------------------------------------‘);
Celcius :=
0:
REPEAT
Reamur
:= 4 / 5 * Celcius;
Fahrenheit
:= 9 / 5 * Celcius + 32;
Writeln
(Celcius:12:2, Reamur :12:2, Fahrenheit:12:2);
UNTIL
Celcius >10;
Writeln
(‘--------------------------------------------------‘);
END.
Akhir Program
|
Hasil eksekusi:
Celcius Reamur Fahrenheit
0.00 0.00 32.00
0.50 0.40 32.90
1.00 0.80 33.80
2.00 1.60 35.60
3.00 2.40 37.40
|
Langganan:
Komentar (Atom)

