1 / 50

Fungsi dalam C++

Fungsi dalam C++. Lingkup Variabel Kelas Penyimpanan Rekursi. Fungsi dalam C++. Pada bahasa pemrograman lain: fungsi = sub-program atau prosedur Fungsi memiliki tipe. Jika fungsi tidak harus memiliki nilai balikan, gunakan tipe void. Fungsi dalam C++ (lanj.).

craig
Télécharger la présentation

Fungsi dalam C++

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Fungsi dalam C++ Lingkup Variabel Kelas Penyimpanan Rekursi

  2. Fungsi dalam C++ • Pada bahasa pemrograman lain: fungsi = sub-program atau prosedur • Fungsi memiliki tipe. • Jika fungsi tidak harus memiliki nilai balikan, gunakan tipe void.

  3. Fungsi dalam C++ (lanj.) • Fungsi dalam C++ memiliki runtun parameter. • Parameter: sesuatu yang kita berikan ke fungsi untuk dikerjakan. • Tiap parameter memiliki tipe. • Bisa juga memiliki nol buah parameter.

  4. Contoh Fungsi Tipe balikan Parameter int sum2angka(int a, int b) { return(a+b); } Nama fungsi Tubuh/ isi fungsi

  5. Menggunakan fungsi: Fungsi Library Math • C++ menyediakan library untuk fungsi matematika. • Kita harus tahu cara memanggil masing-masing fungsi sebelum menggunakannya. • Kita harus tahu balikan yang diberikan! • Kita tidak perlu tahu cara kerjanya!

  6. double sqrt(double) • Ketika memanggil fungsi sqrt, kita harus memasukkan data bertipe double. • Fungsi sqrt memberikan balikan bertipe double. • Contoh x = sqrt(y); x = sqrt(100);

  7. x = sqrt(y); • Sesuatu yang kita masukkan ke fungsi disebut dengan argumen, dalam hal ini: y • Fungsi dalam C++ tidak dapat mengubah nilai argumen. • Jika sebelum sqrtdipanggil, y bernilai 100, maka setelah sqrtdipanggil, y juga bernilai 100.

  8. Data berisi akar kuadrat int i; for (i=1;i<10;i++) cout << sqrt(i) << “\n”; • Parameter sqrt()bukankah bertipe double? • C++ memiliki konversi otomatis untuk fungsi ini.

  9. Memberitahu kompiler tentang sqrt() • Bagaimana kompiler tahu tentang fungsi sqrt ? • Kita harus memberitahunya: #include <math.h>

  10. Fungsi Library Matematika Lainnya ceil floor cos sin tan exp log log10 pow fabs fmod

  11. Membuat fungsi • Kita harus menentukan bentuk dari fungsi tersebut: • Tipe balikan • Nama • Tipe parameter (jumlah parameter) • Kita harus menulis tubuh/ isi fungsi (code sesungguhnya)

  12. Parameter Fungsi • Parameter merupakan variabel lokal dalam tubuh fungsi. • Ketika dipanggil, fungsi harus memiliki nilai yang akan diproses. • Fungsi memperoleh salinan dari nilai yang dimasukkan (nanti kita akan lihat cara memasukkan nilai ke variabel)

  13. Contoh Fungsi int sum2angka(int angka1, int angka2 ) { int sum; sum = angka1 + angka2; // untuk me-reset nilai angka1 = 0; angka2 = 0; return(sum); }

  14. Pengujian sum2angka int main(void) { int y,a,b; cout << "Masukkan 2 bilangan\n"; cin >> a >> b; y = sum2angka(a,b); cout << "a berisi " << a << endl; cout << "b berisi " << b << endl; cout << "y berisi " << y << endl; return(0); }

  15. Apa yang terjadi? int sum2angka(int a, int b) { a=a+b; return(a); } … int a,b,y; … y = sum2angka(a,b);

  16. Variabel Lokal • Parameter dan variabel yang dideklarasikan di dalam fungsi bersifat lokal. • Keduanya hanya berlaku di dalam tubuh fungsi. • Ketika fungsi memproses balikan, variabel tidak lagi ada! • Tidak mengapa karena tidak diperlukan lagi

  17. Variabel Blok • Kita juga dapat mendeklarasikan variabel yang muncul hanya di dalam tubuh suatu blok: { int foo; … … }

  18. Variabel Global • Kita dapat mendeklarasikan variabel diluar definisi fungsi – variabel ini bersifat global. • Sembarang fungsi dapat mengakses/ mengubah variabel global.

  19. Lingkup • Lingkup variabel adalah sifat keberadaan variabel dalam program. • Variabel global memiliki lingkup global (unlimited). • Lingkup variabel lokal terbatas pada fungsi yang mendeklarasikan variabel tersebut. • Lingkup variabel blok terbatas pada blok yang mendeklarasikan variabel tersebut.

  20. Catatan:Lingkup Global vs. Lingkup File • Variabel yang dideklarasikan diluar fungsi dapat diakses siapa saja, namun hanya untuk file tertentu. • Lingkup file disebut juga dengan lingkup global.

  21. Lingkup Blok int main(void) { int y; { int a = y; cout << a << endl; } cout << a << endl; } Error – a tidak dikenali diluar block!

  22. Nesting • Dalam C++: • Tidak ada nesting (persarangan) untuk fungsi • Kita tidak perlu tahu siapa pemanggil fungsi hanya untuk mengetahui lingkup variabelnya. • Tersedia nesting untuk lingkup variabel dalam blok

  23. Blok bersarang void foo(void) { for (int j=0;j<10;j++) { int k = j*10; cout << j << “,” << k << endl; { int m = j+k; cout << m << “,” << j << endl; } } } j k m

  24. Kelas Penyimpanan • Tiap variabel memiliki kelas penyimpanan. • Untuk menentukan periode lamanya variabel berada dalam memori. • Beberapa variabel dibuat hanya sekali (memori diatur untuk menyimpan nilai variabel) • Variabel global dibuat hanya sekali. • Beberapa variabel lainnya dibuat berulang-ulang. • Variabel lokal dibuat berulang-ulang tiap kali suatu fungsi dipanggil.

  25. Kelas Penyimpanan • auto – dibuat tiap kali suatu blok diproses. • register – sama seperti auto, namun kompiler diberitahu untuk mengerjakannya dengan segera. • static – dibuat hanya sekali, walaupun sifatnya lokal. • extern – variabel global yang dideklarasikan di tempat lain.

  26. Menyebutkan Kelas Penyimpanan auto int j; register int i_dengan_segera; static char ingatlah_aku; extern double a_global; C++ Spring 2000 Functions

  27. Penggunaan Praktis Kelas Penyimpanan • Variabel lokal, umumnya berbentuk auto • Variabel global, umumnya berbentuk static • Mendeklarasikan variabel lokal sebagai static artinya nilai terakhir dari variabel akan selalu diingat (tidak dihapus dan dibuat ulang tiap kali lingkup diproses)

  28. Contoh static int panggil_hitung(void) { static int hitung = 0; hitung++; return(hitung); } … cout << panggil_hitung() << endl; cout << panggil_hitung() << endl; cout << panggil_hitung() << endl;

  29. Lingkup Fungsi • Dalam C++, sangat diperhatikan lingkup dari suatu pengenal (nama) • Dapat berupa fungsi atau variabel (atau kelas) • Nama fungsi memiliki lingkup file • Semua yang mengikuti definisi fungsi pada file yang sama dapat menggunakan fungsi. • Kadangkala hal ini tidak tepat • Kita ingin memanggil fungsi di bagian atas dari file dan mendefinisikannya di bagian akhir file.

  30. Prototip Fungsi • Prototip fungsi dapat digunakan untuk memberitahu kompiler bentuk dari fungsi. • Sehingga dapat diproses meskipun kompiler belum memeriksa definisi fungsi tersebut. • Prototip fungsi menentukan nama fungsi, tipe balikan, dan tipe parameter.

  31. Contoh prototip double sqrt(double); int sum2angka(int , int ); int hitung(void);

  32. Menggunakan prototip int hitung(void); int main(void) { cout << hitung() << endl; cout << hitung() << endl; cout << hitung() << endl; } int hitung(void) { static int hitung = 0; hitung++; return(hitung); }

  33. Fungsi yang saling memanggil foo1 … foo2() … foo2 … foo1() …

  34. Fungsi Ganda char *ayam(int generasi) { if (generasi == 0) return(“Ayam!"); else return(telur(generasi-1)); } • char *telur(int generasi ) { • if (generasi == 0) • return(“Telur!"); • else • return(ayam(generasi-1)); • }

  35. Telur vs Ayam char *telur(int); char *ayam(int); int main(void) { int angkamulai; cout <<“Memulai kelompok ayam mu”<< endl; cin >> angkamulai; cout <<“Ayam mu diawali dengan " << ayam(angkamulai) << endl; return(0); }

  36. Rekursi • Fungsi yang dapat memanggil dirinya sendiri disebut dengan rekursi. • Rekursi sangat berguna – kadangkala untuk mengekspresikan komputasi rekursif kompleks.

  37. Ayam Rekursif char *ayam_atau_telur(int gen) { if (gen == 0) return(“Ayam!"); else if (gen == 1) return(“Telur!”); else return(ayam_atau_telur(gen-1)); }

  38. Contoh lainnya - Perhitungan Faktorial int faktorial(int x) { if (x == 1) return(1); else return(x * faktorial(x-1)); }

  39. Mendesain Fungsi Rekursif • Definisikan “proses dasar” • Situasi ketika fungsi tidak memanggil dirinya sendiri. • Definisikan “langkah rekursif” • Menghitung nilai balikan bantuan dari fungsi tersebut.

  40. Proses Dasar Rekursi • Proses dasar berkaitan dengan situasi yang kita dapat ketahui jawabannya (fungsi memberikan nilai balikan dengan cepat) atau dapat dengan mudah menghitung jawabannya. • Jika proses dasar tidak dimiliki, jangan gunakan rekursi! (dan mungkin masalah yang ingin diselesaikan belum dipahami)

  41. Langkah Rekursi • Gunakan pemanggilan rekursi untuk menyelesaikan sub-masalah. • Parameter harus berbeda (atau pemanggilan rekursi tidak memberikan solusi yang baik) • Kita biasanya harus melakukan sesuatu selain melakukan pemanggilan rekursi.

  42. n n Rekursi: Topik Tes yang Menarik • Tuliskan fungsi rekursif C++ yang dapat menghitung area persegi nxn. Proses dasar: n=1 area=1 Langkah rekursif: area = n+n-1+area(n-1)

  43. Fungsi Area Rekursif int area(int n) { if (n == 1) return(1); else return(n + n - 1 + area(n-1)); }

  44. Latihan Rekursif • Tuliskan suatu fungsi yang dapat mencetak segitiga: segitiga(4); segitiga(5); * * *** *** ***** ***** ******* ******* *********

  45. Pemanggilan berdasar nilai vs. Pemanggilan berdasar referensi • Kita telah mempelajari fungsi yang memiliki salinan dari pemanggil yang memasukinya. • Ini merupakan pemanggilan berdasar nilai, karena nilainya yang dimasukkan (nilai dari variabel) • Kita juga dapat mendefinisikan fungsi yang melewatkan referensi ke variabel. • Ini disebut pemanggilan berdasar referensi, fungsi dapat mengubah variabel pemanggil secara langsung.

  46. Referensi • Variabel referensi adalah nama lain dari variabel. Suatu jalan pintas. • Variabel referensi harus diinisialisasikan untuk merujuk variabel lainnya. • Ketika referensi diinisialisasi, kita dapat memperlakukannya seperti variabel lainnya.

  47. Deklarasi Variabel Referensi • Untuk mendeklarasikan variabel referensi, awali nama variabel dengan “&” int &foo; double &blah; char &c;

  48. Contoh Variabel Referensi int hitung; int &sesuatu = hitung; // sesuatu sama dengan variabel hitung hitung = 1; cout <<“sesuatu adalah “<<sesuatu<< endl; sesuatu++; cout << “hitung adalah “ <<hitung<< endl;

  49. Parameter Referensi • Kita dapat mendeklarasikan parameter referensi. void tambah10(int &x) { x = x+10; } … tambah10(hitung); Parameter merupakan referensi

  50. Contoh berguna dari Referensi void tukar(int &x, int &y) { int sementara; sementara = x; x = y; y = sementara; }

More Related