pg78 dwi asyiknya belajar struktur data di planet c++

12

Click here to load reader

Upload: api-3815627

Post on 07-Jun-2015

846 views

Category:

Documents


20 download

TRANSCRIPT

Page 1: PG78 Dwi Asyiknya Belajar Struktur Data Di Planet C++

Hak Cipta Terpelihara

© Hak Cipta ada pada Penulis/ Pengarang, Penerbit, atau Sumber Online.

LISENSI PENGGUNAAN: Dokumen ini boleh dikutip, dimodifikasi, ataudisebarkan luaskan secara bebas tanpa menghilangkan identitas pemilik hakcipta. Pustaka Gratis 78 semata-mata hanya sebagai perpustakaan digitalpenyedia ilmu pengetahuan yang memiliki koleksi dokumen yang pada dasarnyabersumber pada publikasi online gratis atau dokumentasi yang tidakdiperdagangkan lagi. Jika buku ini masih diperdagangkan, kami tetapmenyarankan Anda untuk membeli versi cetaknya agar dunia perbukuan diIndonesia terus maju dan berkembang dengan pesat.

Semoga semua bahan bacaan koleksi Pustaka Gratis 78 ini bermanfaat bagimasyarakat luas di Indonesia dan luar negeri.

SUMBER ILMU PENGETAHUAN TANPA BATAS

www.pustaka78.com

E-Book yang Sedang Anda Baca Ini Berasal dari:

Inilah situs yang selalu dicari. Akan menjadi sumber download buku digitalterbesar di Indonesia. Menyediakan ribuan ebook, audio, movie, foto, dan

software bermutu dalam berbagai kategori. Dijamin dapat didownloadGRATIS 100%. Kunjungi sekarang juga www.pustaka78.com

Page 2: PG78 Dwi Asyiknya Belajar Struktur Data Di Planet C++
Page 3: PG78 Dwi Asyiknya Belajar Struktur Data Di Planet C++

97

9FUNGSI

9.1 Fungsi

Apabila program yang Anda buat sudah terlalu panjang, Anda akan kesulitan membaca dan mengerti jalannya program tersebut. Untuk itu ada baiknya Anda memecahnya menjadi beberapa bagian (modul) yang tentunya akan lebih memudahkan Anda untuk mencari kesalahan program dan memperbaikinya serta membuat dokumentasinya. Untuk membuat modul, C++ menyediakan fungsi.

Fungsi berguna untuk mengumpulkan statement yang dapat dijalankan menjadi satu dalam suatu blok dan menjalankannya kembali hanya dengan menuliskan nama fungsi yang menampungnya.

Selain itu, fungsi juga banyak dipakai untuk menampung baris-baris perintah yang sering dipakai dalam sebuah program.

Deklarasi fungsi dapat dilakukan dengan dua cara, yaitu:

Header fungsi tanpa parameter.

Header fungsi dengan parameter.

Page 4: PG78 Dwi Asyiknya Belajar Struktur Data Di Planet C++

98

9.1.1 Header Fungsi Tanpa Parameter

Bentuk umum:

tipeData namaFungsi()

Contoh:

int JumlahIsi() double Random() char* Nama() void Clear()

Penulisan header fungsi tanpa parameter diawali dengan tipe data dan diikuti dengan nama fungsi, kurung buka, dan kurung tutup (‘( )’). Jika fungsi tidak mengembalikan nilai, tipe data yang digunakan adalah void.

Berikut ini digambarkan struktur blok fungsi tanpa parameter.

Gambar 9.1 Struktur blok fungsi tanpa parameter

Contoh Soal:

prg0901.cpp

1 #include <iostream> 2 using namespace std;34 int x;5 int y;6

Output:x = 1 y = 2 x+y = 3 xy = 2

Page 5: PG78 Dwi Asyiknya Belajar Struktur Data Di Planet C++

99

7 int Tambah()8 {9 return x + y;10 };1112 int Kali()13 {14 return x * y;15 };1617 int main()18 {19 cout << "x = ";20 cin >> x;21 cout << "y = ";22 cin >> y;2324 cout << "x+y = " << Tambah() << endl;25 cout << "xy = " << Kali() << endl;2627 return 0;28 };

9.1.2 Header Fungsi dengan Parameter

Bentuk umum:

tipeData namaFungsi ( <Daftar_parameter> )

Contoh:

int Jumlahkan(int a, int b) double ArcCos(double x) void List(int n, char* header)

Penulisan header fungsi dengan parameter hampir sama dengan fungsi tanpa parameter, yaitu diawali dengan tipe data, lalu nama fungsi, dan diikuti dengan parameter-parameter (yang berada di dalam kurung) yang masing-masing dipisahkan dengan koma beserta dengan tipenya.

Berikut ini digambarkan struktur blok fungsi dengan parameter.

Page 6: PG78 Dwi Asyiknya Belajar Struktur Data Di Planet C++

100

Gambar 9.2 Struktur blok fungsi dengan parameter

Contoh Soal:

prg0902.cpp

1 #include <iostream> 2 using namespace std;34 int Tambah(int a, int b)5 {6 return a + b;7 };89 int Kali(int a, int b)10 {11 return a * b;12 };1314 int main()15 {16 int x, y;1718 cout << "x = ";19 cin >> x;20 cout << "y = ";21 cin >> y;2223 cout << "x+y = " << Tambah(x, y) << endl;24 cout << "xy = " << Kali(x, y) << endl;2526 return 0;27 };

9.2 Parameter Formal dan Aktual

Jika sebuah fungsi memiliki parameter yang berada di dalam kurung( ), parameter tersebut disebut sebagai parameter formal, sedangkan

Output:x = 1 y = 2 x+y = 3 xy = 2

Page 7: PG78 Dwi Asyiknya Belajar Struktur Data Di Planet C++

101

parameter yang terdapat pada baris perintah pemanggil fungsi tersebut disebut sebagai parameter aktual.

Untuk lebih jelasnya, perhatikan penjelasan di bawah ini.

void Hitung(char a, char b, int &c) { … };

int hasil;

Hitung(3, 7, hasil); …

Pada contoh di atas, fungsi Hitung memiliki parameter a, b, dan c yang disebut sebagai parameter formal. Fungsi hitung tersebut dipanggil pada program utama dengan parameter 3, 7, dan hasil. Parameter 3, 7, dan hasil dikenal dengan sebutan parameter aktual. Kemudian, parameter aktual 3, 7, dan hasil tersebut masing-masing ditransfer kepada parameter formal a, b, dan c sesuai dengan urutannya sehingga procedure hitung a bernilai 3, b bernilai 7, dan c berisi variabel penampung hasil.

Transfer parameter akan dijelaskan lebih lanjut pada bagian berikutnya.

9.3 Transfer Parameter

Saat kita memanggil suatu fungsi dengan parameter, sebenarnya telah terjadi pengiriman parameter dari parameter aktual (yang terdapat pada pemanggil fungsi) ke parameter formal (yang terdapat pada fungsi tersebut). Pengiriman parameter tersebut dapat dilakukan dengan dua cara, yaitu:

Transfer paramater by value (secara nilai).

Transfer parameter by location/reference (secara acuan).

9.3.1 Transfer Parameter by Value

Nilai yang tersimpan dalam parameter dikirim ke fungsi untuk diolah, tetapi hasil olahan tersebut tidak diminta untuk dikembalikan. Dalam

a, b dan c adalah Parameter Formal

3, 7, dan hasil adalah Parameter Aktual

Page 8: PG78 Dwi Asyiknya Belajar Struktur Data Di Planet C++

102

mode ini, terjadi aliran 1 arah, yaitu dari pemanggil procedure ke procedure itu.

Contoh Soal:

prg0903.cpp

1 #include <iostream>

2 using namespace std;345 void Tampil(int a, int b)6 {7 cout << "(" << a << ", " << b << ")" << endl;8 };910 int main()11 {12 int x, y;1314 cout << "x = ";15 cin >> x;16 cout << "y = ";17 cin >> y;1819 Tampil(x, y);202122 return 0;23 };

9.3.2 Transfer Parameter by Location

Transfer paramenter by location sering dikenal juga dengan transfer parameter by reference (secara acuan). Dalam kasus ini, yang ditransfer hanya lokasinya saja (dapat berisi data atau kosong) untuk diolah, lalu hasil olahan tersebut dikembalikan dan disimpan pada lokasi yang telah ditransfer tersebut. Dalam mode ini, dapat terjadi aliran 2 arah dari pemanggil fungsi ke fungsi itu dan sebaliknya.

Contoh Soal:

prg0904.cpp

1 #include <iostream> 2 using namespace std;

Output:x = 1 y = 2 (1, 2)

Page 9: PG78 Dwi Asyiknya Belajar Struktur Data Di Planet C++

103

34 void Tukar(int &a, int &b)5 {6 int temp;78 temp = a;9 a = b;10 b = temp;11 };1213 int main()14 {15 int x, y;1617 cout << "x = ";18 cin >> x;19 cout << "y = ";20 cin >> y;2122 Tukar(x, y);232425 cout << "Sekarang x = " << x << endl;26 cout << "Sekarang y = " << y << endl;2728 return 0;29 };

9.4 Fungsi Rekursif

Fungsi rekursif adalah fungsi yang memanggil dirinya sendiri. Fungsi rekursif dipakai karena memiliki kelebihan, yaitu penulisan baris program dapat menjadi lebih singkat. Akan tetapi, fungsi ini juga memiliki kekurangan, yaitu membutuhkan banyak memori karena setiap kali program bagian dipanggil oleh dirinya sendiri, dibutuhkan sejumlah ruang memori tambahan.

Contoh Soal:

prg0905.cpp

1 #include <iostream> 2 using namespace std;3

Output:15 bilangan Fibonacci pertama: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377

Output:x = 1 y = 2 Sekarang x = 2 Sekarang y = 1

Page 10: PG78 Dwi Asyiknya Belajar Struktur Data Di Planet C++

104

456 int Fibo(unsigned int n)7 {8 switch (n)9 {10 case 0:11 return 0;12 case 1:13 return 1;14 default:15 return Fibo(n - 1) + Fibo(n - 2);16 };17 };1819 int main()20 {21 int i;2223 cout << "15 bilangan fibonacci pertama: " << endl;2425 for (i = 0; i < 15; i++)26 {27 if (i > 0)28 cout << ", ";29 cout << Fibo(i);30 };3132 cout << endl;3334 return 0;35 };

9.5 Latihan Soal

1. Buatlah fungsi yang akan menghitung jumlah deretan bilangan (deret.cpp).

Contoh input dan output fungsi tersebut dengan parameter pertama untuk menunjukkan banyaknya bilangan dan parameter kedua untuk menunjukkan array penampung bilangan:

Bilangan[0] = 41 Bilangan[1] = 22 Bilangan[2] = 72 Bilangan[3] = 44

jumlah(4, Bilangan) = 179

2. Buatlah program untuk menampilkan bilangan prima dari 2 sampai dengan jumlah yang diberikan melalui parameter program. Gunakan fungsi sesuai kebutuhan (tprima.cpp).

Page 11: PG78 Dwi Asyiknya Belajar Struktur Data Di Planet C++

105

E:\> tprima 7 7 bilangan prima pertama: 2 3 5 7 11 13 17

Gambar 9.3 Contoh tampilan soal nomor 2

3. Buatlah fungsi yang mengembalikan bilangan Fibonacci ke-n(fibon.cpp).

Contoh input dan output fungsi tersebut:

fibo(0) = 0 fibo(1) = 1 fibo(5) = 5 fibo(9) = 34 fibo(11) = 89

4. Buatlah program yang menampilkan animasi karakter bergerak ke kanan, berhenti, kemudian kembali dengan menerapkan gerak lurus berubah beraturan. Setiap kali karakter menabrak batas kiri, karakter akan dipantulkan dengan kecepatan yang berkurang sesuai dengan deret geometrik. Program berhenti jika karakter tidak lagi bergerak (geom.cpp).

E:\> geom O

Gambar 9.4 Contoh tampilan soal nomor 4

5. Buatlah program yang menampilkan gambar bintang dengan panjang sisi diberikan lewat parameter program (bintang.cpp).

E:\> bintang 4 * * * * * ***** ***** * * * * * * * * * * ***** ***** * * * * *

Gambar 9.5 Contoh tampilan soal nomor 5

Page 12: PG78 Dwi Asyiknya Belajar Struktur Data Di Planet C++

106

6. Buatlah program untuk membuat piramida angka seperti pada contoh di bawah. Tinggi piramida diberikan lewat parameter program (batasi bilangan dari 0 hingga 9) (pirangka.cpp).

E:\> pirangka 7 1 121 12321 1234321 123454321 12345654321 1234567654321

Gambar 9.6 Contoh tampilan soal nomor 6

7. Buatlah fungsi untuk mencari FPB dari banyak bilangan (fpb.cpp)

8. Buat program untuk menampilkan segitiga pascal menggunakan fungsi rekursif (pascal.cpp).

E:\> pascal 3 1 1 1 1 2 1 1 3 3 1

Gambar 9.7 Contoh tampilan soal nomor 8

9. Buat program untuk memberikan solusi masalah menara hanoi menggunakan fungsi rekursif (hanoi.cpp).

10. Dari suatu himpunan, misalnya {a, b, c, d} dapat dibuat kombinasi dua-dua, sehingga menghasilkan {ab, ac, ad, bc, bd, cd}, kombinasi tiga-tiga {abc, abd, acd, bcd}, dan seterusnya. Buatlah fungsi untuk menghasilkan string kombinasi berdasarkan himpunan huruf tertentu (kombhrf.cpp).

kombinasi(“abcd”, 2, 0) = “ab” kombinasi(“abcd”, 2, 1) = “ac” kombinasi(“abcd”, 2, 2) = “ad” kombinasi(“abcd”, 3, 3) = “bcd”