download

Matakuliah : KONSEP BAHASA PEMROGRAMAN
Tahun
: 2010
PERNYATAAN STRUKTUR KENDALI
Pertemuan 6
Outline Materi
•Pendahuluan
•Pernyataan seleksi
•Pernyataan iterasi
•Pencabangan tanpa kondisi
•Guarded Commands
Bina Nusantara University
3
Aras Alir Kendali
•
Alir kendali dapat muncul dalam aras
- ekspresi
- unit program
- pernyataan program
Bina Nusantara University
4
Evolusi Pernyataan Kendali
• Pernyataan kendali FORTRAN I didasarkan pada hardware IBM704
–
–
–
–
Pernyataan kendali tunggal
Selectable go to
Multiple entry: go to dan nomor pernyatan
Pernyataan for: iterasi kendali konter
• Banyak riset dan argumen di tahun 60-an tentang isu
– Bohm dan Jacopini membuktikan bahwa algoritma yang disajikan oleh
flowchart dapat dikode hanya dengan two-way selection dan pretest
logical loops
– Pemrograman terstruktur
– Entri tunggal
– Pencabangan tanpa kondisi sangat menyenangkan tetapi tidak esensial
– Daripada menggunakan while, lebih mudah menggunakan perulangan
yang dikontrol oleh konter.
Bina Nusantara University
5
Struktur Kendali
• Struktur kendali adalah pernyataan kendali dan
pernyataan-pernyataan yang eksekusinya dikendalikan
• Tipe
– Pernyataan seleksi
– Pernyataan iterasi
• Isu desain
– Apakah struktur kendali mempunyai banyak entri?
Bina Nusantara University
6
Pernyataan Seleksi
• Pernyataan seleksi adalah alat untuk memilih satu
diantara dua atau lebih jalur eksekusi
• Dua kategori umum
– Two-way selectors
– Multiple-way selectors
Bina Nusantara University
7
Pernyataan Seleksi Dua-Arah
•
•
Bentuk umum
if control_expression
then clause
else clause
Isu desain
–
–
–
Apakah bentuk dan tipe dari ekspresi kendali?
Bagaimana klausa then dan else dispesifikasi?
Bagaimana arti nested selectors dispesifikasi?
Bina Nusantara University
8
Contoh Seleksi Dua-Arah
• FORTRAN IV single way selector: logical IF
IF (boolean_expr) statement
• Sangat sederhana tetapi sangat tidak luwes
• Masalah: hanya dapat memilih satu pernyataan; untuk memilih lebih
dari satu harus menggunakan GOTO
IF (.NOT. condition) GOTO 20
...
20 CONTINUE
•
•
•
•
Negatif logik adalah jelek untuk readability
Dapat mempunyai multiple entries
Masalah ini diselesaikan di FORTRAN 77
Sebagian besar bahasa baru membolehkan pernyataan majemuk
sebagai pilihan dalam single-way selectors
Bina Nusantara University
9
Contoh Seleksi Dua-Arah
• ALGOL 60: two way selector pertama
if (boolean_expr)
then statement (then clause)
else statement (else clause)
• Pernyataan mungkin tunggal atau majemuk
Bina Nusantara University
10
Seleksi Nested
• Contoh Java
if (sum == 0)
if (count == 0)
result = 0;
else result = 1;
• if mana yang berpasangan dengan else?
• Aturan semantik statik Java: else berpasangan dengan
if terdekat
Bina Nusantara University
11
Seleksi Nested (lanjutan)
• Semantik alternatif lain, pernyataan majemuk mungkin
digunakan :
if (sum == 0) {
if (count == 0)
result = 0;
}
else result = 1;
• Solusi di atas digunakan oleh C, C++, dan C#
• Perl mensyaratkan bahwa semua klausa then dan else
adalah majemuk
Bina Nusantara University
12
Pernyataan Seleksi Banyak-Arah
•
•
Memungkinkan memilih satu dari banyak pernyataan
atau kelompok pernyataan
Ise desain :
1. Apa bentuk dan tipe dari ekspresi kendali?
2. Bagaimana selectable segments dispesifikasi?
3. Apakah alir eksekusi yang melalui struktur dibatasi hanya
untuk single selectable segment?
4. Apa yang akan dilakukan jika ada nilai ekspresi yang tidak
terwakili?
Bina Nusantara University
13
Contoh Seleksi Banyak-Arah
• Awal selektor multipel:
– FORTRAN arithmetic IF (a three-way selector)
IF (arithmetic expression) N1, N2, N3
– Segmen memerlukan GOTOs
– Tidak enkapsulasi (segmen yang dapat dipilih lokasinya
sembarang dalam program sehingga mengganggu readability)
– Dapat dimasuki dari sembarang lokasi dalam program
Bina Nusantara University
14
Contoh Seleksi Banyak-Arah
• Modern multiple selectors
• Case selector
– Disarankan oleh C.A.R. Hoare untuk dimasukkan dalam AlgolW (Wirth and Hoare, 1966)
• Enckapsulasi dan entri tunggal
• Hoare’s
case integer_expression of
begin
statement1;
…
statement2;
end
Bina Nusantara University
15
Contoh Seleksi Banyak-Arah
• Pascal
case expression of
constant_list_1: statement_1;
…
constant_list_n: statement_n;
end
• Ekspresi harus tipe ordinal
• Constant_list
– Mutually exclusive: tak dapat muncul lebih dari satu kali
– Tidak exhaustive: tidak semua nilai harus disajikan dalam list
• Hasil dari nilai ekspresi yang tidak diwakili adalah
undefined
Bina Nusantara University
16
Contoh Seleksi Banyak-Arah
• Pernyataan switch C,C++, Java : desain relatif primitif
switch (expression) {
case const_expr_1: stmt_1;
…
case const_expr_n: stmt_n;
[default: stmt_n+1]
}
• Break: keluar dari switch dan body of loop
• go to terbatas
Bina Nusantara University
17
Contoh Seleksi Banyak-Arah
•
Design choices for C’s switch statement
1. Ekspresi kendali hanya dapat tipe integer
2. Selectable segments dapat berbentuk sekuen pernyataan,
pernyatan majemukl atau block
3. Sejumlah segmen dapat dieksekusi dalam satu konstruksi
eksekusi karena tidak ada cabang implisit diakhir selectable
segments
4. Klausa default disediakan untuk nilai yang tidak diwakili
(jika tak ada default, the whole statement tak melalukan apaapa)
Bina Nusantara University
18
Contoh Seleksi Banyak-Arah
• Pernyatan Ada case
case expression is
when choice list => stmt_sequence;
…
when choice list => stmt_sequence;
when others => stmt_sequence;]
end case;
• Lebih reliable daripada C’s switch (sekali
stmt_sequence selesai dieksekusi, kendali dikirim ke
pernyatan pertama sesudah pernyatan case
Bina Nusantara University
19
Seleksi Banyak-Arah dengan if
• Multiple Selectors adalah perluasan langsung dari twoway selectors, menggunakan klausa else-if , sebagai
contoh di Ada:
if ...
then ...
elsif ...
then ...
elsif ...
then ...
else ...
end if
Bina Nusantara University
20
Pernyataan Iteratif
• Pernyataan atau pernyataan majemuk dieksekusi nol
kali, satu kali atau lebih dari satu kali.
• Eksekusi berulang dilakukan menggunakan iterasi atau
rekursi.
• Ise desain untuk pernyataan kendali iterasi :
1. Bagaimana iterasi dikontrol? Logikal, dihitung atau kombinasi
dari keduanya
2. Dimana letak mekanisme kontrol dalam perulangan? Di atas
(pretest), dibawah (posttest) atau ditentukan oleh pengguna.
Bina Nusantara University
21
Pernyataan Iteratif Counting
•
•
Pernyatan iteratif counting mempunyai loop variable
or parameter, sebagai alat untuk menspesifikasi nilai
initial , terminal, dan stepsize
Isu desain
1. Apa tipe dan lingkup dari variabel loop ?
2. Berapa nilai variabel loop saat loop berakhir?
3. Apakah legal variabel loop atau parameter loop
diubah nilainya dalam loop body, dan jika ya,
dapakah perubahan nilai mempengaruhi kontrol loop
?
4. Apakah parameter loop dievaluasi hanya sekali atau
sekali setiap iterasi ?
22
Bina Nusantara University
Contoh Pernyataan Iteratif
• Sintaks FORTRAN 90
DO label var = start, finish [, stepsize]
• Stepsize boleh sembarang nilai kecuali nol
• Parameters dapat berupa ekspresi
• Isu desain :
1. Varibael loop harus INTEGER
2. Variabel loop selalu mempunyai nilai terakhirnya
3. Vaiabel loop tidak dapat diubah dalam loop, tetapi parameters
dapat diubah; karena mereka hanya sekali dievaluasi, ia tidak
mempengaruhi kontrol loop
4. Parameter loop hanya sekali dievaluasi
Bina Nusantara University
23
Contoh Pernyataan Iteratif
• FORTRAN 95 : bentuk kedua
[name:] DO variable = initial, terminal
[,stepsize]
…
END DO [name]
– Variabel loop variable harus INTEGER
Bina Nusantara University
24
Pernyataan Iteratif
•
Pernyataan for Pascal
for variable := initial (to|downto) final do
statement
•
Isu desain:
1. Variabel loop harus tipe ordinal
2. Sesudah loop berakhir, variabel loop undefined
3. Variabel loop tidak dapat diubah dalam loop; parameter loop
dapat diubah, tetapi karena mereka hanya dievaluasi satu kali
maka mereka tidak mempengaruhi kontrol loop
4. Hanya sekali
Bina Nusantara University
25
Contoh Pernyataan Iteratif
• Ada
for var in [reverse] discrete_range loop
...
end loop
• Rentang diskrit adalah sub-range dari tipe integer atau
enumersi
• Lingkup variabel loop adalah rentang dari loop
• Variabel loop secara implisit undeclared sesudah loop
berakhir
Bina Nusantara University
26
Contoh Pernyataan Iteratif
• Pernyataan for C
for ([expr_1] ; [expr_2] ; [expr_3]) statement
• Ekspresi dapat berupa pernyataan utuh , atau sekuen
pernyataan yang dipisahkan dengan koma
– Nilai dari ekspresi multiple-statement adalah nilai pernyataan
terakhir dalam ekspresi
• Tidak ada variabel loop secara eksplisit
• Apapun dapat diubah dalam loop
• Ekspresi pertama dievaluasi tetapi dua lainya dievaluasi
setiap iterasi
Bina Nusantara University
27
Contoh Pernyataan Iteratif
•
C++ berbeda dari C dalam dua hal:
1. Ekspresi kontrol dapat berupa Boolean
2. Ekspresi awal dapat mencakup definisi variabel dengan
lingkup dari definisi sampai akhir loop body
•
Java dan C#
–
Berbeda dari C++ dalam hal ekspresi kendali harus Boolean
Bina Nusantara University
28
Pernyataan Iteratif Logikal
•
•
Kontrol repetisi adalah ekspresi Boolean bukannya
counter
Isu desain
–
–
•
Pre-test atau post-test?
Apakah loop logikal adalah bentuk khusus dari counting loop
atau bukan?
Bentuk umum:
while (ctrl_expr)
loop body
Bina Nusantara University
do
loop body
while (ctrl_expr)
29
Pernyataan Iteratif Logikal (lanjutan)
•
•
•
•
•
•
Pascal mempunyai dua loop logikal pre-test dan posttest (while-do dan repeat-until)
C dan C++ juga punya keduanya, tetapi ekspresi
kontrol untuk versi post-test diperlakukan seperti
halnya bentuk pre-test (while-do dan do- while)
Java seperti C, kecuali ekspresi kontrol harus Boolean
dan body loop hanya dapat dimasuki di awal loop
karena Java tak punya goto
Ada mempunyai versi pre-test, tapi tak punya posttest
FORTRAN 77 dan 90 tak punya keduanya
Perl mempunyai dua pre-test logical loops, while dan
until,
30
Bina Nusantara University
Pernyataan Iteratif Dikendalikan User
•
•
•
Kadang-kadang menyenangkan bagi pengguna untuk
menentukan lokasi kendali perulangan, bukannya di
atas atau di bawah.
Desain sederhana untuk loop tunggal (e.g., break)
Isu desain untuk nested loops
1. Apakah kondisi merupakan bagian dari exit?
2. Apakah kendali dapat ditransfer keluar lebih dari satu loop?
Bina Nusantara University
31
Break vs Continue
• C , C++, dan Java: pernyataan break
• Keluar tanpa kondisi tanpa label; untuk sembarang loop
atauswitch; hanya satu aras
• Java dan C# mempunyai pernyataan break dengan
label: kendali ditransfer ke label
• Alternatif: pernyataan continue ; melewati sisa iterasi
tetapi tidak keluar dari loop
Bina Nusantara University
32
Pernyataan Iteratif Berbasis Struktur Data
• Banyak elemen dalam struktur data mengendalikan
iterasi
• Mekanisme kendali adalah call ke fungsi iterator yang
mengembalikan elemen berikutnya berdasarkan order
yang telah dipilih jika ada; jika tidak loop berakhir
• C's for dapat digunakan untuk membentuk user-defined
iterator:
for (p=root; p==NULL; traverse(p)){
}
Bina Nusantara University
33
Pernyataan Iteratif Berbasis Struktur Data
• C# mengulangi setiap pernyataan dalam elemen array
dan koleksi lain
Strings[] = strList = {“Bob”, “Carol”,
“Ted”};
foreach (Strings name in strList)
Console.WriteLine (“Name: {0}”, name);
• Notasi {0} menyatakan posisi dalam string yang
ditampilkan
Bina Nusantara University
34
Pencabangan Tanpa Kondisi: goto
• Transfers kendali eksekusi ke tempat tertentu dalam
program
• Merupakan topik debat hangat dalam 1960-an dan 1970an
• Mekanisme yang terkenal: pernyataan goto
• Konsern utama: sangat tidak reliable, sukar dikelola,
dapat membuat program tidak terbaca
• Sejumlah bahasa tidak mendukung pernyataan goto
(e.g., Module-2 dan Java)
• C# menawarkan goto(dapat digunakan dalam
pernyataan switch)
• Pernyataan exit dibatasi untuk keluar loop exit, agak
mirip dengan goto
Bina Nusantara University
35
Perintah Guard
• Disarankan oleh Dijkstra
• Tujuan: untuk mendukung metodologi baru
pemrograman yang mendukung verifikasi (correctness)
selama pengembangan
• Basis untuk concurrent programming ( CSP dan Ada)
• Ide dasar: jika order evaluasi tidak penting, program
seharusnya tidak menspesifikasinya
Bina Nusantara University
36
Perintah Guard Seleksi
• Bentuk
if <Boolean exp> -> <statement>
[] <Boolean exp> -> <statement>
...
[] <Boolean exp> -> <statement>
fi
• Semantik: jika konstruksi dicapai,
– Evaluasi semua ekspresi Boolean
– Jika lebih dari satu yang benar, pilih satu non-deterministically
– Jika tak ada yang benar, run time error
Bina Nusantara University
37
Perintah Guard Iteratif
• Bentuk
do <Boolean> -> <statement>
[] <Boolean> -> <statement>
...
[] <Boolean> -> <statement>
od
• Semantik: untuk setiap iterasi
– Evaluasi semua ekspresi Boolean
– Jika lebih dari satu yang benar, pilih satu non-deterministically;
kemudian mulai loop lagi
– Jika tak ada yang benar, keluar loop
Bina Nusantara University
38
Rasional Perintah Guard
• Koneksi antara pernyataan kendali dan verifikasi
program sangat erat
• Verifikasi tidak mungkin menggunakan pernyataan goto
• Verifikasi hanya mungkin menggunakan seleksi dan
perulangan logikal pretest
• Verifikasi relatif sederhana menggunakan guarded
commands
Bina Nusantara University
39
LATIHAN
A. SOAL PILIHAN
1. Loop yang infrequently useful dan somewhat dangerous adalah
a. counter control loop
b. logically control loop
c. pretest loop
d. posttest loop
2. Break di C/C++, untuk keluar dari loop dan switch, adalah
a. unconditional unlabeled
b. unconditional labeled
c. conditional unlabeled
d. conditional labeled
3. Loop construct untuk mengolah struktur data seperti tree, hash dan linklist disebut
a. user defined operator
b. separate iterator classes
c. data base iterator
d. built-in defined operator
Bina Nusantara University
40
LATIHAN
4. Constant lists dalam case statement di Pascal bersifat
a. mutually inclusive dan exhaustive
b. mutually exclusive dan exhaustive
c. mutually inclusive dan not exhaustive
d. mutually exclusive dan not exhaustive
5. Kemampuan suatu bahasa untuk mendefinisikan dan kemudian
menggunakan struktur program yang kompleks sehingga memungkinkan
rincian atau detil operasi diabaikan disebut
a. orthogonality
b. abstraction
c. type checking d.
casting
Bina Nusantara University
41
LATIHAN
B. SOAL URAIAN
1. Diketahui pernyataan for di C sebagai berikut:
for (count1 = 0, count2 = 1.0;
count1 <= 10 && count2 <= 100.0;
sum += count1 + count2, count2 *= 2.5);
Tulislah operational semantiknya.
2. Bandingkan head-to-head antara early multiway selection dan
modern
multiway selection.
Bina Nusantara University
42
Ringkasan
• Ada berbagai bentuk pernyataan struktur kendali
• Pemilihan pernyataan kendali seleksi dan perulangan
logikal pretest adalah trade-off antara ukuran bahasa
dan writability
• Bahasa pemrograman fungsional dan logik sangat
berbeda struktur kendalinya
Bina Nusantara University
43