Scope Variable *dalam fungsi Tenia Wahyuningrum, S.Kom., MT
Variabel global dan lokal Variabel global dapat dilihat dan diubah oleh semua fungsi dalam program. Suatu variabel lokal hanya dapat dilihat dan dimodifikasi oleh fungsi dimana variabel lokal tersebut didefinisikan
Jika kita mendeklarasikan sebuah variabel diluar fungsi, maka dengan sendirinya kompiler akan menganggap variabel tersebut sebagai variabel global. Variabel global
#include using namespace std; int a; //varibel a adalah variabel global //karena dideklarasikan diluar fungsi int main() //membuat fungsi utama main() { a = 10; // inisialisasi angka a = 10 cout << "nilai variabel a adalah" << a; return 0; }
variabel yang hanya dikenali oleh satu fungsi saja, artinya tidak dikenal oleh lingkungan luar didalam program yang kita buat. Adapun bentuk pendeklarasian variabel yang bersifat lokal ini harus berada dalam lingkup fungsi yang dimaksud. Variabel lokal
#include using namespace std; int main() //fungsi utama main() { float a; // variabel a merupakan variabel lokal // karena disimpan didalam fungsi main() a = 3.14; // inisialisasi angka / pengisian nilai a = 3.14 cout << "nilai variabel a adalah: " << a; return 0; }
Inisialisasi variabel Dalam penulisan program ada saatnya kita harus melakukan inisialisasi nilai terhadap sebuah variabel yang dideklarasikan.
Inisialisasi variabel Artinya jika kita tidak melakukan pengisian nilai terhadap variabel tersebut, maka variabel tersebut akan undefinied atau tidak terdefinisi atau masih kosong.
Inisialisasi variabel #include using namespace std; int main() { int x; // Menampilkan nilai x sebelum dilakukan inisialisasi atau masuk nilai x=0; cout << "Nilai x ketika assigment ke-1 : "<<x<<endl; x=2; cout << "Nilai x ketika assigment ke-2 : "<<x; return 0; }
Variabel Statis Variabel yang menempati ruang memori komputer secara permanen, artinya nilai terahir dari variabel ini akan terus disimpan. Dalam C++, untuk menyatakan variabel statis adalah dengan menggunakan kata kunci static.
Cara deklarasi variabel statis static tipe_data nama_variabel;
Variabel statis Perlu diperhatikan bahwa nilai terakhir yang dihasilkan akan terus tersimpan. Dengan demikian setiap pemanggilan fungsi yang sama mengenai pasti akan memberikan hasil yang berbeda.
Mari kita bandingkan !
Menggunakan variabel biasa
#include using namespace std; int contoh () { int a=0; //mendeklarasikan variabel biasa a=a+10; return a; } int main() { int x,y,z; //mendeklarasikan variabel x,y,z x=contoh(); // memanggil fungsi contoh () untuk pertama y=contoh(); // memanggil fungsi contoh () untuk kedua z=contoh(); // memanggil fungsi contoh () untuk ketiga cout << "Nilai fungsi pemanggilan pertama : " <<x<<endl; cout << "Nilai fungsi pemanggilan pertama : " <<y<<endl; cout << "Nilai fungsi pemanggilan pertama : " <<z<<endl; return 0; }
Menggunakan Variabel Statis
#include using namespace std; int contoh () { static int a=0; //mendeklarasikan variabel statis lokal a=a+10; return a; } int main() { int x,y,z; //mendeklarasikan variabel x,y,z x=contoh(); // memanggil fungsi contoh () untuk pertama y=contoh(); // memanggil fungsi contoh () untuk kedua z=contoh(); // memanggil fungsi contoh () untuk ketiga cout << "Nilai fungsi pemanggilan pertama : " <<x<<endl; cout << "Nilai fungsi pemanggilan pertama : " <<y<<endl; cout << "Nilai fungsi pemanggilan pertama : " <<z<<endl; return 0; }
Pemanggilan fungsi yang pertama kali nilai variabel a masih bernilai 0 (sesuai dengan inisialisasi. Fungsi akan menambahkan nilai tersebut dengan 10, maka nilai yang dikembalikan fungsi contoh() adalah 10.
Karena variabel a adalah variabel statis maka pada saat pemanggilan fungsi yang kedua variabel a menyimpan nilai 10, bukan 0. Dengan demikian pemanggilan fungsi kedua tentu akan menambahkan nilai a dengan nilai 10, sehingga nilai yang dikembalikan adalah 20, begitu seterusnya.
Latihan 1. Which is not a proper prototype? A. int funct(char x, char y); B. double funct(char x) C. void funct(); D. char x();
2. What is the return type of the function with prototype: “int func(char x, float v, double t);” A. char B. int C. float D. double
3. Which of the following is a valid function call (assuming the function exists)? A. funct; B. funct x, y; C. funct(); D. int funct();
4. Which of the following is a complete function? A. int funct(); B. int funct(int x) {return x=x+1;} C. void funct(int) {printf( “Hello” ); D. void funct(x) {printf( “Hello” ); }
Overloading Tenia Wahyuningrum, S.Kom., MT fungsi
Suatu proses menggunakan nama yang sama untuk dua atau lebih fungsi. Setiap definisi ulang dari fungsi yang di overloading harus menggunakan tipe parameter, urutan parameter, atau jumlah parameter yang berbeda.
Jumlah, tipe atau urutan parameter dari suatu fungsi disebut function signature. Jika kita memiliki sejumlah fungsi dengan nama yang sama, compiler akan mengidentifikasi fungsi-fungsi tersebut berdasarkan parameternya.
Signature function a. Jumlah parameter yang dimiliki fungsi Contoh : void add(int); void add(int, float); Pada contoh ini dua fungsi bernama add() ini berbeda karena jumlah parameternya berbeda
c. Urutan tipe data dari parameter fungsi Contoh : void display(int, char) void display(char, int) Pada contoh ini dua fungsi bernama display() ini berbeda karena urutan tipe parameternya
b. Tipe data parameter fungsi Contoh : void display(int) void display(char) Pada contoh ini dua fungsi bernama display() ini berbeda karena tipe parameternya berbeda
#include int square( int x ) { return x * x; } double square( double y ) { return y * y; } int main() { cout << "The square of integer 7 is " << square( 7 ) << "\nThe square of double 7.5 is " << square( 7.5 ) << endl; return 0; }
Algoritma Tenia Wahyuningrum, S.Kom., MT rekursif
Definisi “Fungsi yang dapat memanggil dirinya sendiri”
include using namespace std; int n; void counting () { cout<<n; n=n-1; if (n>0) { counting(); } main() { n=10; counting(); }
Menghitung pangkat sebuah bilangan
#include using namespace std; int pangkat(); int pangkat (int x,int n) { if(n==1) return (x); else return(x * pangkat(x,n-1)); } int main() { int x,y; cout<<"Menghitung x pangkat y "<<endl; cout<<"X : "; cin >> x; cout<<"Y : "; cin >> y; cout<<x<<"Pangkat"<<y<<"=“ <<pangkat(x,y)<<endl; }
TUGAS Buatlah program untuk membuat faktorial bilangan dengan menggunakan rekursi ! Buatlah program untuk membuat jumlah deret bilangan fibonanci dengan rekursi !
Terima Kasih