Tampilkan postingan dengan label Bab7. Tampilkan semua postingan
Tampilkan postingan dengan label Bab7. Tampilkan semua postingan

Rabu, 10 Januari 2018

Bab7 (Pemrograman Modular)

Pemrograman modular memungkinkan perancang program menyederhanakan
persoalan didalam program dengan memecah atau membagi persoalan
tersebut menjadi sub-sub persoalan yang lebih kecil agar mudah diselesaikan.
Secara umum dikenal dua cara yang dapat digunakan untuk memecah
persoalan dalam modul-modul, yaitu dengan menggunakan struktur fungsi dan
prosedur. Pemahaman tentang perbedaan dan karakteristik masing-masing
struktur tersebut perlu diimbangi pula dengan kemampuan
mengimplementasikannya dalam program.
 
     1. Memahami konsep pemrograman modular
     2. Mengetahui dua cara pemrograman modular: fungsi dan prosedur
     3. Mengetahui cara mengimplementasikan fungsi dan prosedur dalam program
     4. Mengetahui dan dapat menerapkan pemanggilan subprogram dar program utama.

   Definisi Pemrograman Modular
Dalam sebuah program, seringkali pemrogram perlu memecah
persoalan yang kompleks menjadi beberapa bagian yang lebih mudah
diselesaikan. Ide inilah yang mencetuskan struktur pemrograman modular,
yaitu memecah persoalan menjadi sub-sub persoalan yang biasa disebut
subprogram.
   Bayangkan sebuah program yang dibuat untuk menghitung nilai rata- rata
dari sekumpulan nilai integer. Dalam prosesnya, program melakukan
perhitungan tersebut dalam dua langkah, yaitu menjumlahkan seluruh nilai,
kemudian membaginya dengan banyaknya nilai yang tersedia. Dengan
demikian program tersebut dapat dipecah menjadi dua subprogram, yaitu
subprogram penjumlahan dan subprogram pembagian.
   Selain itu, pemrograman modular memungkinkan pemrogram
memanggil kembali subprogram yang telah didefinisikannya setiap kali
diperlukan dalam program tersebut. Pemrogram tidak perlu berulang kali
mendefinisikan sekumpulan instruksi yang diperlukan beberapa kali dalam
sebuah program maupun dalam program lainnya. Dengan pemrograman
modular, sebuah subprogram dapat dianggap sebagai program kecil dengan
sebuah tujuan spesifik yang umumnya berisi operasi sederhana dan apabila
terdapat kesalahan dapat dilokalisir pada subprogram itu sendiri. Sub-sub
program tersebut kemudian disatukan oleh bagian program utama yang dapat
memanggil subprogram tersebut sesuai kebutuhan dalam program.
   Dalam pemrograman, dikenal dua tipe subprogram yang biasa
digunakan untuk memecah persoalan kompleks menjadi lebih sederhana, yaitu
fungsi (function) dan prosedur (procedure). Kedua tipe subprogram ini dapat
digunakan bersamaan maupun salah satunya saja dalam sebuah program.
Masing-masing tipe subprogram memiliki karakteristik dan perilaku yang
berbeda sehingga penggunaannya dalam program juga berbeda-beda.
   Subprogram sebagai bagian dari program utama wajib mendefinisikan
kondisi awal (initial state/I.S.) sebelum proses dalam subprogram dieksekusi
dan juga mendefinisikan kondisi akhir (final state/F.S.) yang berupa hasil proses
(output) atau perubahan nilai dalam variabel tertentu (khusus untuk fungsi saja).
   Beberapa fungsi dan prosedur telah terdefinisi dan dapat langsung
digunakan oleh pemrogram dalam sebuah program dengan mendefinisikan
variabel-variabel yang diperlukan. Selain fungsi dan prosedur yang telah
terdefinisi tersebut, pemrogram juga dapat membuat sendiri fungsi dan
prosedur yang diperlukannya dalam sebuah program.
Dalam membuat sebuah subprogram, pemrogram dapat
menyimpannya dalam salah satu dari dua lokasi berikut ini:
➨ dalam file yang sama dengan program utama: dapat dilakukan jika
     subprogram sedikit dan berukuran kecil sehingga relatif mudah dikelola
     dalam sebuah file
➨ dalam file yang terpisah: biasanya dilakukan jika subprogram sudah
    terlalu banyak sehingga sulit dikelola, atau jika pemrogram
    menginginkan supaya subprogram dapat digunakan di beberapa
    program utama sekaligus

    Variabel Lokal dan Variabel Global

  Variabel Lokal
Dalam mendeklarasikan sebuah fungsi/ prosedur, dapat dideklarasikan
pula variabel-variabel yang akan digunakan dalam fungsi/ prosedur tersebut.
Variabel semacam ini disebut variabel lokal atau variabel internal, artinya
variabel ini hanya dikenali secara lokal dalam sebuah subprogram (fungsi atau
prosedur). Variabel lokal tidak dapat dipanggil, diakses dan diubah oleh
prosedur atau fungsi yang lain, bahkan oleh program utama sekalipun karena
hanya dapat dikenali oleh prosedur atau fungsi dimana variabel ini

didefinisikan.
   Variabel Global
Sedangkan variabel yang didefinisikan dalam program utama dan dapat
digunakan di program utama maupun sub-sub program lainnya disebut dengan
variabel global. Nilai dari variabel ini dapat dipanggil, diakses dan diubah oleh
prosedur atau fungsi apapun yang terdapat dalam program tersebut.
   Fungsi
Fungsi adalah subprogram yang menerima data masukan, melakukan
beberapa perhitungan dari data tersebut, kemudian mengembalikan output
berupa sebuah data baru. Dengan kata lain, sebuah fungsi memetakan sebuah
nilai (dalam domain) menjadi nilai lain (dalam range) dengan operasi/ proses
tertentu. Pendeklarasian fungsi merupakan salah satu cara memecah
persoalan ke dalam beberapa sub persoalan yang lebih mudah diselesaikan.
Dalam pembuatan sebuah fungsi, pemrogram harus mendefinisikan:
➨  nama fungsi
➨  Tipe data yang dibuat/ dihasilkan oleh fungsi
➨  Daftar parameter yang menyatakan data yang diperlukan oleh fungsi
➨  Satu atau lebih instruksi yang melakukan perhitungan
      Selanjutnya, fungsi yang sudah didefinisikan dapat digunakan dalam
      program utama maupun dalam fungsi lainnya dengan cara memanggil nama
      fungsi dan memberikan parameter yang diperlukan oleh fungsi tersebut.

Fungsi bekerja menurut mekanisme pemanggilan-pengembalian (call-
return mechanism). Tahapan dalam mekanisme tersebut
adalah:
1. Fungsi dipanggil dari program utama maupun fungsi lainnya
2. Sekumpulan operasi dalam fungsi dieksekusi
3. Hasil eksekusi dikembalikan ke program utama atau fungsi lain yang
    memanggilnya:
FUNCTION nama_fungsi (daftar_parameter)tipe_data
BEGIN
{instruksi dalam fungsi}
return
ENDFUNCTION

Sedangkan penulisan dalam bahasa pemprograman C++ adalah sebagai
berikut :
Tipe_data_kembali nama_fungsi(daftar_parameter)
{
/* instruksi dalam fungsi */
return value;
}

Dengan catatan bahwa daftar parameter boleh kosong (tidak ada
parameter yang perlu diinputkan pada saat pemanggilan fungsi). Jika daftar
parameter (disebut juga parameter formal) tidak kosong maka parameter
tersebut harus berupa nama parameter dan tipe datanya. Dalam sebuah
fungsi, instruksi terakhir harus merupakan perintah untuk mengirimkan nilai/
data keluaran dari fungsi ke program utama (bagian program yang
memanggilnya). Nilai yang dikembalikan oleh sebuah fungsi dapat bertipe
skalar, record, array, maupun set.
Jika kita melihat struktur penulisan fungsi, struktunya hampir atau
bahkan sama dengan program utama. Pada dasarnya, pemprograman dengan
menggunakan C++ adalah pemprograman dengan struktur fungsi, dimana
setiap kode yang dituliskan harus dalam bentuk fungsi, tak terkecuali program
utama. Program utama merupakan suatu fungsi dengan nama main() yang
tidak memiliki nilai kembali atau nilai kembalinya adalah kosong atau 0. Oleh
karenanya, kita juga dapat menuliskan program utama dengan void
main() atau dengan int main(), dengan return value-nya 0.
Saat program pertama dijalankan, kode yang pertama dieksekusi adalah
fungsi main(). Oleh karenanya, setiap program minimal harus memiliki satu
fungsi yaitu main(), dimana isi dari fungsi ini adalah inti dari program.
Parameter dalam sebuah fungsi merupakan antarmuka (penghubung)
antara fungsi dengan kode pemanggilnya. Fungsi menerima satu atau beberapa
nilai melalui parameter-parameter yang telah didefinisikan. Setiap kali fungsi
dipanggil, kode pemanggil harus menyediakan parameter yang dibutuhkan
oleh fungsi. Beberapa karakteristik parameter dalam fungsi:
➜ Parameter hanya muncul di dalam fungsi yang mendefinisikannya dan
     tidak dapat diakses di luar fungsi tersebut.
➜ Parameter menyimpan nilai hingga fungsi dieksekusi.
➜ Parameter diinisialisasi setiap kali fungsi dipanggil oleh program utama
     maupun fungsi lainnya.
     Setelah didefinisikan, fungsi dapat dipanggil dari program utama 
     maupuan dari fungsi lainnya dengan
     perintah:
<nama_variabel> ⟵ <nama_fungsi>(<daftar_parameter>)

   Contoh fungsi:
1. FUNCTION luas_segiempat (P:integer, L:integer)➟
integer
2. { IS : Dua buah bilangan Bulat
3. FS : Hasil Kali dua bilangan }
4. KAMUS DATA
5. hasil : integer
6. P,L : integer;
7. BEGIN
8. hasil ⬅ P * L
9. return (hasil)
10. ENDFUNCTION
   Pada contoh di atas, fungsi luas_segiempat memerlukan dua
   parameter inputan, yaitu P dan L yang keduanya bertipe integer. Kemudian,
   fungsi ini akan menghitung hasil dengan perkalian nilai P dan L. Fungsi akan
   mengembalikan nilai variabel hasil ke kode pemanggil.

   Berikut ini adalah contoh algoritma program utama/ fungsi lain
   (selanjutnya disebut kode pemanggil) yang memanggil fungsi luas_segiempat:

1. Kamus data
2. panjang, lebar, luas: integer
3. BEGIN
4. { meminta inputan 2 nilai}
5. Input (panjang, lebar)
6. {pemanggilan fungsi luas_segiempat}
7. luas ⬅ luas_segiempat(panjang, lebar)
8. Output (luas) {menampilkan luas}
9. END

Pada potongan program di atas didefinisikan tiga variabel, yaitu
panjang, lebar, dan luas. Pemanggilan fungsi luas_segiempat
dilakukan dalam tiga tahap sesuai mekanisme call-return, yaitu:
   1. Kode pemanggil memberikan (passing) dua parameter yang sudah
       didefinisikan sebagai variabel dalam program tersebut, yaitu panjang
       dan lebar.
   2. Fungsi luas_segiempat dijalankan dengan menerima dua parameter
       dari kode pemanggil. Secara berurutan, variabel panjang dikenali
       sebagai parameter P dan variabel lebar dikenali sebagai parameter L.
       Fungsi melakukan perkalian dan menyimpan hasilnya dalam variabel
   hasil yang merupakan parameter output dari fungsi.
   3. Fungsi luas_segiempat mengembalikan nilai dalam variabel hasil
       ke kode pemanggil. Kode pemanggil akan menyimpannya ke dalam
       variabel luas yang telah didefinisikan, kemudian menampilkannya ke
       pemakai.

    Prosedur
Cara lain memecah persoalan pemrograman ke dalam sub-sub
persoalan pemrograman adalah dengan mendeklarasikan prosedur. Prosedur
adalah sederetan instruksi yang diberi nama, dan melakukan tujuan tertentu.
Seperti halnya pada fungsi, prosedur bekerja dengan mekanisme pemanggilan-
pengembalian (call-return mechanism), yaitu dengan urutan langkah:

    1. Prosedur dipanggil oleh kode pemanggil (program utama maupun
        prosedur lainnya)
    2. Sekumpulan operasi yang disimpan dalam prosedur dieksekusi
    3. Kontrol dikembalikan ke kode pemanggil


    Struktur umum deklarasi prosedur adalah sebagai berikut:
PROCEDURE <nama_prosedur> (input <daftar parameter
input>, output <daftar parameter output>)
{I.S.: [kondisi awal]
F.S.: [kondisi akhir/hasil yang diharapkan]}
BEGIN
{sekumpulan instruksi dalam prosedur}
ENDPROCEDURE

   Sedangkan dalam pemprograman bahasa C++, penulisan prosedure
   seperti berikut :
1. void nama_procedure (<daftar_parameter_input>
<,daftar_parameter_output>)
2. {
3. /* instruksi */
4. }
Dengan catatan bahwa nama prosedur dan nama parameternya harus
disebutkan dalam blok kode pemanggil. Berbeda dengan fungsi, daftar
parameter pada procedure terbagi menjadi dua yaitu parameter input dan
parameter output. Daftar parameter boleh kosong (tidak ada parameter
input maupun output). Jika parameter tidak kosong (minimal ada satu
parameter) maka harus dituliskan nama parameter beserta tipe datanya.
Prosedur tanpa parameter memanfaatkan nilai dari variabel yang
terdefinisi dalam kode program utama/prosedur lain yang memanggilnya.
Prosedur tanpa parameter ini hanya dapat dieksekusi jika nilai dari variabel
yang diperlukan dalam prosedur sudah didefinisikan dalam kode program
utama/ prosedur lain yang memanggilnya.
Prosedur dengan parameter dibuat untuk mengeksekusi sekumpulan
instruksi dengan parameter yang berbeda-beda. Nama parameter yang
dituliskan pada definisi / spesifikasi prosedur disebut dengan parameter
formal. Sedangkan parameter yang dituliskan pada pemanggilan prosedur
disebut parameter aktual.
Parameter formal adalah nama-nama variabel yang dipakai dalam
mendefinisikan prosedur, dan membuat prosedur tersebut dapat dieksekusi
dengan variabel yang berbeda saat pemanggilan. Terdapat tiga tipe parameter
formal:
⟹ parameter input, yaitu parameter yang diperlukan prosedur sebagai
     masukan untuk melakukan aksi yang efektif
⟹ parameter output, yaitu parameter yang akan menyimpan nilai yang
     dihasilkan oleh prosedur
⟹ parameter input/output, yaitu parameter yang diperlukan prosedur
     sebagai masukan untuk melakukan aksi tertentu, yang pada akhir
     prosedur akan diisi dengan nilai baru sebagai hasil eksekusi prosedur
     Parameter aktual adalah variabel / konstanta yang dipakai ketika
prosedur dipanggil oleh program utama / prosedur lain. Parameter aktual dapat
berupa variabel / konstanta, tapi parameter output harus berupa variabel
karena akan menyimpan hasil eksekusi prosedur.
   Struktur pemanggilan prosedur dari program utama maupun prosedur
lain adalah hanya dengan menuliskan nama procedurenya kemudian diikuti
daftar parameternya.

   Fungsi dan Prosedur yang telah terdefinisi
Selain dapat membuat sendiri fungsi atau prosedur yang
diperlukan dalam sebuah program, bahasa pemrograman juga sudah
menyediakan beberapa fungsi dan prosedur yang sudah terdefinisi dan
dapat langsung digunakan / dipanggil dalam program. Penggunaan fungsi
maupun prosedur yang telah terdefinisi tersebut dapat mempermudah
perancang program menyelesaikan sub persoalan tertentu.

Beberapa fungsi yang telah terdefinisi, 
antara lain:
FUNGSI
CONTOH
- Fungsi ceil
(untuk membulatkan keatas
nilai pecahan).
var-int ← ceil(ekspresi float)
- Fungsi min/ max
(menentukan nilai minimal
atau maksimal dari dua
bilangan)
var-int ← min(3,5)
var-int ← max(3,5)
- Fungsi random
(mendaparkan nilai secara
var-int ← random(10)

   Fungsi Rekursif
Fungsi dapat dipanggil oleh program utama dan juga oleh fungsi yang
lain, selain kedua metode pemanggilan tersebut, fungsi dapat juga dipanggil oleh
dirinya sendiri. Yang dimaksud disini adalah pemanggilan fungsi itu didalam
fungsi itu sendiri, bukan pada fungsi yang lain. Fungsi yang melakukan
pemanggilan terhadap dirinya sendiri disebut dengan fungsi rekursif.
Berikut adalah contoh program dalam program yang menerapkan
metode rekursif untuk menghitung nilai faktorial dari suatu bilangan.
Struktur umum deklarasi prosedur
adalah sebagai berikut:
1. // Program Hitung_Faktorial
2. #include <stdio.h>
3.
4. int angka;
5. int hasil;
6.
7. {===Program Utama===}
8. void main () { // program Utama
9. printf(“Masukan Angka Batas Atas Faktorial :”);
10. scanf(“%i”,&angka);
11. hasil = faktorial(angka);
12. printf(“Faktorial Dati %i adalah %i.”, angka,
hasil);
13. }
14.
15. int faktorial(int bil)
16. {
17. if bil = 0 then
18. return 1
19. else
20. return (bil * faktorial(bil - 1));
21. }
   Perhatikan pada baris ke-20 kode diatas yang diberi tanda arsir. Kode
   pemanggilan fungsi faktorial tersebut berada pada bloknya sendiri degan
   parameter yang diubah. Hal yang harus diperhatikan dalam pembuatan
   rekursif adalah fungsi tersebut harus berhenti dimana didalam fungsi tersebut
   harus ada pengkondisian bahwa fungsi harus berhenti. Pada contoh diatas, code
   untuk menghentikan fungsi tersebut ada pada baris ke 17 dan 18, dimana
   apabila inputan parameternya 0, maka akan menghasilkan 1. Namun jika tidak,
   proses akan memanggil fungsi yaitu dirinya sendiri.

   Sebagai ilustrasi program diatas, mari kita coba memanggil fungsi
faktorial dengan Faktorial(5), maka proses yang akan dilakukan adalah :
1. 5 * Faktorial(4)
2. 5 * 4 * Faktorial(3)
3. 5 * 4 * 3 * Faktorial(2)
4. 5 * 4 * 3 * 2 * Faktorial(1)
5. 5 * 4 * 3 * 2 * 1 * Faktorial(0)
6. 5 * 4 * 3 * 2 * 1 * 1
7. 5 * 4 * 3 * 2 * 1
8. 5 * 4 * 3 * 2
9. 5 * 4 * 6
10. 5 * 24
11. 120
Hasil Akhir : 120

   Unit
Fungsi dan prosedur dapat disimpan dalam file yang terpisah dari
program utamanya. File-file semacam ini disebut sebagai unit. Fungsi,
prosedur, dan variabel dapat disimpan dalam sebuah unit tanpa blok program
utama. Pada saat dilakukan kompilasi, program utama akan mendeklarasikan
unit-unit yang digunakan.