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
© Copyright 2024 Paperzz