BAB III FUNGSI DAN MODULASI DALAM PROGRAM I. DASAR TEORI A. Fungsi Bahasa pemprogaman C++ sangat mendukung konsep pemprogaman terstruktur atau bahkan konsep pemprogaman berorentasi objek (object oriented progamming). Pada konsep pemprogaman terstruktur, program dipecah-pecah menjadi beberapa fungsi. Fungsi merupakan bagian atau pecahan program yang dirancang untuk melaksanakan tugas spesifik tertentu. Suatu fungsi dapat dipanggil dan program utama (fungsi main()) atau dan fungsi lain. Tujuan pemakaian suatu fungsi dalam program adalah untuk memudahkan pengembangan program dan memperkecil ukuran program. Konsep pemprogaman terstruktur dapat digambarkan oleh skema pada gambar 3.1 berikut. Gambar 3.1. Skema konsep pemprogaman terstruktur. Skema diatas menunjukkan bahwa program terdiri dari fungsi utama atau fungsi main() fungsi a(), fungsi b(), fungsi c(). fungsi c1(), fungsi c2() dan fungsi c3(). Fungsi main() akan memanggil fungsi a(), fungsi b() dan fungsi c(). Sementara itu fungsi c() sendiri akan memanggil fungsi d(), fungsi c2() dan fungsi c3(). Pada umumnya fungsi memerlukan masukan yang disebut sebagai argumen atau parameter. Masukan ini selanjutnya diolah oleh fungsi tersebut. Hasil akhir fungsi berupa sebuah nilai yang disebut sebagai nilai keluaran atau nilai balik fungsi. OIeh karena itu fungsi sering digambarkan sebagai “ kotak hitam” (black box) seperti gambar 3.2 dibawah. Penggambaran fungsi sebagai kotak hitam dapat berarti bahwa bagian dalam fungsi bersifat pribadi bagi fungsi tersebut. Tak ada pernyataan dari Universitas Gadjah Mada 1 luar fungsi yang dapat mengakses bagian dalam fungsi tersebut (selain melalui parameter ekstemal). Gambar 3.2 Gambaran fungsi sebagal kotak hitam Fungsi dalam bahasa pemprogaman C++ memiliki bentuk umum sebagai berikut: Simbol tipe diawat fungsi menunjukkan jenis tipe data nilai kembalian atau nilai keluaran. Fungsi yang tidak memiliki nilai kembalian, simbol tipe-nya diideklarasikan dengan kata kunci void, seperti fungsi utama atau fungsi main() yang tidak memiliki nilai kembalian dideklarasikan sebagai : void main() . Simbol nama fungsi menunjukkan nama fungsi yang didefinisikan. Simbol (tipe argument, tipe argumen2, ...) menunjukkan daftar argumen atau nilai masukan yang dibutuhkan oleh fungsi. Tiap-tiap argumen memiliki tipe data sendiri-sendiri. Bagian terakhir adalah tubuh fungsi yang dibatasi oleh kurung kurawa buka dan tutup {}. Simbol tubuh fungsi berisi deretan penyataan dan perintah-perintah yang akan dijalankan oleh fungsi. Universitas Gadjah Mada 2 Parameter fungsi yang masih berada pada saat pendefinisian fungsi disebut parameter formal, misalnya parameter pada contoh 3.1 . Sedang parameter fungsi yang dipakai pada saat pemanggilan fungsi dinamakan parameter aktual (contoh 3.3). Fungsi-fungsi dalam program C/C++ biasanya didefinisikan atau dideklarasikan sebelum fungsi main(). Akan tetapi fungsi-fungsi juga dapat didefinisikan atau dideklarasikan setelah fungsi main() dengan terlebih dahulu mendeklarasikan prototipe fungsi sebelum fungsi main(). Universitas Gadjah Mada 3 Selain fungsi-fungsi yang didefinisikan oleh pemakai atau programer, didalam bahasa C++ juga telah didefinisikan fungsi-fungsi built-up . Fungsi fungsi ini dapat dipanggil dengan terlebih dahulu mendeklarisikan file-judul yang terkait dengan pustaka yang mengandung fungsi tersebut. Pendeklarasian file-judul dilakukan pada permulaan program sebagai pengarah praprosesor (lihat Bab I). Tabel 3.1 menunjukkan daflar fungsi-fungsi pustaka path C/C++. Universitas Gadjah Mada 4 Universitas Gadjah Mada 5 B. Modulasi Dalam Program Modulasi program adalah proses pemecahan program menjadi beberapa bagian pokok yang memudahkan pemodifikasian dan penyempurnaan program. Selain dengan fungsi, bahasa pemprogaman C++ juga menyediakan fasilitas lain untuk kepentingan pemodulasian progam, yakni Struktur dan Kelas 1. Struktur Struktur atau struct digunakan untuk mendeklarasikan sekelompok data yang memiliki tipe berlainan. Elemen-elemen atau anggota struktur menempati lokasi memori yang berbeda. Bentuk umum pendeklarasian struktur adalah: Bagian nama struktur menyatakan sembarang nama yang menjadi nama struktur. Bagian tipe menyatakan tipe data salah satu anggota struktur, dapat berupa larik atau struktur yang lain. Bagian anggota1 dan anggota2 menyatakan nama-nama anggota struktur. Universitas Gadjah Mada 6 Pemakaian struktur terkait dengan pendefinisian objek bertipe data struktur yang telah dideklarasikan. Bentuk umum pendefinisian objek tersebut adalah: Bagian nama_stauktur menyatakan nama struktur. Sedang bagian objek_strukfur menyatakan nama objek yang bertipe data struktur yang didefinisikan. Pendeklarasian struktur sekaligus pendefinisian objek bertipe data struktur dapat juga dilaksanakan secara serempak dengan format sebagai benkut: Universitas Gadjah Mada 7 Pengaksesan anggota struktur dapat berupa pemberian nilai (data) ke anggota stmktur atau pengambilan niIai (data) dan anggota struktur. Pengaksesan nilai anggota struktur dilakukan dengan menambahkan titik (. ) terhadap objek dan struktur diikuti nama anggota struktur yang diakses. Bentuk umum pemberian nilai ke anggota struktur adalah: Bagian objek_struktur menyatakan nama objek yang bertipe data struktur yang didefinisikan. Bagian anggota_struktur menyatakan anggota struktur yang diakses. Bagian data menyatakan nilai data yang diisikan ke anggota struktur. Bagian data ini dapat berupa konstanta, variabel atau anggota struktur yang lain. Tipe data dan data harus sesuai dengan tipe data anggota struktur. Bentuk umum pengambilan nilai dan anggota struktur adalah: Bagian variabel menunjukkan variabel tempat menampung data atau nilai yang telah diambil dan salah satu anggota struktur. Tipe data dari variabel harus sesuai dengan tipe data anggota struktur. Universitas Gadjah Mada 8 Objek yang memiliki struktur yang sama dapat saling dipertukarkan atau diisikan. 2. Kelas Kelas atau class digunakan untuk mendeklarasikan sekelompok data yang memiliki tipe dan fungsi berlainan. Berbeda dengan struktur yang hanya dapat menampung anggota dengan tipe data berlainan, kelas lebih luas lagi dengan kemampuan menampung anggota dengan tipe data dan fungsi berlainan sekaligus. Fungsi-fungsi dalam kelas biasanya dipakai untuk mengakses dan menggoperasikan anggota-anggota kelas. Anggota-anggota dan fungsi dalam kelas memiliki berbagai tingkat spesifikasi akses, yakni private, protected dan public. Anggota dan fungsi private suatu kelas hanya dapat diakses fungsi kelas tersebut. Suatu usaha untuk mengakses anggota dan fungsi private suatu kelas akan memunculkan pesan kesalahan kompilasi. Anggota dan fungsi protected suatu kelas selain dapat diakses fungsi kelas itu sendiri juga akan dapat diakses oleh kelas turunan (dibahas pada kesempatan lain). Sedang anggota dan fungsi public selain dapat diakses oleh fungsi didalam kelas itu sendiri dan fungsi kelas keturunannya, juga dapat diakses oleh fungsi-fungsi luar. Jika tingkat spesifikasi akses tidak dicantumkan maka secara otomatis yang berlaku adalah tingkat spesifikasi akses private. Bentuk umum deklarasi kelas adalah : Universitas Gadjah Mada 9 Bagian class menyatakan kata kunci untuk mendeklarasikan dan mendefinisikan suatu kelas. Bagian nama_kelas menyatakan nama kelas yang diciptakan. Bagian tipe menyatakan tipe data anggota kefas atau nilal kembalian fungsi kelas. Bagian private, protected dan public yang diikuti dengan tanda : menyatakan tingkat spesifikasi akses anggota dan fungsi kelas yang dibawahnya. Bagian nama_kelas (argumen1, argumen2 ) menyatakan konstruktor kelas, atau fungsi kelas yang pertama-tama akan dieksekusi ketika kelas objek kelas didefinisikan. Sedang bagian ~nama_kelas() menyatakan destruktor kelas, atau fungsi kelas yang paling akhir dieksekusi ketika objek kelas didealokasi dari ruang memori. Konstruktor dan destruktor kelas sangat bermanfaat dalam penerapan konsep menejemen memori dinamis dengan menggunakan penunjuk. Universitas Gadjah Mada 10 Bentuk lain pendeklarasian suatu kelas adalah dengan mendeklarasikan anggota anggota kelas dahalu, kemudian diikuti dengan definisi fungsi-fungsi kelas diluar kelas dengan didahului nama kelas diikuti tanda :: dan nama fungsi kelas. d Universitas Gadjah Mada 11 Pemakaian kelas terkait dengan pendefinisian objek bertipe data kelas yang telah dideklarasikan. Bentuk umum pendefinisian objek tersebut adalah: Bagian nama_kelas menyatakan nama kelas . Sedang bagian objek_kelas menyatakan nama objek yang bertipe data kelas yang didefinisikan. Pendeklarasian kelas sekaligus pendefinisian objek bertipe data kelas dapat juga dilaksanakan secara serempak dengan format sebagai berikut: Dimana objek_kelas menyatakan nama objek yang bertipe data kelas yang didefinisikan. Pengaksesan anggota atau fungsi kelas dapat berupa pemberian nilai (data) ke anggota atau fungsi kelas serta pengambilan nilai (data) dan anggota atau fungsi kelas. Pengaksesan niIai anggota atau fungsi kelas dilakukan dengan menambahkan titik (.) terhadap objek dari kelas diikuti nama anggota atau nama Universitas Gadjah Mada 12 fungsi kelas yang diakses jika diakses dan luar kelas. Pengaksesan ini dilaksanakan dengan memperhatikan spesifikasi akses dan anggota atau fungsi kelas terkait. Pengaksesan anggota kelas dari luar kelas, seyogyanya dilaksanakan dengan menggunakan fungsi kelas terkait, karena untuk menjaga aspek modulasi program. Bentuk umum pemberian nilai ke anggota atau fungsi kelas adalah: Atau Contoh 3.17 : Blk1.SetPanjang (20.2); bIk1.balok (20.2, 3.2, 1.3); Bentuk umum pengambilan nilai dan anggota atau fungsi kelas adalah Atau Bagian variabel menunjukkan variabel tempat menampung data atau nilai yang telah diambil dari salah satu anggota atau fungsi kelas. Tipe data dari variabel harus sesuai dengan tipe data anggota atau fungsi kelas. II. STUDI KASUS Studi kasus I Di sini akan diberi contoh fungsi untuk menghitung luas permukaan bola dan volume bola jika diketahui jari-jari suatu bola. / /****************************************************************** / / Program memakai fungsi penghitung gaya coulomb / /****************************************************************** Universitas Gadjah Mada 13 #include <iostream.h> #include <iomanip.h> float GayaCoulomb(float ql,float q2,float r) { return ((9e+9*ql*q2)/(r*r));; } void main() { float ql,q2,r,F; cout<<” Menghitung gaya coulomb”<<endl; cout<<” Masukkan q1 : ”; cin>>ql; cout<<” Masukkan q2 : ”; cin>>q2; cout<<” Masukkan jarak : ”; cin>>r; F=GayaCoulomb(q1,q2,r); //memanggil fungsi GayaCoulomb (); cout<<” Besar gaya coulomb = ”<<setw(8)<<F<<endl; } Studi kasus 2 Pada studi kasus kali ini akan diberi contoh tiga fungsi untuk menghitung gaya Coulomb, potensial listrik dan medan listrik. Gaya Coulomb dihitung dengan memasukkan nilai dua muatan dan jarak antar muatan. Potensial listrik dihitung dengan memasukkan besar nilai muatan dan jarak suatu titik posisi dengan suatu muatan. Sedang medan listrik dihitung dengan memasukkan nilai besar suatu muatan dan jarak titik yang di tinjau nilai medannya dari muatan tersebut. 1. Program memakai fungsi penghitung Gaya Coulomb //****************************************************************** // Program memakai fungsi penghitung gaya Coulumb //****************************************************************** #include <iostream.h> #include <conio.h> #include <math.h> #include <iomanip.h> float GayaCoulomb(float q1,float q2,float r) { Universitas Gadjah Mada 14 return (9e+9*q1*q2)I(r*r));; } void main() { float q1, q2 r, F; cout<<” Menghitung Gaya Coulomb”<<endl; cout<<” Masukkan q1 : “;cin>>q1; cout<<” Masukkan q2 :“; cin>>q2; cout<<” Masukkan jarak :“; cin>>r; F = GayaCoulomb(q1,q2,r); cout<<” //memanggil fungsi GayaCoulomb(); Besar Gaya Coulomb= “<<setw(8)<<F<<endl; getch(); } 2. Program memakai fungsi penghitung Potensial listrik //************************************************************************ // Program memakai fungsi penghitung potensial listrik //************************************************************************ #include <iostream.h> #include <iomanip.h> float Potensial(float q1,float r) { float V; V=(9e+9*q1)/r; return V; } void main() { float q1,r,V; cout<<“Mengbilung Potensial Listrik”<<endl; cout<<“Masukkan q1 :“;cin>>q1; cout<<“Masukkan jarak :“;cin>>r; V= Potensial(q1,r); //memanggil fungsi Potensial() cout<<“Besar potensial = “<<setw(8)<<V<<“volt”<<endl: } 3. Program memakai fungsi penghitung Medan listrik //******************************************************************** Universitas Gadjah Mada 15 // Program memakai fungsi penghitung medan listrik //******************************************************************** #include <iostream.h> #include <iomanip.h> float Medan(float Q,float r) { return (9e+9*Q)/(r*r); } Void main() { float Q,r,E; cout<<“Menghitung kuat medan listrik”<<endl; cout<<”Masukkan muatan Q cout<<”Masukkan jarak :“;cin>>Q; :“;cin>>r; E=Medan(Q.r); //memanggil fungsi Medan() cout<<”Besar Medan Listrik =“<<setw(8)<<E<<endl; } Studi Kasus 3 Pada studi kasus ini akan dibuat program untuk menghitung suatu fungsi matematis yang memiliki bentuk rumusan : Nilai y(t) dicari dengan memberi nilai t sebagai masukan. //******************************************************************** // Program menghitung fungsi polinomial //******************************************************************** #include<iostream.h> #include<math.h> #include<iomanip.h> float Polinom(float t) { Float y; Universitas Gadjah Mada 16 Y=(t*t*t+2.0*t*t-8.0*t-100.0*t)/sqrt(5.0*t*t-10.0); return y; { Void main() { Float t,hasil; cout<<“ Menghitung fungsi Polinominal”<<endl; cout<<“ Masukkan nilai variable bebas :“;cin>>t; hasil=Polinom(t); //memanggil tiingsi Polinom() cout<<“ Hasil yang diperoleh, y(t) =“<<setw(8)<<hasil<<endl; } Studi Kasus 4 Pada studi kasus kali ini diberikan contoh pemakaian struktur untuk menghitung isi balok. //******************************************************************** // Program balok dengan struktur //******************************************************************** #include <iostream.h> #include <math.h> void main() { struct balok { float panjang; float lebar; float tinggi; } balok blk1,blk2; //pengisian nilai pada balok pertama cout<<” Masukkan data balok”<<endl; cout<<“ Panjang balok : “; cin>>blk1.panjang; cout<<” Lebar balok : “; cin>>blk1.Iebar; Universitas Gadjah Mada 17 cout<<“ Tinggi balok : “; cin>>blk1.tinggi; blk2=blk1; //pengisian balok kedua oleh balok pertama cout<<” Karakteristik Balok “<<endl; cout<<”IsiBalok = “<<(blk2.panjang*blk2.1ebar*blk2.tinggi)<<“m^3”<<endl; cout<<“Luas alas dan tutup balok ”<<(blk2.panjang*blk2.lebar)<<”m^2”<<endl; } Studi Kasus 5 Pada studi kasus kali ini diberikan contoh pemakaian kelas untuk memodulasi atau menyimpan informasi tentang balok. #include <iostream.h> #include <math.h> class balok { private: float panjang; float lebar; float tinggi; float isi; public: balok (float pnj, float lbr, float tng) { panjang=pnj; lebar=lbr; tnggi=tng; isi=pnj*Ibr*tng; } float AmbPaniang() {return panjang; } float AmbLebar() {return lebar; } float AmbTinggi() {retum tinggi ; } float Ambisi() {return isi; } }; void main() { float pnj,lbr,tng,isi,luas; Universitas Gadjah Mada 18 balok balokku(20.1,2.3,4.0); pnj= balokku.AmbPanjang(); lbr= balokku.AmbLebar(); tng balokku.AmbTinggi(); isi= balokku.Ambisi(); Iuas=pnj*lbr; cout<<” Karakteristik balok ”<<endl; cout<<” 1.Panjang Balok = “<<pnj<<” m”<<endl; cout<<” 2.Lebar Balok = “<<lbr<<” m”<<endl; cout<<” 3.Tinggi Balok = “<<tng<<” m”<<endl; cout<<” 4.Isi Balok = “<<isi<<” m^3”<<endl; cout<<” 5.Luas alas Balok = “<<luas<<” m^2”<<endl; } Studi Kasus 6 Pada studi kasus kali ini diberikan contoh pemakaian kelas untuk memodulasi suatu bilangan kompleks. #include <iostreamh> #include <conio.h> class Kompleks { private : double real;//nilai real double imaj;//nilai imajimer public : //definisi fungsi anggota kelas kompleks. Kompleks(double re,double im) { real = re; imaj = im; } void info() { cout<<“\n Bilangan kompleks: “<<endl; cout<<“\n real : “<<real<<endl; cout<<”\n imajiner: “<<imaj<<endl; Universitas Gadjah Mada 19 } }; void info() { clrscr(); Kompleks a(2.34,0.12); a.info(); Kompleks b(.09,32); b.info(); } III. LATIHAN Latihan 1 Tulislah suatu program dengan menggunakan fungsi untuk memangkatkan suatu bilangan real dengan bilangan real lainnya. Fungsi ini menerima dua parameter bertipe data float atau double dan memiliki nilai kembalian bertipe data float atau double yang merupakan hasil pemangkatan dari kedua parameter tersebut. Latihan 2 Tulislah suatu program dengan menggunakan fungsi untuk menyederhanakan pecahan ⁄ menjadi a ⁄ di mana x dan y adalah bilangan bulat dan x > y. Sebagai contoh , pecahan 1 ⁄ dapat disederhanakan menjadi 2 ⁄ . Latihan 3 Tulislah suatu program dengan menggunakan fungsi untuk mengkonversi suhu dari : - Celcius ke Fahrenheit - Fahrenheit ke Celcius - Celcius ke Kelvin - Kelvin ke Fahrenheit Latihan 4 Universitas Gadjah Mada 20 Tulislah suatu program dengan menggunakan fungsi untuk mengkonversi masukan sudut dalam derajat menjadi sudut dalam radian dan sebaliknya. Latihan 5 Tulislah suatu program dengan menggunakan fungsi untuk mengkonversi masukan berupa koordinat polar (r, ) ke koordinat kartesian (x,y) dan sebaliknya. Latihan 6 Tulislah suatu program dengan menggunakan fungsi dan struktur untuk menghitung panjang sisi a dan segitiga ABC pada gambar 3. dibawah ini, apabila diberi masukan berupa nilai b, c, . Latihan 7 Buatlah program dengan menggunakan fungsi untuk menghitung lama benda yang jatuh bebas dari puncak gedung jika diketahui ketinggian gedung. Asumsikan nilai percepatan gravitasinya. Latihan 8 Buatlah program dengan menggunakan fungsi untuk menghitung jarak peluru yang ditembakkan dari suatu lokasi penembakan dengan sudut penembakan ( ) dan kecepatan mula-mula ( ) diketahui. Rumus menghitung jarak adalah Latihan 9 Buatlah suatu program dengan menggunakan fungsi untuk menghitung momen inersia, kecepatan sudut dan energi kinetik dari suatu tabung yang diputar tetap sekitar sumbu tegaknya jika diketahui jari-jari dan tinggi tabung, serta besar pergeseran sudut tabung selama waktu tertentu. Universitas Gadjah Mada 21 Latihan 10 Tulislah program dengan menggunakan struktur atau kelas untuk menjumlahkan, mengurangkan, mengalikan dan membagi bilangan kompleks. Universitas Gadjah Mada 22