Upload
deirdre-wilson
View
13
Download
1
Embed Size (px)
DESCRIPTION
Fungsi. Fungsi. Setiap fungsi yg akan digunakan di dalam progam harus sudah didefinisikan dahulu. Umumnya diletakkan diatas main(), tetapi dapat pula di tuliskan di bawah main() asalkan didefinisikan prototype fungsi di atas main() - PowerPoint PPT Presentation
Citation preview
Fungsi
Setiap fungsi yg akan digunakan di dalam progam harus sudah didefinisikan dahulu. Umumnya diletakkan diatas main(), tetapi dapat pula di tuliskan di bawah main() asalkan didefinisikan prototype fungsi di atas main()
Pernyataan Return di dalam fungsi digunakan untuk memberikan nilai balik fungsi ke program utamanya
Tidak semua fungsi harus mempunyai nilai balik, seperti fungsi untuk menampilkan suatu keterangan saja contoh ->void judul() {…………}
Fungsi
#include <iostream.h>#include <math.h>
int jml2bil( int x1, int x2 ) // fungsi standard{ int jml; jml = x1 + x2 ; return(jml);}
int main(void){ int y,a,b;
cout << "Masukkan 2 bilangan \n"; cin >> a >> b;
y = jml2bil(a,b);
cout << "a is " << a << endl; cout << "b is " << b << endl; cout << "y is " << y << endl; return(0);}
#include <iostream.h>#include <math.h>
int jml2bil( int x1, int x2 ) ;// fungsi prototype
int main(void){ int y,a,b; cout << "Masukkan 2 bilangan \n"; cin >> a >> b;
y = jml2bil(a,b);
cout << "a is " << a << endl; cout << "b is " << b << endl; cout << "y is " << y << endl; return(0);}
int jml2bil( int x1, int x2 ){ int jml; jml = x1 + x2 ; return(jml);}
Lingkup Variabel ;
Variabel otomatis Variabel external Variabel statis
Variabel otomatis
Variabel yg didefinisikan dalam suatu fungsi berlaku sebagai variabel lokal bagi fungsi dengan sifat: Var hanya akan diciptakan pada saat fungsi
dipanggil Saat fungsi berakhir, var otomatis akan hilang Tidak perlu ada inisialisasi pada var Hanya dapat diakses dalam fungsi saja
#include <iostream.h>#include <math.h>
int jml2bil( int x1, int x2 ) // fungsi standard{ // var x1 dan x2 adlh var otomatis int jml; jml = x1 + x2 ; return(jml);}
int main(void){ int y,a,b;
cout << "Masukkan 2 bilangan \n"; cin >> a >> b;
y = jml2bil(a,b);
cout << "a is " << a << endl; cout << "b is " << b << endl; cout << "y is " << y << endl; return(0);}
Variabel External
Adalah suatu variabel yg didefinisikan di luar fungsi, yg dikenal sebagai var global.
Catatan Usahakan menggunakan seminim mungkin
suatu var global Var global mempunyai durasi selama program
dieksekusi atau, memori yg digunakan untuk var ini dipertahankan selama program dieksekusi
#include <iostream.h>#include <math.h>Int A=5; // var eksternalint jml2bil( int x1, int x2 ) // fungsi standard{ int jml; jml = x1 + x2 + A; return(jml);}
int main(void){ int y,a,b;
cout << "Masukkan 2 bilangan \n"; cin >> a >> b;
y = jml2bil(a,b);
cout << "a is " << a << endl; cout << "b is " << b << endl; cout << "y is " << y << endl; return(0);}
Variabel statis
Var ini dapat berupa var lokal atau global dengan sifat : Jika berupa var lokal maka var tetap hanya dpt
diakses pd fungsi yg mendefinisikan nya Var tidak hilang saat berakhir Inisialisasi hanya dilakukan sekali Jika berupa var global dapat diakses dari
semua file yg didefinisikan (hati hati dalam menggunakannya)
Caranya dengan menambah kata static type-data var-name ;static int x ;
#include <iostream.h>int fncstatis(int);
void main( ){int in,out; in = 1 ;while(in!=0){
cout << "Enter input value:";cin>>in;out=fncstatis(in);cout<<"Result:"<< out;
}cout<<" End of Program"<< out;}
int fncstatis(int x){static int a=0;static int b=0;a++;b=b+x;return(b/a);}
Operator resolusi lingkup(Scope resolution operator ::)
Notasi :: digunakan sebagai operator resolusi lingkup, digunakan untuk mengakses suatu var yg didefinisikan diluar fungsi
x = 50int main(){ float x;
x = 7,5cout << “x “ << x <<“ “<< ::x;return 0; }
Function overloading
Kemampuan suatu fungsi untuk dapat menerima bermacam-macam type data dan bermacam macam nilai balikcontoh:int kuadrat(int i) {return(i * i);}long kuadrat(long k) {return(k*k);}double kuadrat(double d) {return(d*d);}
#include <iostream.h>
int kuadrat(int i) {return(i * i);}long kuadrat(long k) {return(k*k);}double kuadrat(double d) {return(d*d);}
int main(){
cout << kuadrat(5) << endl;cout << kuadrat(37) << endl;cout << kuadrat(2.5) << endl;return 0;
}
Rekursi
Suatu kemampuan dari fungsi untuk dapat memanggil dirinya sendiricontoh:long int pangkat(int x, int n) {
if (n == 1) return(x);else return(x*pangkat(x, n-1)); }
int main() {int p =5; int q = 3; long int r;r = pangkat(p,q);cout << r<<endl; return 0;}
array
Array merupakan koleksi data dimana setiap elemen menggunakan nama dan tipe yang sama serta setiap elemen diakses dengan membedakan indeks array-nya. Berikut adalah contoh variable bernama C yang mempunyai lokasi memori yang semuanya bertipe int.C[0] = -45C[1] =6C[2] =0C[3] =72C[4] =1543C[5] =43C[6] =4didefinisikan sebagai int c[7]atau int c[7] = {-45, 0, 6, 72, 1543, 43, 4}atau int c[] = {-45, 0, 6, 72, 1543, 43, 4}untuk berdimensi 2 -> int c[3][4]
C++ Reference, Pointer dan String
Reference
Referensi digunakan untuk memberi nama alias pada suatu var
int &ref = nama-var Contoh :
int main(){ int i;int &r = i;i=10;cout<< i << r <<endl;
r =50;cout << i << r << end; return 0;}
Pointer
pointer adalah sebuah var yg menyimpan alamat dr suatu var.
...
...
MEMORY
012345
813458134681347
Address
int foo;int *x; (content)
foo = 123;x = &foo;
foo
x
123
3
&foo
Pd C++ kita dapat mengetahui alamat dr suatu variable dengan operator “&” (reference).
...
...
MEMORY
012345
Address
&foo artinya “alamat dr foo”
foo
int foo;
foo = 123;x = &foo;
123
Memberi harga pada var dereferenced pointer
Sebuah pointer harus mempunyai harga sebelum kita melakukan dereference padanya.
int *x;*x=3;
int foo;int *x;x = &foo;*x=3;
ERROR!!!
x tidak menunjuk pada sesuatu
!!! Benar x menunjuk
pd foo
Pointer ke suatu
int *x;int **y;
double *z;
x Sebuah int
y
z sebuah double
Sebuah int Sebuah int
Pointer dan Arrays
array adalah nama dr const pointer. Notasi [] :
int *x;int a[10];x = &a[2];for (int i=0;i<3;i++)
x[i]++;
x adlh alamat a[2] ”
x[i] sama spt a[i+2]
Pointer arithmetic
operasi math integer dpt digunakan pd pointers.
int a[5];
a[0] a[1] a[2] a[3] a[4]
int *ptr = a;
*ptr
*(ptr+2)*(ptr+4)
Passing pointer sbg parameter
void swap( int *x, int *y) {int tmp;
tmp = *x;*x = *y;*y = tmp;
}
Pointer sbg Parameters
Pointers berlaku sbg passed by value (nilai dr pointer adalah alamat).
Kita dpt mengganti apa yg di tunjuk oleh pointer.
Kita dapat meng copy suatu pointer
C++ string
sebuah string adalah null terminated array dari characters. null terminated artinya, terdapat character pd
akhir array yg bernilai 0 (null). Pointer sering digunakan bersama string:
char *msg = “RPI”;
'R'
msg zero (null)
'P' 'I' 0
Fungsi manipulasi String
library utk menangani string:
char * strcpy(char *dst, const char *src)
char * strcat(char *dst, const char *src)
Dan banyak lagi
Contoh String – Hitung jml chars
int count_string( char *s) {int n=0;while (*s) {
n++;s++;
}return(n);
}
Selama pointer yg menunjuk
ke s bukan null
increment countset s ke char berikut
Cara lain
int count_string( char *s) {char *ptr = s;
while (*ptr) {ptr++;
}return(ptr - s);
}
pointer arithmetic!
Latihan
gunakan strcpy Buat sebuah fungsi yg
membandingkan 2 string dan kembalikan hasil sbg true jika sama, dan false jika tidak sama.
buat fungsi untuk menghilangkan spasi dr suatu string.
Pointer void
Dalam C++ dimungkinkan membuat suatu pointer yg tak bertype, dengan cara menuliskan void pada type datanya
void *ptr
keuntungan void pointer adalah dapat menunjukkan sebarang type data, seperti int, float, double atau char
contoh
void *ptr ;int vint = 50 ;float vfl = 50.123 ;ptr = &vint //menunjuk ke intcout << *(int *) ptr << endl;ptr = &vfl //menunjuk ke floatcout << *(float *) ptr << endl;
Pointer dan array
Pointer dan array mempunyai hubungan yg sangat dekat, karena secara internal array juga menyatakan alamat seperti contoh berikut
int tgl_lahir[] = {24, 6, 1990};*ptgl ;
agar ptgl menunjuk ke array, di nyatakan dg
ptgl = tgl_lahir
Pointer dan matrix
int *x;int **y;
x Sebuah array
y Mat baris Mat kolom
int main(){
int r ;cout <<"input jml elemen " ; cin >>
r;cout << endl;
// menyiapkan tempatint *mat = new int[r] ;for( int i=0 ; i<r ; i++)
cin >> mat[i];// tampilkan
for (int j=0 ; j<r ; j++)cout << mat[j] << "\t";
return 0;}
Pointer dan array
*matint *mat
mat
mat kolom*mat baris**mat
int **mat
int main(){ int r, c, i, j;
cout <<"input jml baris " ; cin >> r;cout <<endl;cout <<"input jlm kolom " ; cin >> c;cout << endl;
// menyiapkan tempatint **mat = new int *[r];for ( i = 0; i < r; i++)
mat[i] = new int [c];
// mengisi matrixfor (i = 0 ; i < r ; i++)for (j = 0 ; j < c ; j++){cout << "First Matrix Inputs (Row " << i+1 << ") " << "(Column " << j+1 << ")";cin >> mat[i][j];
}// tampilkan
for (i = 0 ; i < r ; i++) { for (j = 0 ; j < c; j++)
cout << mat[i][j] << "\t" ; cout << endl; }
return 0;}
Latihan buat program dengan menggunakan pointer untuk mengalikan matrix A(mxn) dan matrix B(nxp)
Pointer dan string
char *ptokoh = “superman”;
// ptokoh menunjuk ke stringcout << ptokoh;// mencetak stringsama dengan statementchar tokoh[] = “superman” ;Perbedaan nya adalah :1. ptokoh adlh pointer yg dg mudah dpt diatur agar menunjuk ke data string2. tokoh adlh array yg menyatakan elemen yg konstan tdk dpt berubah, yg dapat di ubah hanya elemen array
contoh
char tokoh[] = “superman”;char *ptokoh = “superman”;cout << “Tokoh ”<<tokoh<<endl;cout << “*ptokoh”<<ptokoh<<endl;// tokoh++ tidak di perkenankanptokoh++ ; // diperkenankancout << “*ptokoh”<<ptokoh<<endl;
Hasil :Tokoh supermanptokoh supermanptokoh uperman
Pointer sebagai argumen fungsi
// definisi fungsivoid ubah_nilai(int x){ x = 95; }
int main(){ int p = 80;cout << “nilai awal “ << pi << endl;ubah_nilai(pi);cout << “nilai skrg “ << pi << endl; return 0;}
Hasilnilai awal 95nilai skrg 80
Perbedaan antara pointer dan referensi
- Referensi adalah alias dari suatu var- Pointer adalah alamat dari suatu var- Pointer merupakan mekanisme
untuk mengubah nilai dari dalam fungsi sedangkan Referensi adalah keistimewaan yg ditawarkan untuk melakukan hal yg sama
Pointer sebagai keluaran fungsi
Suatu fungsi dapat dibuat agar keluaran nya berupa pointer// definisikan fungsichar *warna(int n){ char *warna[] = {“kode salah”,“merah”, “kuning”, “hijau”}; return ((n<1 || n>3) ? Warna[0] : warna[n]); }// program mainint main(){ int w; cout <<“input warna “; cin w; cout << warna(w) ; return 0; }
Memperoleh argumen baris perintah
#include <iostream.h>
int main(int argc, char *argv[]){
for (int i=0 ; i<argc ; i++)cout << "argv[" << i << "] = " << argv[i] << endl;
}
Program ini digunakan untuk membaca argumen baris perintah, misalnya perintah
C:\> format A:Jangan menggunakan secara sembarang !!!