Lingkup Variabel Kelas Penyimpanan Rekursi

Slides:



Advertisements
Presentasi serupa
Fungsi Konsep Pemrograman.
Advertisements

Mata Kuliah: Bahasa C++ Harni Kusniyati
FUNGSI Erizal, S.Si, M.Kom Universitas Respati Yogyakarta
FUNGSI / FUNCTION ALGPROG II
PEMROGRAMAN SISTEM PERNYATAAN DASAR PERULANGAN Pertemuan V
PEMROGRAMAN SISTEM DASAR STRING Pertemuan IX
FUNGSI Deklarasi dan Definisi fungsi Void dan Non-void Fungsi main.
Template.
Fungsi, Parameter, Rekursi Daniel Riano Kaparang Book reference: Jogiyanto. Konsep Dasar Pemrograman Bahasa C. Andi Star. Yogyakarta Kristanto Andri.
SUB-PROGRAM/FUNGSI/ PROSEDUR
Pemrograman Terstruktur
Subprogram Minggu V – VI
Pemrograman Terstruktur
Method.
Template. Templates Teknik membuat tipe data yang berupa arameter, artinya data tersebut dapat berubah - ubah tergantung parameter yang di berikan saat.
3 Variabel, Konstanta Tipe Data dan dalam Bahasa C/C++ Java dan Bab
Pemrograman Terstruktur
Algoritma dan Struktur Data
Review-Dasar Pemrograman Komputer
Pemrograman Dasar Fungsi.
As’ad Djamalilleil Function (method) As’ad Djamalilleil
Struktur (Struct).
Struktur Dalam C++, tipe data struktur yang dideklarasikan dengan kata kunci struct, dapat mempunyai komponen dengan sembarang tipe data, baik tipe data.
SUB-PROSES # PENGANTAR MANFAAT PARAMETER PROSEDUR
Struktur & Kelas Erizal, S.Si, M.Kom Universitas Respati Yogyakarta
STRUKTUR DATA STRUCT DAN POINTER
#include //bagian modul int hitung(x,y) { return(x+y); } //bagian utama main() { int jumlah,a,b; a=8; b=2; jumlah=hitung(a,b); cout
Dasar Komputer & Pemrograman 2A (BAHASA C)
Pertemuan 19 FUNGSI (Method) Bag.2 Dasar Pemrograman Renni Angreni, S.Kom.
Function User Function.
Pemrograman Terstruktur C++ : Person 21 : Imelda Florensia Jayadi Kasenda Risky Radjamuda : Dosen : Ir. Hasanuddin Sirait, MT Created by. imeldaflorensia91.
Bab 05 Tipe Data dan Mengisi Variabel
Dibuat oleh : Renni Angreni, S.Kom.
1 Pertemuan 2 Function & Pointer Matakuliah: T0044/Pemrograman Berorientasi Obyek Tahun: 2005 Versi: 1.0.
PEMROGRAMAN SISTEM PERNYATAAN DASAR FUNGSI Pertemuan VI
Pertemuan 19 FUNGSI (Method) Bag.2 Dibuat oleh : Renni Angreni, S.Kom. Triana Elizabeth, S.Kom.
1 Pertemuan Fungsi Matakuliah: T0016 / Algoritma dan Pemrograman Tahun: 2007 Versi: 6.
1. Pada akhir pertemuan ini, diharapkan mahasiswa akan mampu :  Mendemonstrasikan penggunaan fungsi serta pengiriman parameter 2.
Fungsi, Array dan String
PERSON 20 TUGAS PEMROGRAMAN TERSTRUKTUR C++ CHERIA LOUPATTY MANAJEMEN INFORMATIKA STMIK / AMIK PARNA RAYA MANADO.
Prosedur dan Fungsi Triana Elizabeth, S.Kom.
Tujuan Instruksional Mahasiswa memahami konsep fungsi
Pemrograman Berorientasi Objek Rachmansyah, S.Kom Fungsi.
FUNGSI.
Pengertian FUNGSI.
Class & Object Disusun Oleh: Reza Budiawan Untuk:
Algoritma dan Struktur Data 1 pertemuan 9
Struktur Program TEE 2103 Algoritma dan Pemrograman
Operasi Operator dalam C++ Pertemuan 4 Dasar Pemrograman
Algoritma pemrograman 2a
SUBALGORITMA.
5. Fungsi S. Indriani L, M.T 5. Fungsi.
PEMROGRAMAN SISTEM FUNGSI
Constructor dan Overloading
FUNGSI (Method) Bag.1 Pertemuan 18 Dasar Pemrograman
TEKNOLOGI INDUSTRI PERTANIAN
PERTEMUAN 10 Algoritma Presented by : Sity Aisyah, M.Kom
Castaka agus sugiato, M.Kom., M.CS
As’ad Djamalilleil Function (Fungsi) As’ad Djamalilleil
Subrutin.
Pemrograman Terstruktur
Pemograman Berorientasi Object Sistem Informasi Semster III
Pertemuan 7 pow, sqrt, break, continue
Parameter Ketika procedure atau function dipanggil, kita dapat melewatkan suatu nilai ke dalam function atau procedure tersebut. Nilai yang dilewatkan.
FUNGSI II.
Percabangan dalam VB6: GoTo, GoSub, Sub, Function
Pemrograman Terstruktur
Subrutin Nurdiansah PTIK 09 UNM.
Dasar-dasar Pemrograman Berbasis Obyek. kelas Kelas pada java didefinisikan dengan menggunakan kata kunci class.
Logika dan Algoritma Agung Brastama Putra.
Transcript presentasi:

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

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.

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.

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

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!

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);

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.

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.

Memberitahu kompiler tentang sqrt() Bagaimana kompiler tahu tentang fungsi sqrt ? Kita harus memberitahunya: #include <math.h> Try out the sqrt_table program at http://www.cs.rpi.edu/~hollingd/cpp/code. Try it without the include and with the include.

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

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

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)

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

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); }

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

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

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

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

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.

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.

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

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

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

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.

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.

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

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)

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

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.

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.

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

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

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

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

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

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

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)); }

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

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

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)

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.

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)

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

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

/. 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(” “); }

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.

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.

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

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

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

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