Alpro & Strukdat 1 C++ (Sub Program)
Dwiny Meidelfi, S.Kom., M.Cs.
Sub Program
Dibagi/dipecah menjadi modul-modul program yang digunakan untuk menyelesaikan masalah tertentu Mudah dibaca, terlihat garis besar pemecahannya Dapat digunakan berkali-kali Perubahan/modifikasi hanya dilakukan pada pendeklarasian modul-modul tersebut
Function (I) Fungsi adalah kumpulan dari statement-statement yang dieksekusi ketika dipanggil dari program utama/beberapa sub program yang lain. Formatnya adalah : type name ( parameter1, parameter2, ...) { statements } where: • type : tipe data yang dikembalikan oleh fungsi. • name : indentifier sebagai nama fungsi. • parameters (as many as needed): Setiap parameter terdiri dari tipe data yang diikuti dengan identifier/variabel. • statements : isi dari fungsi itu sendiri.
Function (I)
Function (I)
Functions with no type. The use of void
Example void nama() { cout<<"Dwiny Meidelfi"<<endl; } void praktikum() { cout<<"praktikum alpro1 hari rabu jam1-4"<<endl; } void garis() { cout<<”----------------”<<endl; } void main() { nama(); garis(); praktikum(); }
Example
Scope of variables
Scope of variables Variabel Lokal ➢ Variabel ariabel yang didefinisikan dalam suatu fungsi tertentu, sehingga hanya dikenal dalam fungsi tersebut. Dalam hal ini artinya suatu fungsi tidak akan mengenal variabel lokal dan fungsi lain. Suatu fungsi hanya akan mengenal variabel yang didefinisikan dalam fungsi yang bersangkutan. Variabel Global ➢ Variabel yang dideklarasikan pada program utama, dan dapat dibaca oleh seluruh fungsi dalam program tersebut.
int data=100; void fungsi_satu(); void fungsi_dua();
Variabel global
int main() { int data =200; cout<<"Nilai data/variabel lokal main = "<
Variabel lokal di fungsi main
void fungsi_satu() { int data =300; cout<<"Nilai data/variabel lokal di fungsi satu = "<
Parameter passing
Parameter passing By value : ➢
➢ ➢
➢
Call by value akan menyalin nilai dari parameter aktual ke parameter formal. Yang dikirimkan ke fungsi : nilai dari datanya, Perubahan nilai di fungsi (parameter formal) tidak akan merubah nilai asli di bagian program yang memanggilnya. Pengiriman parameter secara nilai adalah pengiriman searah,
int Tambah(int x) { cout<<"x awal = "<<x<<endl; x=x+2; cout<<"x akhir = "<<x<<endl; return x; } int main() { int a,hasil; cout<<"masukkan bilangan : "; cin>>a; cout<<"a awal = "<
Parameter passing By reference : ➢ Pemanggilan secara Referensi merupakan upaya untuk melewatkan alamat dari suatu variabel ke dalam fungsi. ➢ Yang dikirimkan ke fungsi : alamat letak dari nilai datanya. ➢ Fungsi yang menerima kiriman alamat ini maka menggunakan alamat yang sama untuk mendapatkan nilai datanya. ➢ Perubahan nilai di fungsi akan merubah nilai asli di bagian program yang memanggil fungsi. ➢ Pengiriman parameter secara referensi adalah pengiriman dua arah, yaitu dari fungsi pemanggil ke fungsi yang dipanggil dan juga sebaliknya.
int Tambah(int& x) { cout<<"x awal = "<<x<<endl; x=x+2; cout<<"x akhir = "<<x<<endl; return x; } int main() { int a,hasil; cout<<"masukkan bilangan : "; cin>>a; cout<<"a awal = "<
void Tambah(int a, int b, int& c) { c = a + b: } void main() { int a = 3; int hasil; Tambah(a, 4, hasil); //pemanggilan fungsi cout << “hasil = “ << hasil << endl; }
Functions (II) int main() { int kuis[] = {30,30,35}; ubahnilai(kuis); cout<<”Nilai kuis ketiga “ <
LATIHAN Buatlah program untuk menginputkan dan menampilkan nilai-nilai kuis dan hitunglah rata-rata kuis tersebut.
LATIHAN Buatlah program untuk menukar 2 buah karakter.
LATIHAN (2) void Tukar(char A, char B ) { char C ; C = A; A = B, B = C; } void main() { char X, Y ; X = ‘S’; Y = ‘D’; Tukar(X, Y); printf(“X = %c Y= %c”, X, Y); }
REKURSI Rekursif ialah salah satu teknik pemrograman dengan cara memanggil sebuah fungsi dari dirinya sendiri, baik itu secara langsung maupun tidak langsung. Pemanggilan fungsi rekursif secara langsung berarti dalam fungsi tersebut terdapat statement untuk memanggil dirinya sendiri sedangkan secara tidak langsung berarti fungsi rekursif tersebut memanggil 1 atau lebih fungsi lain sebelum memanggil dirinya sendiri.
REKURSI
LATIHAN
void tulis(int n) { int x=n; if (x>0) { cout<<"proses rekursif dengan nilai x "<<x<<endl; x--; tulis(x); } } int main() { tulis(10); return 0; }
LATIHAN Buatlah program untuk menghitung nilai faktorial bilangan bulat positif
LATIHAN 0! = 1; 1! = 1; 2! = 2 x 1 3! = 3 x 2 x 1 = 3 x 2! 4! = 4 x 3 x 2 x 1 = 4 x 3! 5! = 5 x 4 x 3 x 2 x 1 = 5 x 4!
N! = N x (N-1)!
Dari logika diatas dapat dibuat fungsi faktorialnya : N == 0 || N == 1 → 1
fakto(N) = N>1 → N * fakto(N-1)
LATIHAN int Fakt(int n) { if (n == 1 || n == 0) return 1; return n * Fakt(n-1); }
LATIHAN int fakto(int a) { int hasil=1; if (a == 0) { return(1); } else if (a > 0) { hasil = a * fakto(a1); return(hasil); } }