Pengiriman data pada Fungsi

2008 | Direktorat Pembinaan SMK 265 include conio.h include iostream using namespace std; Prototipe Fungsi void TampilNilaiint; int main { cout Saya sedang memasukan 5 ke fungsi TampilNilai.\n ; TampilNilai 5 ; Call TampilNilai dengan argument 5 cout Sekarang saya sudah kembali ke program utama.\n ; getch; return ; } void TampilNilaiint num { cout Besar nilainya adalah: num endl; } Keluaran programnya adalah sebagai berikut: Saya sedang memasukan 5 ke fungsi TampilNilai. Besar nilainya adalah: 5 Sekarang saya sudah kembali ke program utama. Dalam prototype fungsi tersebut diatas yang perlu diperhatikan adalah pada TampilNilai: void TampilNilaiint; function prototype Dalam fungsi tersebut kita tidak perlu memasukan daftar parameter yang merupakan variabel dalam tanda kurung, dan hanya dengan memasukan type data yang diperlukan saja. Fungsi ini dapat prototype ini juga dapat ditulis sebagai berikut: void TampilNilaiint num; Fungsi tersebut diatas sangat mudah digunakan walaupun, compiler mengabaikan nama variabel pada parameter fungsi prototype tersebut. Dalam program utama, fungsi TampiNilai disebut dengan argumen 5, dimana hal tersebut berada dalam tanda kurung. Nomor 5 266 Direktorat Pembinaan SMK | 2008 dimasukan kedalam variabel num, yang mana num merupakan parameter TampilNilai. Untuk lebih jelasnya mengenai hal tersebut, perhatikan gambar dibawah ini: Gambar 7.5. Fungsi prototipe Dengan melihat gambar tersebut, apapun argumen yang tertulis dalam tanda kurung pada panggilan fungsi akan dicopy kedalam variable parameter fungsi. Pada dasarnya, parameter adalah variabel yang diinisialisasi menjadi nilai sesuai argument yang berhubungan. Program 7.7 dibawah menunjukkan bahwa fungsi \tampilNilai dapat dipanggil beberapa kali dengan alasan sesuai masing- masing kegunaannya. Program 7.7. include conio.h include iostream using namespace std; Prototipe Fungsi void TampilNilaiint; int main { cout Saya sedang mengisikan beberapa nilai pada TampilNilai.\n ; TampilNilai 5 ; Panggil TampilNilai dengan argument 5 TampilNilai 10 ; Panggil TampilNilai dengan argument 10 TampilNilai 2 ; Panggil TampilNilai dengan argument 2 TampilNilai 16 ; Panggil TampilNilai dengan argument 16 cout sekarang saya kembali.\n ; TampilNilai 5 ; void TampilNilaiint num { cout Besar nilainya adalah: num endl; } 2008 | Direktorat Pembinaan SMK 267 getch; return ; } void TampilNilaiint num { cout Nilainya adalah num endl; } Keluaran programnya Adalah sebagai berikut; Saya sedang mengisikan beberapa nilai pada TampilNilai. Nilainya adalah 5 Nilainya adalah 10 Nilainya adalah 2 Nilainya adalah 16 sekarang saya kembali. Setiap kali sebuah fungsi dalam program diatas tersebut dipanggil, variabel num akan mengambil nilai yang berbeda. Setiap ekspresi fungsi, nilai akan diberikan kedalam num yang digunakan sebagai argumen. Sebagai contoh, panggilan fungsi berikut digunakan untuk memasukan nilai 8 kedalam variabel num: TampilNilai3 + 5; Jika kita memasukan jenis argumen yang tidak sama dengan jenis parameter, argumen tersebut akan digunakan secara otomatis. Misalnya, jika TampilNilai dari sebuah parameter adalah bertipe integer, argumen pada pemanggilan fungsi akan dipotong, sehingga nilai 4 akan dimasukan ke varibel num: TampilNilai 4.7; Seringkali hal tersebut berguna untuk digunakan oleh beberapa argumen dalam sebuah fungsi. Program dibawah ini menunjukkan sebuah fungsi dari fungsi yang memiliki tiga buah parameter. Program 7.8. include conio.h include iostream using namespace std; 268 Direktorat Pembinaan SMK | 2008 Prototipe Fungsi void Tambahanint, int, int; int main { int value1, value2, value3; cout Masukan Tiga bilangan Integers dan saya akan menampilkan ; cout Penjumlahan: ; cin value1 value2 value3; Tambahannilai1, nilai2, nilai3; Call Tambahan dengan 3 arguments. getch; return ; } void Tambahanint num1, int num2, int num3 { cout num1 + num2 + num3 endl; } Keluaran Programnya adalah sebagai berikut; Masukan Tiga bilangan Integers dan saya akan menampilkan Penjumlahan: 4 5 6 15 Dalam header fungsi Tambahan, daftar parameter berisi tiga definisi variabel yang dipisahkan oleh koma adalah sebagai berikut: void Tambahanint num1, int num2, int num3 Hal yang perlu diperhatikan pada setiap variabel yaitu harus memiliki tipe data yang namanya sebelum telah tertulis. Error pada compiler akan terjadi jika daftar parameter yang dinyatakan sebagai int num1, num2, num3 ternyata bukan int num1, int num2, int num3. Dalam pemanggilan fungsi, sebuah variabel nilai1, nilai2 dan nilai 3 dapat digunakan sebagai argument: Tambahannilai1, nilai2, nilai3; Potongan program diatas jika diperhatikan ada perbedaan antara header fungsi dan panggilan fungsi saat melewati variabel sebagai argumen menjadi parameter. Dalam panggilan fungsi, kita tidak dapat menyertakan variabel jenis data didalam tanda kurung. Perhatikan potongan program dibawah ini: 2008 | Direktorat Pembinaan SMK 269 Tambahanint nilai1, int nilai2, int nilai3; Ketika sebuah fungsi dengan beberapa parameter disebut, argumen akan dimasukan kedalam parameter yang di pesan. Hal tersebut dapat digambarkan seperti gambar dibawah ini. Gambar 7.6. Fungsi dengan beberapa Parameter Fungsi dibawah ini akan menyebabkan nilai 5 dimasukan kedalam parameter num1, nilai 10 dimasukan ke dalam num2, dan 15 dimasukan kedalam num3. Untuk lebih jelasnya perhatikan instruksi dibawah ini: showSum5, 10, 15; meskipun pemanggilan fungsi berikut ini akan menyebabkan 15 yang dimasukan kedalam parameter num1, 5 dimasukan ke dalam num2, dan nilai 10 akan dimasukan kedalam num3: Tambahan15, 5, 10; 7.6. Passing Data by Value Parameter khusus merupakan variabel tujuan yang ditentukan didalam tanda kurung dari definisi fungsi. Tujuan parameter tersebut adalah untuk menyampaikan informasi yng dilakukan oleh argumen dan tercantum dalam tanda kurung pada panggilan fungsi. Secara umum, ketika informasi disampaikan kedalam fungsi disebut Tambahannilai1, nilai2, nilai3; void Tambahanint num1, int num2, int num3 { cout num1 + num2 + num3 endl; } 270 Direktorat Pembinaan SMK | 2008 passed by value. Hal ini berarti parameter menerima copy dari nilai yang disampaikan kepadanya. Jika sebuah parameter nilai berubah didalam fungsi maka hal tersebut tidak mempengaruhi pada argumen yang asli. Perhatikan program dibawah ini yang menunjukkan konsep mengenai passed by value. Program 7.9. include iostream using namespace std; void changeThemint, double; int main { int whole = 12 ; double real = 3.5 ; cout dalam nilai main adaIah whole endl; cout dan nilai real adalah real endl endl; changeThemwhole, real; memanggil changeThem dengan 2 arguments cout sekarang kembali dalam main lagi, nilainya adalah ; cout semuanya masih whole endl; cout dan nilai real adalah masih real endl; return ; } void changeThemint i, double d { i = 100 ; d = 27.5 ; cout dalam fungsi changeThem nilainya diubah menjadi ; cout i endl; cout dan nilainya diubah menjadi d endl endl; } Pada program diatas walaupun parameter i dan f berubah dalam fungsi changeThem, kenyataannya seluruh argumen tidak diubah. Parameter i dan f hanya berisi salinan keseluruhan dan nyata. fungsi ChangeThem tidak memiliki akses ke argumen sebelumnya original. Gambar dibawah menunjukan bahwa variabel 2008 | Direktorat Pembinaan SMK 271 parameter disimpan dalam lokasi memori yang terpisah dari argumen yang asli. Perhatikan gambar berikut ini: Argumen Asli 12 Fungsi Parameter 12 Gambar 7.7. Variabel parameter yang disimpan dalam memori

7.7. Pernyataan Kembali

Bila pernyataan terakhir dalam fungsi telah selesai eksekusi, fungsi akan diakhiri. Program akan kembali ke modul yang dipanggil dan meneruskan eksekusi dari titik dimana panggilan fungsi dilakukan sebelumnya. Hal sangat dimungkinkan, meskipun salah satu fungsi memaksa untuk kembali ketempat dimana pernyataan terakhir dari program sebelumnya yang dieksekusi. Ketika menemui pernyataan kembali, fungsi dengan segera diakhiri dan menuju program semula. Hal ini seperti ditunjukkan dalam Program dibawah. fungsi bagi digunakan untuk menunjukkan hasil pembagian dari arg1 dibagi arg2. Jika arg2 diatur ke nol, fungsi akan kembali tanpa melakukan pembagian, karena operasi pembagian tidak mungkin dilakukan. Program 7.10. include iostream using namespace std; void dividedouble, double; int main { double num1, num2; cout masukan dua angka yang akan dibagi \n ; cout angka yang kedua: ; 272 Direktorat Pembinaan SMK | 2008 cin num1 num2; dividenum1, num2; return ; } void dividedouble arg1, double arg2 { if arg2 == 0.0 { cout maaf, tidak bisa dibagi dengan bilangan nol.\n ; return; } cout jawabanya adalah: arg1 arg2 endl; } 7.8. Mengembalikan Nilai dari Fungsi Dari program diatas kita telah melihat bahwa informasi dapat dilewatkan menjadi salah satu fungsi oleh sebuah parameter. Informasi juga dapat dikembalikan dari fungsi, kembali menuju program yang memanggilnya. Walaupun beberapa argumen dapat dimasukan menjadi salah satu fungsi, hanya ada satu nilai yang dapat dikembalikannya. Sesuatu dari fungsi memiliki beberapa saluran komunikasi untuk menerima data parameter, tetapi hanya satu saluran untuk mengirim data return value. Hal tersebut dapat digambarkan seperti dibawah ini: Argumen Fungsi Argumen Nilai Kembali Argumen Argumen Gambar 7.8. Fungsi dengan saluran beberapa data parameter Dalam rangka untuk mengembalikan nilai-nilai dari beberapa fungsi, mereka harus dibuat paket sehingga mereka dianggap sebagai satu nilai. Tipe data nilai kembali mengawali fungsi dengan nama header fungsi dan prototipe. Berikut ini menyatakan prototipe fungsi dengan nama persegi yang menerima sebuah