MODUL III PROSEDUR DAN FUNGSI I. TUJUAN 1. Memahami konsep prosedur secara benar serta kegunaan dan manfaat sebuah prosedur 2. Memahami struktur prosedur yang menghasilkan nett effect 3. Memahami konsep parameter secara lebih mendalam 4. Memahami konsep variable local 5. Memahami konsep passing parameter, by value dan by reference 6. Memahami perbedaan fungsi dan prosedur dan mampu mengimplementasikan di dalam kasus nyata 7. II. Memahami konsep fungsi secara lebih mendalam DASAR TEORI 1. PROSEDURE a. Pengertian Prosedur Prosedur adalah sederetan instruksi algoritmik yang diberi nama dan akan menghasilkan efek netto yang terdefinisi. Kegunaan/keuntungan menggunakan prosedur adalah : 1) Meningkatkan modularitas program 2) Kemudahan menulis dan menemukan kesalahan (debug) program Pada dasarnya prosedur membutuhkan input dan output. Input yang standar berasal dari piranti input standar (standard input device), yaitu keyboard. Output yang standar berasal dari piranti output standar (standard output device), yaitu monitor. Kedua piranti I/O standar ini dijembatani penggunaannya dalam C oleh library stdio.h (standard I/O), yang memperkenalkan printf untuk keperluan output dan scanf untuk keperluan input. Berdasarkan darimana datangnya input dan output, prosedur dikategorikan ke dalam 4 macam: Input Output Prosedur Std dev Parameter Std dev Parameter Std dev Std dev Parameter Parameter Nai’ve Semi Nai’ve Semi Nai’ve Nett Effect Hanya ada satu jenis prosedur yang direkomendasikan, yaitu prosedur yang menghasilkan efek netto (nett effect procedure). Kumpulan prosedur nett effect inilah yang akan dijadikan pustaka/library kita di dalam menyelesaikan masalah/soal yang dipecahkan dalam body program (main function). Dalam hal ini file .h digunakan sebagai penyimpan pustaka kita. Tentu III - 1 saja, jika terpaksa, prosedur naive tetap dapat dibuat, hanya saja tidak merupakan bagian dari solusi yang disimpan dalam pustaka, melainkan melulu merupakan pemangkasan panjang code dalam main function. b. Prosedur yang Menghasilkan Efek Netto Prosedur dapat dipandang sebagai kotak hitam yang menerima inputan parameter dan yang bertugas mengubah parameter output menjadi yang diinginkan. Ilustrasi di bawah dapat membantu memahami prosedur. Prosedur Parameter output yang belum jelas/sudah jelas yang hendak diubah (di dalamnya mengandung proses-proses, yang pihak luar tidak tahu) Parameter output yang sudah berubah dan jelas Parameter input yang jelas isinya Parameter Input : adalah parameter yang sudah Jelas isinya ketika dilakukan pemanggilan prosedur. Parameter input ini harus dijamin isinya ada sebelum masuk ke prosedur, dan tidak mengalami perubahan selama pemrosesan prosedur. Parameter input adalah parameter suplai. Biasanya dalam assignment dia diletakkan di sebelah KANAN ‘sama dengan’. Parameter Output : adalah parameter target yang hendak diubah. Parameter output menjadi tujuan pengubahan oleh prosedur. Parameter ini dapat sudah jelas isinya atau belum jelas isinya, yang jelas dia akan diubah di dalam prosedur. Biasanya di dalam assignment dia diletakkan di sebelah KIRI ‘sama dengan’. Parameter Input/Output : adalah parameter output yang juga sekaligus menjadi parameter input. Parameter ini pastilah sudah jelas isinya ketika memasuki prosedur, karena dia juga berperan sebagai parameter input. Keyword yang perlu diingat : 1) Perubahan parameter output. Tujuan prosedur haruslah melakukan perubahan. Perubahan ini ditunjukkan pada perubahan yang terjadi pada parameter output. Perubahan bersih, yaitu perbedaan antara parameter output sesudah dan sebelum memasuki prosedur, itulah yang disebut efek bersih, atau efek netto. 2) Bagi pihak luar, prosedur adalah black box. Isi body dari prosedur haruslah bukan concern (perhatian) dari program pemanggil, tetapi spesifikasinyalah yang penting bagi pihak luar (pihak pemanggil). Prosedur ini melakukan apa, lebih penting daripada bagaimana prosedur ini melakukannya. (Catatan : parameter output diletakkan di sebelah kiri dalam header prosedur, menyusul parameter input di sebelah kanannya.) III - 2 c. Konteks Pendefinisian dan Konteks Pemanggilan Aturan Pendefinisian Prosedur: 1) Mulailah dengan void lalu nama prosedur lalu kurung (, lalu kumpulan tipe parameter dan parameter-parametemya, lalu ditutup dengan kurung ). Formula: void Procedure_Name (param_type param, param type param, ...) 2) Khusus parameter output, gunakanlah pointer sebagai mekanisme passing by reference. Letakkan pointer (*) di sebelah kiri parameter output (tanpa spasi), dan pertahankanlah pointer ini di sepanjang body prosedur. 3) Bukalah body prosedur dengan ‘{‘ dan tutuplah dengan ‘}’. Aturan Pemanggilan Prosedur: Prosedur dipanggil oleh program pemanggil. Program pemanggil ini bisa program utama (main function) atau prosedur lain atau fungsi. Pemanggilan harus memperhatikan definisi program. Jadi tidak bisa sembarangan cara memanggil prosedur. Prosedur harus dipanggil dengan menuliskan nama prosedur tersebut tanpa void dan harus berdiri sendiri, atau pemanggilan tidak dapat menempel pada statemen lain. Pada pemanggilan, prosedur output (yang pada pendefinisian ditempeli ‘*’) ditempeli ‘&’ di sebelah kirinya. Parameter yang ada dalam konteks pemanggilan disebut parameter aktual sedangkan parameter yang ada dalam konteks pendefinisian adalah parameter formal. Formula : // pendefinisian void HitungLuasLingkaran (float *hasil, float jejari) 1 //pemanggilan 2 3 float Luas, radius radius = 9.8; ...... Pendefinisian VS Pemanggilan HitungLuasLingkaran (&Luas, radius); 1. Nama prosedur harus sama persis (Case ...... Sensitive) ...... 2. Parameter output, pendefinisian pakai * printf ("%f\n",Luas); tetapi pemanggilam pakai &. Nama dapat 3. Contoh : int main() 4. { ...... float jejari = 9.0; HitungLuasLingkaran (&hasil, jejari); ...... } berbeda/sama, tetapi tipe harus sama Parameter input dapat sama/beda nama, tetapi tipe harus sama Function Signature harus sama yaitu CACAH parameter, TIPE prameter dan URUTAN parameter harus sama III - 3 d. Jenis Prosedur Dasar 1) Prosedur SET atau UPDATE Adalah prosedur yang digunakan untuk mengubah nilai parameter output menjadi yang diinginkan (suplai oleh parameter input) Contoh : void setA(int *A, int masukan) //IS: A bernilai sembarang, masukan terdefinisi ada isinya //FS: A berisi value sesuai value masukan, dan masukan tetap valuenya { (*A)=masukan; } 2) Prosedur AKUMULASI Adalah prosedur yang digunakan untuk mengakumulasi suatu variable tertentu dengan value tertentu. Contoh: void accuA(int *A, int masukan) //IS: A sebagai param input/output harus terdefinisi dan berisi suatu value tertentu, masukan terdefinisi ada isinya //FS: A ketambahan valuenya dengan value masukan, dan masukan tetap valuenya { (*A) = (*A) + masukan; } 3) Prosedur KOMPUTASI Adalah prosedur yang melakukan komputasi/ proses-proses penghitungan atau proses lain yang diperlukan untuk menemukan hasil yang diinginkan. Hasil akan disimpan dalam parameter output. Contoh: void hitungAverage(float *hasil, float a, float b, float c) //IS: hasil bernilai sembarang, a,b,c terdefinisi ada isinya //FS: hasil berisi rata-rata dari value a,b,c, dan a,b,c tetap valuenya { (*hasil)=(a+b+c)/3; } 4) Prosedur CETAK Adalah prosedur yang melakukan pencetakan ke layer, sesuai parameter input yang diterima. Prosedur ini tidak mempunyai parameter output, karena outputnya langsung dicetak ke monitor (standard output device). Inilah satu-satunya prosedur yang semi- naïve yang dapat diterima. void cetakA(float a) //IS: a terdefinisi ada isinya //FS: value a tercetak ke layar, dan a tetap valuenya { printf(”%f\n”,a); } III - 4 e. Prosedur yang Menghasilkan Efek Netto Prosedur yang direkomendasikan adalah prosedur yang menghasilkan efek netto {nett effect procedure). Prosedur nett effect adalah yang tidak menggunakan standard device untuk input dan outputnya, alias tidak ada printf dan scanf dalam prosedur tersebut. Satu-satunya prosedur yang masih bisa diterima, meskipun menggunakan standard device adalah prosedur CETAK, yaitu yang menggunakan printf untuk mencetak informasi ke layar. f. Parameter Parameter adalah variabel yang digunakan untuk mengirim nilai dari program pemanggil ke prosedur atau sebaliknya. Ada 2 tipe parameter yaitu : 1. Parameter Aktual Adalah parameter yang dipakai ketika melakukan pemanggilan terhadap prosedur. Tambah1 (&C, D) ; Perlu dingat di sini, karena variabel A mendapat tambahan '*', maka didalam pemanggilan tersebut parameter actual harus didahului dengan '&' 2. Parameter Formal Adalah parameter yang dipakai dalam pendefinisian prosedur. Parameter ini sifatnya Optional. Void Tambh1 (int *A, int B) { .......... } Perlu diingat di sini, karena parameter formal A mendapat tambahan '*\ maka didalam prsedur tersebut variabel A harus ditulis seperti ini: ( *A) Berdasarkan maksud penggunaannya, terdapat 3 jenis parameter formal, yaitu : 1. Parameter input adalah parameter yang nilainya berlaku sebagai masukkan untuk prosedur. Penggunaan parameter ini sering disebut sebagai passing parameter by value. Di dalam assignment di body prosedur, parameter ini biasanya di sebelah KANAN 'sama dengan'. Parameter ini harus sudah ada ISInya (sudah jelas) supaya dapat dipakai dalam prosedur. Value parameter input tidak berubah, dari sebelum masuk sampai sesudah keluar dari prosedur. 2. Parameter output adalah parameter yang menampung keluaran yahg dihasilkan prosedur. Parameter ini mengalami perubahan dan efek netto dari prosedur. Di dalam assignment di body prosedur, parameter ini biasanya di sebelah KIRI 'sama dengan'. 3. Parameter input/output adalah parameter yang berfungsi sebagai masukkan sekaligus keluaran bagi prosedur tersebut. Penggunaan parameter ini sering disebut passing parameter by reference. III - 5 g. Pemanggilan Karena prosedur bukan program yang dapat berdiri sendiri, maka prosedur harus dipanggil oleh program lain dengan ketentuan sebagai berikut: 1. Dilakukan dari program lain yang menyatakan prosedur sebagai bagian dari program tersebut. 2. Prosedur diakses dengan memanggil nama prosedur dari program pemanggil. 3. Prototipe prosedur harus dideklarasikan dalam kamus program pemanggil. Hal yang penting dalam pemanggilan prosedur adalah antara parameter formal dan aktual harus ada kesesuaian dalam hal function signature yaitu: 1. Jumlah parameter 2. Urutan parameter 3. Tipe data parameter Contoh : deklarasi prosedur void Tambahl(int *A, int B); definisi prosedur void Tambahl(int *A, int B) { ........ ........ } pemanggilan prosedur Tambahl(&A,B); Keterangan : - Hilangkan keyword 'void' - Hilangkan tipe data di daftar parameter - Pada parameter aktual, variabel input/output yang di passing di depannya diberi tanda '&' - Sesuaikan tipe data antara parameter aktual dam formal h. Variabel Lokal VS Parameter Ada banyak kerancuan yang dialami mahasiswa, yaitu tentang kapan harus menggunakan parameter input dan kapan cukup dengan menggunakan variable local saja untuk kasus-kasus tertentu. Ada kunci yang dapat dipakai untuk memecahkan masalah ini, yaitu dengan pertanyaan: apakah variable tersebut secara natural diperlukan prosedur dari pihak luar prosedur? Jika jawabannya adalah perlu, maka harus dijadikan parameter input dan oleh karenanya harus sudah diset valuenya di luar prosedur. Jika jawabannya tidak perlu, maka harus dijadikan variable local. Ingat, variable local tidak akan berisi apa-apa sampai diinisialisasi, makanya biasanya statemen pertama terhadap variable local setelah deklarasi adalah inisialisasi. III - 6 Contoh 1: void swap(int *a, int *b) { int t-emp; temp=*a? *a=*b; *b=temp'; } Atau Void swap (int *a, int *b, int temp) { Temp=*a; *a=*b; *b=temp; } mana yang benar? Jelaskan jawaban anda. Contoh 2 : void naikGaji (double * Gaji, double kenaikan) { (*Gaji)=(*Gaji)+ kenaikan; } Atau void naikGaji (double *G). { Double kenaikan; (*Gaji)-(*Gaji)+Kenaikan; } mana yang benar ? Jelaskan jawaban anda. i. Pemanggilan Prosedur Oleh Prosedur Lain Prosedur dapat dipanggil darimana saja, dari main () function, dari fungsi lain, atau dari prosedur lain. Berikut diberikan cara memanggil prosedur dari prosedur lain. Dipunyai prosedur akumulasi, seperti berikut: Void akumulasi (double *Hasil, double delta) //IS : Hasil sudah ada isinya, hendak diakumulasikan dengan delta. // delta sudah terdefinisi dan ada isinya. //FS : Hasil akan ketambahan sebesar delta. Delta tetap valuenya. { (*Hasil)=(*Hasil)+delta; } Lalu kita membutuhkan prosedur kenaikanGaji yang mengharuskan terjadinya akumulasi nilai gaji dengan kenaikannya. Hanya saja dalam prosedur kenaikanGaji, diberikan gaji dan persentase kenaikan dalam persen. Misalkan gajinya 5juta, lalu kenaikannya 10 persen, maka gajinya akan berubah menjadi 5.5juta. III - 7 Void kenaikanGaji (double *gaji, double persenkenaikan) //IS : gaji sudah ada isinya, hendak diakumulasikan dengan // persenKenaikan dikalikan gaji. persenKenaikan sudah // terdefinisi dan ada isinya //FS : gaji akan ketambahan sebesar persenKenaikan dikalikan gaji. // PersenKenaikan tetap valuenya. { Double kenaikan; Kenaikan=(persenKenaikan/100.0)*(*gaji); (*gaji)=(*gaji) + kenaikan; } Perhatikan code dalam prosedur kenaikanGaji, di situ terdapat proses yang sama persis dengan akumulasi, yaitu mengakumulasikan gaji dengan kenaikannya. Hal ini dapat dikerjakan dengan memanggil prosedur akumulasi. Prosedur berubah menjadi: Void kenaikanGaji (doble *gaji, double persenKenaikan) //IS : gaji sudah ada isinya, hendak diakumulasikan dengan // persenKenaikan dikalikan gaji. persenKenaikan sudah // terdefinisi dan ada isinya. //FS : gaji akan ketambahan sebesar persenKenaikan dikalikan gaji. // persenKenaikan tetap valuenya. { Double kenaikan; Kenaikan=(persenKenaikan/100.0)*(*gaji); Akumulasi (&(*gaji), kenaikan); //pemanggilan proc akumulasi di sini } III - 8 2. FUNGSI a. Apa itu Fungsi ? Fungsi pada hakekatnya adalah pemetaan dari setiap anggota himpunan yang disebut domain kepada anggota himpunan yang disebut kodomain. Jadi sebuah anggota domain akan dipetakan (oleh fungsi) kepada tepat satu anggota kodomain. Perhatikan gambar di bawah ini : Misalnya y=x2, maka setiap x dari domain integer (misalnya) akan dipetakan tepat satu anggota kodomain y. Contoh, x=2 akan dipetakan kepada y=4, dan x=-3 akan dipetakan y=9. Himpunan domain dan kodomain dapat dari himpunan yang sama atau berbeda. Berikut diberikan contoh, himpunan domain dan kodomain yang berbeda. Misalnya fungsi isGenap yang memetakan setiap integer kepada salah satu anggota boolean, yaitu genap atau bukan genap (ganjil). Perhatikan gambar di bawah ini : Kombinasi anggota himpunan domain juga dapat dipetakan oleh fungsi, misalnya fungsi y=x12+2x2 yang memetakan x1 dan x2 tepat ke sebuah nilai y. Perhatikan gambar di bawah ini : Seperti halnya prosedur, fungsi juga merupakan modul program yang mempunyai tujuan spesifik. Fungsi adalah modul program yang memberikan/mengembalikan (return/anggota kodomain) sebuah nilai dari tipe tertentu (tipe dasar atau tipe bentukan/himpunan kodomain). Sebagaimana halnya dengan prosedur, fungsi diakses dengan memanggil namanya. Selain itu, fungsi juga dapat mengandung daftar parameter formal. III - 9 Parameter pada fungsi selalu merupakan parameter masukan (anggota himpunan domain). Jenis parameter masukan pada fungsi disebabkan oleh kenyataan bahwa parameter pada fungsi merupakan masukan yang digunakan oleh fungsi tersebut untuk menghasilkan nilai. Ilustrasi dibawah ini dapat memberikan gambaran lebih jelas tentang fungsi. Beberapa Input b. Fungsi Satu Output (black box proses) Pendefinisian Fungsi Sebagaimana halnya prosedur, struktur fungsi sama dengan struktur algoritma yang sudah anda kenal. Ada bagian header yang berisi nama fungsi dan spesifikasi fungsi, bagian deklarasi, dan badan fungsi. Setiap fungsi mempunyai nama yang unik serta daftar parameter formal (bila ada). Tipe data hasil return fungsi (disebut return type) int Tambah (int a, int b) Daftar parameter formal Nama fungsi {spesifikasi fungsi, menjelaskan apa yang dilakukan dan yang dikembalikan oleh fungsi. Berupa apa INPUTnya dan apa OUTPUTnya/yang direturnkan} DEKLARASI {semua nama yang dipakai dalam algoritma fungsi di deklarasikan di sini. nama yang didefinisikan hanya di kenal dan di pakai di dalam fungsi ini saja} DESKRIPSI : {badan fungsi, berisi instruksi-instruksi untuk menghasilkan nilai yang akan di kembalikan oleh fungsi } return hasil {pengembalian nilai yang dihasilkan dari fungsi} : Alur logika Fungsi HARUS berakhir pada SATU buah return. Begitu return dipanggil, maka fungsi berhenti, alur logika akan segera keluar fungsi. Contoh : int tambah (int a, int b) { int hasil; hasil = a + b; return hasil; } Harus sesuai tipenya III - 10 c. Pemanggilan Fungsi Fungsi diakses dengan cara memanggil namanya dari program pemanggil, diikuti dengan daftar parameter aktual (bila ada). Karena fungsi menghasilkan nilai/value, maka value tersebut dapat diperlukan seperti value apa adanya. Misalkan disimpan dalam sebuah variable dengan statemen assignment, dicetak ke layar dengan statemen printf, dijadikan operand dalam kondisi, dioperasikan sesuai tipe pengembaliannya. Jadi, statemen pemanggilan fungsi TIDAK BISA berdiri sendiri seperti procedure, melainkan harus dalam suatu statemen tertentu, karena dia sesungguhnya value. Misalnya : 1. variable NamaFungsi(daftar parameter aktual) ; contoh: x=Tambah(a,b); 2. write(NamaFungsi(daftar parameter aktual)); contoh: printf(”%d\n”,Tambah(a,b)); 3. if NamaFungsi(daftar parameter aktual) < 10 then . . . contoh: if(Tambah(a,b)<10) {....} 4. z 2 * NamaFungsi(daftar parameter aktual) – x + y ; contoh: z=2*Tambah(a,b)-x+y; Saat pemanggilan fungsi, harus memperhatikan header fungsi (atau spesifikasi fungsi) saat pendefinisian. Contoh : int tambah (int a, int b); int main () { ..... ..... z = tambah (a,b) ..... ..... } //header pendefinisian Function Signature : 1. CACAH param 2. TIPE param 3. URUTAN param HARUS SAMA d. Perbedaan FUNGSI VS PROSEDUR Pertanyaan yang seringkali muncul dalam pemrograman adalah : apakah sebuah modul akan dibuat sebagai prosedur atau fungsi ? Jawaban untuk pertanyaan ini sebenarnya tidak sulit. Fungsi digunakan apabila modul program mengembalikan sebuah nilai sementara prosedur digunakan bila modul menghasilkan efek netto dari (satu atau) sekumpulan aksi. Namun dalam praktiknya, seringkali perbedaan antara keduanya tidak jelas, karena sebuah prosedur selalu dapat ditulis sebagai fungsi, demikian pula sebaliknya. (Catatan : nama fungsi dimulai dengan kata kerja, nama procedure dimulai dengan katakerja yang dibendakan, dalam bahasa Indonesia dengan imbuhan pe-an. Contoh fungsi tambah (a,b), setara dengan procedure penambahan (c,a,b).) III - 11 Prosedur Fungsi dengan Prosedur sangat jelas, berikut diberikan perbedaan keduanya maksud untuk lebih memahami fungsi dan prosedur secara benar. FUNGSI Pendefinisian: tanpa void, tetapi dengan tipe pengembalian Pendefinisian: Alur logika dalam body fungsi HARUS berakhir pada SATU return PROSEDUR Pendefinisian: dengan void Pemanggilan: menempel statemen Pemanggilan: berdiri sendiri Tidak ada return. Paling tidak, tidak ada return yang dimaksud untuk mengembalikan value ke luar. harus pada by design:parameter input saja Diperlukan sebagai value harus by design: parameter input dan output Diperlakukan sebagai statemen. CONTOH Fungsi : int tambah(int a, int b) Proc: void penambahan (int*hasil, int a, int b) Fungsi: Int tambah(int a, int b) ( return a+b; ) Proc: Void penambahan(int *hasil, int a, int b) ( (*hasil)=a+b; ) Fungsi: z=tambah(a,b)); Proc: Penambahan(&hasil, a,b); Fungsi : Printf(“%d\n”,tambah(a,b)); Proc: Penambahan(&hasil,a,b); e. Pemanggilan Fungsi Oleh Fungsi Lain (Nested Function) Sebuah fungsi dapat memanggil fungsi lain di dalam memproses parameternya untuk mewujudkan tujuannya. Misalkan kita punya fungsi kuadrat, yaitu fungsi yang mengkuadratkan bilangan real. Kita juga sudah mempunyai fungsi tambah untuk bilangan real. Kita diminta membuat fungsi lain, yaitu fungsi menghitung panjang sisi miring suatu segitiga siku-siku. Perhatikan gambar dibawah ini : Sisi miring = ? a b Rumus perhitungan panjang sisi miring segitiga siku-siku adalah dengan rumus pythagoras, yaitu : sisi miring = akar kuadrat (jumlah kuadrat sisi-sisi yang lain) Untuk pastinya, kita buat lagi fungsi kuadrat dan tambah seperti pada contoh di bawah ini : double tambah (double a, double b) //I: a, b terdefinisi //O: mereturnkan penjumlahan a dan b { return a+b; } III - 12 double kuadrat (double x) //I: x terdefinisi //O: mereturnkan kuadrat dari x { return x*x; } Lalu kita buat fungsi menghitung panjang sisi segitiga siku-siku, seperti berikut: double hitungSisiPanjangS3 (double sisi1,double sisi2) //I: sisi1 dan sisi2 terdefinisi //O: mereturnkan panjang sisi miring yang panjang sisisisi lainnya adalah sisi1dan sisi2. //P: fungsi sqrt diambil dari pustaka fungsi dari math.h, artinya akar kuadrat yang yang { return sqrt (tambah (kuadrat (sisi1), kuadrat (sisi2)); } III - 13 III. GUIDED PROSEDUR 1. Program Menambah Angka #include<stdio.h> #include<conio.h> //deklarasi prosedur void Tambah(int *hasil, int bil1, int bil2); //main program int main() { int result, bil1, bi12; printf (“masukan bilangan pertama :”); scanf(“%d”,&bil1); printf (“masukan bilangan kedua :”); scanf(“%d”,&bil2); Tambah (&result,bil1,bi12);//contoh pemanggilan prosedur printf (“Hasil penambahan = %d\n”,result); return 0; } // pendefinisian prosedur void Tambah(int *hasil, int bil1, int bil2) { *hasil=bil1+bil2; } 2. Program Menghitung Luas Lingkaran #include<stdio.h> #include<conio.h> //deklarasi prosedur void HitungLuasLingkaran(float *hasil, float rujiruji); //main program int main() { float L,rujiruji; printf(“masukkan ruji-ruji :”); scanf(“%d”,&rujiruji); HitungLuasLingkaran(&L,rujiruji);//contoh pemanggilan prosedur printf(”Luas Lingkaran : %f\n”,L); return 0; } // pendefinisian prosedur void HitungLuasLingkaran(float *hasil, float rujiruji) { *hasil=3.14 * rujiruji * rujiruji; } III - 14 IV. UNGUIDED PROSEDUR Buatlah sebuah program dengan prosedur untuk mengkonversi nilai angka menjadi nilai dalam huruf. Ketentuan: Nilai di atas 85 mendapat “A” Nilai 85 ke bawah mendapat “B” Nilai 70 ke bawah mendapat “C” Nilai 60 ke bawah mendapat “D” Nilai 50 ke bawah mendapat “E” Jika nilai diatas 100 atau negative, maka ditampilkan pesan kesalahan. Pada main program, setelah nilai huruf keluar, ditampilkan pesan “Apakah akan mengkonversi nilai lagi? (Y/N)” Jika diinputkan “Y” maka otomatis akan mengulang proses untuk konversi nilai lagi. V. GUIDED FUNGSI 1. Program Menghitung Nilai pada Operasi Pangkat #include <iostream.h> int square( int ); // Function prototype int main() { for ( int x = 1; x <= 10; x++ ) cout << square( x ) << " "; cout << endl; return 0; } // Function definition int square( int y ) { return y* y; } 2. Program Menentukan Nilai Maksimal #include <iostream.h> int maximum( int, int, int ); // function prototype int main() { int a, b, c; cout << "Enter three integers: "; cin >> a >> b >> c; // a, b and c below are arguments to the maximum function call cout << "Maximum is: " << maximum( a, b, c ) << endl; return 0; } // Function maximum definition x, y and z below are parameters to // the maximum function definition int maximum( int x, int y, int z ) { int max = x; if ( y > max ) max = y; if ( z > max ) max = z; return max III - 15 3. Program Kalkulator Sederhana #include <stdio.h> #include <conio.h> int Tambah (int a,int b) ; /* Input : nilai a,b terdefinisi tidak kosong Output: fungsi akan mengembalikan hasil penjumlahan dari a dan b */ int Kurang (int a,int b) ; /* Input : nilai a,b terdefinisi tidak kosong Output: fungsi akan mengembalikan hasil pengurangan dari a dan b */ int Tambah (int a,int b) { int hasil; hasil = a + b; return hasil; } int Kurang(int a,int b) { return a – b ; } void main( ) { int nilai1,nilai2; int pilih; do { system (”CLS”); printf (”MENU\n\n”); printf (”1.Penjumlahan\n”); printf (”2.Pengurangan\n”); printf (”0.EXIT\n”); printf (”Input Pilihan : ”); scanf(”%d”,&pilih); switch (pilih) { case 1 : printf (“\nInput Bilangan 1 : ”);scanf(“%d”,&nilai1); printf (“\nInput Bilangan 2 : ”);scanf(“%d”,&nilai2); printf (”Hasilnya : %d ”,Tambah(nilai1,nilai2)); break; case 2 : printf (“\nInput Bilangan 1 : ”);scanf(“%d”,&nilai1); printf (“\nInput Bilangan 2 : ”);scanf(“%d”,&nilai2); printf (”\nHasilnya : %d ”,Kurang(nilai1,nilai2)); break; default : printf (”Input yang anda masukkan salah\n”); break; } getch (); } while(pilih!=0); } III - 16 VI. UNGUIDED FUNGSI Buatlah sebuah program menu dengan memanggil fungsi-fungsi yang digunakan untuk menghitungnya. Ketentuan Menunya adalah sbb: MENU PERSEGI PANJANG 1. Menu menghitung luas persegi panjang 2. Menu menghitung keliling persegi panjang 3. Menu menghitung panjang diagonal persegi panjang 4. Keluar Jika user menginputkan nomor menu 4, baru keluar program, tetapi jika user menginputkan 1/2/3 maka akan terpanggil menu yang terpilih (gunakan switch-case) III - 17