Program Sederhana
Cukup banyak yang telah dipelajari pada Bab 1 sebagai usaha untuk dapat
menulis program. Mulai saat ini perancangan program akan dilakukan
berdasarkan urutan permasalahan, yang disebut studi kasus, dimana
penyelesaiannya akan dikembangkan secara bertahap dalam mpl.
Mulai dengan bab ini, studi kasus akan dibagi dalam dua bagian -
bagian pengenalan atau Getting Acquinted yang akan mengungkapkan
konsep-konsep pemograman baru pada Bab ini serta bagian yang lebih
rumit atau The Challenge yang akan mengilustrasikan penggunaan
konsep pemrograman baru tersebut pada program yang lebih nyata.
Bagian Pendalaman (In Restrospec) sesudah bagian Pengenalan akan
mengungkapkan kesimpulan komprehensip dari konsep pemrograman
baru pada bab ini.
Disarankan untuk mempelajari semua studi kasus pada bagian
Pengenalan, karena setiap studi kasus memperkenalkan konsep
pemograman baru dan studi kasus selanjutnya dibangun berdasarkan
studi kasus ini. Studi kasus pada bagian The Challenge merupakan pilihan,
tetapi disarankan paling sedikit dipelajari satu kasus secara mendalam
untuk dapat mengerti konsep pemrograman pada bab ini secara
mendalam.
Topik utama pada bab ini merupakan struktur dan rancangan
program. Disini terlihat dimana setiap program akan mengandung
prosedur inisial yang merupakan organisator program serta satu atau
lebih prosedur dan atau fungsi yang melaksanakan bagian pekerjaan
dari permasalahan. Selain itu akan dipelajari pula bagaimana
menggunakan parameter sebagai alat komunikasi antar rutin (prosedur
atau fungsi) dalam program.
2 -1
2.1
PENGENALAN
(a+b+c)/3
spesifikasi storage
variabel
a,b,c rata : integer
end spesifikasi storage
2 -2
Eksekusi pernyataan diatas oleh prosesor, akan mengakibatkan store
berbentuk
a integer
b integer
c integer
rata integer
input a,b,c
dalam program kita. Misalkan, apabila ke-3 nilai yang di input adalah :
75 86 81
a 75 integer
b 86 integer
c 81 integer
rata integer
2 -3
rata (a+b+c)/3
rata (75+86+81)/3
a 75 integer
b 86 integer
c 81 integer
rata 80 integer
Tugas akhir dari program kita adalah mencetak hasil perhitungan diatas,
dengan mengguna-
kan pernyataan output
spesifikasi storage
variabel
a,b,c,rata : integer
end spesifikasi storage
2 -4
Kalimat dalam tanda {} hanya merupakan "komentar" dan tidak
dieksekusi oleh prosesor. Komentar hanya berguna untuk orang yang
membaca program tersebut.
Catatan :
Tata cara diatas tampak bertele-tele, tetapi hal ini perlu dipraktekan
(walaupun awalnya kita akan sering melakukan kesalahan) agar kita
terbiasa dengan tata cara diatas, sehing-ga pada saat kita membuat
program yang benar untuk memecahkan permasalahan besar, tata
cara ini akan sangat membantu.
2 -5
Alasan yang lebih penting adalah, membiasakan kita dalam membuat
program secara terorganisir serta berdisiplin tinggi yang lebih produktip
daripada menuliskan suatu program besar yang sekaligus dapat
memecahkan suatu permasalahan besar pula.
Untuk mendemonstrasikan corak pemograman secara modular, maka
dituliskan sebagai beri-kut :
spesifikasi storage
variabel
a,b,c,rata : integer
end spesifikasi storage
rata (a+b+c)/3
rata average3(a,b,c)
2 -6
Saat ini kita perlu merancang fungsi average3 dengan cara
mengembangkan struktur internal dari black box dibawah ini,
rata average3(a,b,c)
rata average3(a,b,c)
parameter
x,y,z : integer in only
rata average3(a,b,c)
2 -7
prosesor mengeksekusi fungsi average3, dan dalam proses, nilai a
dikhususkan pada x, nilai b pada y dan nilai c pada z. Parameter x, y, dan
z disebut parameter in only bertipe integer, karena mereka hanya
menerima nilai-nilai integer yang dikirimkan pada fungsi average3, dan
nilai-nilai tersebut tidak dimodifikasi ataupun dirubah. Dengan kata lain,
nilai akan masuk pada fungsi average3 melalui parameter x, y, dan z,
tetapi tidak ada nilai yang dikeluarkan melalui x, y, dan z; sehingga x, y,
dan z memiliki tujuan in only.
Dengan parameter x, y, dan z, kita dapat memasukan pernyataan
average3 (x+y+z)/3
spesifikasi storage
parameter
x,y,z :integer in only
end spesifikasi storage
begin average3
average3 (x+y+z)/3
end average3
_________________________________________________________________
2 -8
rata average3(a,b,c)
x y z fungsi
average3
average3 (x+y+z)/3
Nilai pada a dikirimkan ke x, nilai b pada y dan nilai c pada z. Jumlah dari
x, y, dan z dibagi 3 dan hasilnya disimpan pada average3, sebagai nama
fungsi. Pada tahap ini fungsi selesai dan nilai yang dihitung pada average3
dikembalikan pada prosedur inisial, menggantikan fungsi yang dinamakan ;
average3(a,b,c)
rataberbobot average3(S1,S2,S3)*10
dimana nilai S1, S2, dan S3 merupakan variabel yang nilainya telah
dihitung. Fungsi average3 akan bekerja dengan tanpa perlu dimodifikasi,
seperti dibawah ini :
rataberbobot average3(S1,S2,S3)*10
x y z fungsi
average3
average3 (x+y+z)/3
2 -9
Harga rata-rata yang dihitung oleh fungsi average3 akan dikembalikan
pada
average3(S1,S2,S3)
dan kemudian akan dikalikan dengan 10 serta hasilnya akan disimpan pada
variabel rataberbobot.
_________________________________________________________________
spesifikasi storage
variabel
a,b,c,rata :integer
end spesifikasi storage
spesifikasi storage
parameter
x,y,z : integer in only
end spesifikasi storage
begin average3
average3 (x+y+z)/3
end average3
2 - 10
STUDI KASUS 2.1 - PENYEMPURNAAN 4
Correctness
_________________________________________________________________
85 73 92
variabel
a,b,c,rata : integer
2 - 11
a integer
b integer
c integer
rata integer
input a,b,c
a 85 integer
b 73 integer
c 92 integer
rata integer
rata average3(a,b,c)
2 - 12
average3 : fungsi integer
a 85 integer
b 73 integer
c 92 integer
rata integer
average3 integer
parameter
x,y,z : integer in only
a 85 integer
b 73 integer
c 92 integer
rata integer
average3 integer
x integer
2 - 13
y integer
z integer
a 85 integer
b 73 integer
c 92 integer
rata integer
average3 integer
x 85 integer
y 73 integer
z 92 integer
Pada tahap ini prosesor bekerja didalam fungsi average3 dan tidak lagi
melihat variabel a, b, c dan rata dari prosedur inisial, walaupun variabel
tersebut masih terdapat dalam store. Pada saat prosesor memproses
average3, ia hanya bisa berhubungan dengan sel storage average3, x, y,
dan z.
Saat ini prosesor mengeksekusi pernyataan pertama pada bagian
perhitungan dari average3 setelah pernyataan
2 - 14
begin average3
yaitu
average3 (x+y+z)/3
83.333...
2 - 15
a 85 integer
b 73 integer
c 92 integer
rata integer
average3 83 integer
x 85 integer
y 73 integer
z 92 integer
end average3
yang merupakan akhir dari fungsi average3. Pada tahap ini, eksekusi dari
average3 berakhir dan prosesor akan melanjutkan kembali eksekusi pada
prosedur inisial melalui pernyataan dimana fungsi average3 dipanggil, yaitu
rata average3(a,b,c)
Pada saat ini, nilai average3(a,b,c), 83, telah selesai dihitung dan disimpan
pada sel storage average3. Prosesor mengganti average3(a,b,c) dengan 83
pada saat kembali pada prosedur inisial dan mengakibatkan pernyataan
diatas akan sama dengan
rata 83
Pada saat yang sama, selama prosesor telah selesai memproses fungsi
average3 dan kembali untuk mengeksekusi prosedur inisial, semua sel
storage yang digunakan oleh fungsi average3 akan dihilangkan. Karena itu,
persis sebelum melengkapi pernyataan
rata 83
2 - 16
a 85 integer
b 73 integer
c 92 integer
rata integer
Setelah pernyataan
average3 83
a 85 integer
b 73 integer
c 92 integer
rata 83 integer
2 - 17
untuk dapat dipergunakan kembali oleh program lain.
_________________________________________________________________
Dalam studi kasus ini, kita lihat corak pemograman yang akan selalu
dianut pada studi kasus lainnya. Setiap akan melakukan rancangan
program, perlu dilakukan langkah-langkah, pengu-raian permasalahan
yang akan dipecahkan dan input yang perlu diproses, dan kemudian
meran-cang program dalam mpl dengan pola 'top-down'. Kita akan mulai
dengan merancang prosedur inisial dan pada saat dihadapi proses
penghitungan, diasumsikan terdapat fungsi atau prosedur terpisah untuk
melakukan proses tersebut, dan pernyataan yang memanggil fungsi atau
prose-dur tadi perlu dituliskan pada prosedur inisial, kemudian lanjutkan
penulisan prosedur inisial. Setelah rancangan prosedur inisial diselesaikan,
kita perlu merancang fungsi atau prosedur yang kebutuhannya telah
diasumsikan. Dengan mengkonsentrasikan diri pada bagian-bagian kecil
program yang terpisah akan sangat menyederhanakan proses
pemrograman.
Merancang suatu fungsi (mis. average3) seperti membuat suatu
operator baru (mis. +) yang dapat digunakan secara berulang dalam satu
ataupun program lain. Perbedaan utama antara fungsi 'software' seperti
fungsi average3 dengan fungsi 'hardware' seperti +, adalah dimana fungsi
software hanya dapat menampung satu tipe bilangan pada parameternya,
sedangkan fungsi hardware dapat menampung tipe bilangan yang
berbeda.
Parameter fungsi atau prosedur disebut parameter formal dan nilai
yang dikirimkan pada parameter yang bersangkutan pada saat fungsi
atau prosedur tersebut dipanggil dinamakan parameter aktual, dan tipe
dari kedua parameter ini harus sesuai.
Pada saat suatu fungsi atau prosedur dipanggil dari rutin lain, prosesor
akan menyiapkan sel storage baru untuk setiap parameter formal in only
dan kemudian akan menyalin nilai dari parameter aktual pada sel
parameter formal yang berhubungan sebelum fungsi atau prosedur
tersebut dieksekusi. Selama parameter formal in only merupakan hasil
salinan dari parameter aktual, maka perubahan pada nilai parameter
formal pada saat fungsi dieksekusi tidak akan merubah nilai dari
parameter aktual. Karena itu parameter ini disebut parameter in only:
nilai-nilai dapat dikirimkan pada fungsi melalui parameter in only, tetapi
2 - 18
tidak ada nilai yang dapat dikirimkan kembali pada rutin yang memanggil
melalui parameternya.
Selama prosesor mengeksekusi suatu fungsi tertentu, variabel yang
dinyatakan pada prosedur dan fungsi lainnya tidak dapat dijangkau
ataupun digunakan dengan cara apapun, walaupun mungkin saja storenya
sudah memiliki nilai. Satu-satunya cara untuk mengirim dan menerima
nilai antara rutin yang berbeda adalah melalui parameter dan nama
fungsi. Setiap kali fungsi atau prosedur selesai dieksekusi, semua sel
storage yang disiapkan untuk fungsi atau prosedur tersebut akan
dihilangkan dan nilainya menjadi tidak terdefinisi.
Studi kasus selanjutnya merupakan contoh yang melibatkan suatu
fungsi dimana polanya mirip dengan studi kasus ini.
Prosedur inisial akan mengandung; pembacaan panjang dan lebar dari alat
input, memanggil fungsi untuk menghitung luas, dan akhirnya akan
mencetak luas. Kita memerlukan dua variabel untuk menampung dua nilai
riil input yang disebut panjang dan lebar.
variabel
panjang, lebar : riil
2 - 19
spesifikasi storage
variabel
panjang, lebar : riil
end spesifikasi storage
2 - 20