Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

Lingkup Variabel Kelas Penyimpanan Rekursi

Presentasi serupa


Presentasi berjudul: "Lingkup Variabel Kelas Penyimpanan Rekursi"— Transcript presentasi:

1 Lingkup Variabel Kelas Penyimpanan Rekursi
Fungsi dalam C++ Lingkup Variabel Kelas Penyimpanan Rekursi

2 Fungsi dalam C++ Pada bahasa pemrograman lain:
fungsi = sub-program atau prosedur Fungsi memiliki tipe. Jika fungsi tidak harus memiliki nilai balikan, gunakan tipe void.

3 Fungsi dalam C++ (lanj.)
Fungsi dalam C++ memiliki runtun parameter. Parameter: sesuatu yang kita berikan ke fungsi untuk dikerjakan. Tiap parameter memiliki tipe. Bisa juga memiliki nol buah parameter.

4 Contoh Fungsi } int sum2angka(int a, int b) { return(a+b);
Tipe balikan Parameter Nama fungsi int sum2angka(int a, int b) { return(a+b); } Tubuh/ isi fungsi

5 Menggunakan fungsi: Fungsi Library Math
C++ menyediakan library untuk fungsi matematika. Kita harus tahu cara memanggil masing-masing fungsi sebelum menggunakannya. Kita harus tahu balikan yang diberikan! Kita tidak perlu tahu cara kerjanya!

6 double sqrt(double) Ketika memanggil fungsi sqrt, kita harus memasukkan data bertipe double. Fungsi sqrt memberikan balikan bertipe double. Contoh x = sqrt(y); x = sqrt(100);

7 x = sqrt(y); Sesuatu yang kita masukkan ke fungsi disebut dengan argumen, dalam hal ini: y Fungsi dalam C++ tidak dapat mengubah nilai argumen. Jika sebelum sqrt dipanggil, y bernilai 100, maka setelah sqrt dipanggil, y juga bernilai 100.

8 Data berisi akar kuadrat
int i; for (i=1;i<10;i++) cout << sqrt(i) << “\n”; Parameter sqrt()bukankah bertipe double? C++ memiliki konversi otomatis untuk fungsi ini.

9 Memberitahu kompiler tentang sqrt()
Bagaimana kompiler tahu tentang fungsi sqrt ? Kita harus memberitahunya: #include <math.h> Try out the sqrt_table program at Try it without the include and with the include.

10 Fungsi Library Matematika Lainnya
ceil floor cos sin tan exp log log10 pow fabs fmod

11 Membuat fungsi Kita harus menentukan bentuk dari fungsi tersebut:
Tipe balikan Nama Tipe parameter (jumlah parameter) Kita harus menulis tubuh/ isi fungsi (code sesungguhnya)

12 Parameter Fungsi Parameter merupakan variabel lokal dalam tubuh fungsi. Ketika dipanggil, fungsi harus memiliki nilai yang akan diproses. Fungsi memperoleh salinan dari nilai yang dimasukkan (nanti kita akan lihat cara memasukkan nilai ke variabel)

13 Contoh Fungsi int sum2angka(int angka1, int angka2 ) { int sum; sum = angka1 + angka2; // untuk me-reset nilai angka1 = 0; angka2 = 0; return(sum); } Available via the course home page in code/functions/add2nums.cpp

14 Pengujian sum2angka int main(void) { int y,a,b; cout << "Masukkan 2 bilangan\n"; cin >> a >> b; y = sum2angka(a,b); cout << "a berisi " << a << endl; cout << "b berisi " << b << endl; cout << "y berisi " << y << endl; return(0); }

15 Apa yang terjadi? int sum2angka(int a, int b) { a=a+b; return(a); } … int a,b,y; y = sum2angka(a,b);

16 Variabel Lokal Parameter dan variabel yang dideklarasikan di dalam fungsi bersifat lokal. Keduanya hanya berlaku di dalam tubuh fungsi. Ketika fungsi memproses balikan, variabel tidak lagi ada! Tidak mengapa karena tidak diperlukan lagi

17 Variabel Blok Kita juga dapat mendeklarasikan variabel yang muncul hanya di dalam tubuh suatu blok: { int foo; }

18 Variabel Global Kita dapat mendeklarasikan variabel diluar definisi fungsi – variabel ini bersifat global. Sembarang fungsi dapat mengakses/ mengubah variabel global.

19 Lingkup Lingkup variabel adalah sifat keberadaan variabel dalam program. Variabel global memiliki lingkup global (unlimited). Lingkup variabel lokal terbatas pada fungsi yang mendeklarasikan variabel tersebut. Lingkup variabel blok terbatas pada blok yang mendeklarasikan variabel tersebut.

20 Catatan: Lingkup Global vs. Lingkup File
Variabel yang dideklarasikan diluar fungsi dapat diakses siapa saja, namun hanya untuk file tertentu. Lingkup file disebut juga dengan lingkup global.

21 Lingkup Blok int main(void) { int y; { int a = y; cout << a << endl; } Error – a tidak dikenali diluar block!

22 Nesting Dalam C++: Tidak ada nesting (persarangan) untuk fungsi
Kita tidak perlu tahu siapa pemanggil fungsi hanya untuk mengetahui lingkup variabelnya. Tersedia nesting untuk lingkup variabel dalam blok

23 Blok bersarang j k m void foo(void) { for (int j=0;j<10;j++) {
int k = j*10; cout << j << “,” << k << endl; { int m = j+k; cout << m << “,” << j << endl; } j k m Available on the course home page in code/functions/blockscope.cpp

24 Kelas Penyimpanan Tiap variabel memiliki kelas penyimpanan.
Untuk menentukan periode lamanya variabel berada dalam memori. Beberapa variabel dibuat hanya sekali (memori diatur untuk menyimpan nilai variabel) Variabel global dibuat hanya sekali. Beberapa variabel lainnya dibuat berulang-ulang. Variabel lokal dibuat berulang-ulang tiap kali suatu fungsi dipanggil.

25 Kelas Penyimpanan auto – dibuat tiap kali suatu blok diproses.
register – sama seperti auto, namun kompiler diberitahu untuk mengerjakannya dengan segera. static – dibuat hanya sekali, walaupun sifatnya lokal. extern – variabel global yang dideklarasikan di tempat lain.

26 Menyebutkan Kelas Penyimpanan
auto int j; register int i_dengan_segera; static char ingatlah_aku; extern double a_global; C++ Spring Functions

27 Penggunaan Praktis Kelas Penyimpanan
Variabel lokal, umumnya berbentuk auto Variabel global, umumnya berbentuk static Mendeklarasikan variabel lokal sebagai static artinya nilai terakhir dari variabel akan selalu diingat (tidak dihapus dan dibuat ulang tiap kali lingkup diproses)

28 Contoh static int panggil_hitung(void) { static int hitung = 0; hitung++; return(hitung); } … cout << panggil_hitung() << endl; Available on the course home page in code/functions/countcalls.cpp

29 Lingkup Fungsi Dalam C++, sangat diperhatikan lingkup dari suatu pengenal (nama) Dapat berupa fungsi atau variabel (atau kelas) Nama fungsi memiliki lingkup file Semua yang mengikuti definisi fungsi pada file yang sama dapat menggunakan fungsi. Kadangkala hal ini tidak tepat Kita ingin memanggil fungsi di bagian atas dari file dan mendefinisikannya di bagian akhir file.

30 Prototip Fungsi Prototip fungsi dapat digunakan untuk memberitahu kompiler bentuk dari fungsi. Sehingga dapat diproses meskipun kompiler belum memeriksa definisi fungsi tersebut. Prototip fungsi menentukan nama fungsi, tipe balikan, dan tipe parameter.

31 Contoh prototip double sqrt(double); int sum2angka(int , int ); int hitung(void);

32 Menggunakan prototip int hitung(void); int main(void) { cout << hitung() << endl; } int hitung(void) { static int hitung = 0; hitung++; return(hitung);

33 Fungsi yang saling memanggil
foo1 foo2() foo2 foo1()

34 Fungsi Ganda char *ayam(int generasi) { if (generasi == 0)
return(“Ayam!"); else return(telur(generasi-1)); } char *telur(int generasi ) { if (generasi == 0) return(“Telur!"); else return(ayam(generasi-1)); } Code is available on the course web site in code/functions/dualing.cpp

35 Telur vs Ayam char *telur(int); char *ayam(int); int main(void) { int angkamulai; cout <<“Memulai kelompok ayam mu”<< endl; cin >> angkamulai; cout <<“Ayam mu diawali dengan " << ayam(angkamulai) << endl; return(0); } dualing.cpp

36 Rekursi Fungsi yang dapat memanggil dirinya sendiri disebut dengan rekursi. Rekursi sangat berguna – kadangkala untuk mengekspresikan komputasi rekursif kompleks.

37 Ayam Rekursif char *ayam_atau_telur(int gen) { if (gen == 0) return(“Ayam!"); else if (gen == 1) return(“Telur!”); else return(ayam_atau_telur(gen-1)); }

38 Contoh lainnya - Perhitungan Faktorial
int faktorial(int x) { if (x == 1) return(1); else return(x * faktorial(x-1)); } Available on the course home page in code/functions/factorias.cpp

39 Mendesain Fungsi Rekursif
Definisikan “proses dasar” Situasi ketika fungsi tidak memanggil dirinya sendiri. Definisikan “langkah rekursif” Menghitung nilai balikan bantuan dari fungsi tersebut.

40 Proses Dasar Rekursi Proses dasar berkaitan dengan situasi yang kita dapat ketahui jawabannya (fungsi memberikan nilai balikan dengan cepat) atau dapat dengan mudah menghitung jawabannya. Jika proses dasar tidak dimiliki, jangan gunakan rekursi! (dan mungkin masalah yang ingin diselesaikan belum dipahami)

41 Langkah Rekursi Gunakan pemanggilan rekursi untuk menyelesaikan sub-masalah. Parameter harus berbeda (atau pemanggilan rekursi tidak memberikan solusi yang baik) Kita biasanya harus melakukan sesuatu selain melakukan pemanggilan rekursi.

42 Rekursi: Topik Tes yang Menarik
Tuliskan fungsi rekursif C++ yang dapat menghitung area persegi nxn. n Proses dasar: n=1 area=1 Langkah rekursif: area = n+n-1+area(n-1)

43 Fungsi Area Rekursif int area(int n) { if (n == 1) return(1); else return(n + n area(n-1)); }

44 Latihan Rekursif Tuliskan suatu fungsi yang dapat mencetak segitiga:
segitiga(4); segitiga(5); * * *** *** ***** ***** ******* ******* *********

45 /. Program to print the Pascal’s triangle recursively
/* Program to print the Pascal’s triangle recursively */ #include<stdio.h> int pascal(int,int); void space(int,int); main() { int num,i,j; printf(“\nEnter the no. of rows required: “); scanf(“%d”,&num); for(i=1;i<=num;i++) { space(num-i,3); for(j=1;j<=i;j++) { printf(“%3d”,pascal(i,j)); space(1,3); } printf(“\n”); } } int pascal(int row,int column) { if(column==0) // The 0th column element is assumed to 0 return 0; else if(row==1&&column==1) return 1; else if(column>row) // assuming the element is zero (no of columns> no of rows) return 0; else return (pascal(row-1,column-1)+pascal(row-1,column)); } void space(int num,int mul) // for spaces in between elements { int i; num*=mul; for(i=0;i<num;i++) printf(” “); }

46 Pemanggilan berdasar nilai vs. Pemanggilan berdasar referensi
Kita telah mempelajari fungsi yang memiliki salinan dari pemanggil yang memasukinya. Ini merupakan pemanggilan berdasar nilai, karena nilainya yang dimasukkan (nilai dari variabel) Kita juga dapat mendefinisikan fungsi yang melewatkan referensi ke variabel. Ini disebut pemanggilan berdasar referensi, fungsi dapat mengubah variabel pemanggil secara langsung.

47 Referensi Variabel referensi adalah nama lain dari variabel. Suatu jalan pintas. Variabel referensi harus diinisialisasikan untuk merujuk variabel lainnya. Ketika referensi diinisialisasi, kita dapat memperlakukannya seperti variabel lainnya.

48 Deklarasi Variabel Referensi
Untuk mendeklarasikan variabel referensi, awali nama variabel dengan “&” int &foo; double &blah; char &c;

49 Contoh Variabel Referensi
int hitung; int &sesuatu = hitung; // sesuatu sama dengan variabel hitung hitung = 1; cout <<“sesuatu adalah “<<sesuatu<< endl; sesuatu++; cout << “hitung adalah “ <<hitung<< endl; Code is on the course home page in code/functions/testref.cpp

50 Parameter Referensi Kita dapat mendeklarasikan parameter referensi.
void tambah10(int &x) { x = x+10; } tambah10(hitung); Parameter merupakan referensi Code is on the course home page in code/functions/testref.cpp

51 Contoh berguna dari Referensi
void tukar(int &x, int &y) { int sementara; sementara = x; x = y; y = sementara; }


Download ppt "Lingkup Variabel Kelas Penyimpanan Rekursi"

Presentasi serupa


Iklan oleh Google