Wednesday, November 6, 2013

Tugas Pemrogaman Terstruktur

Fungsi Prototipe

Prototipe fungsi digunakan untuk mendeklarasikan ke kompiler mengenai tipe data :
*) Tipe Data keluaran dari fungsi
*)Jumlah parameter yang digunakan
*)Tipe Data dari masing-masing parameter yang digunakan
Keuntungan Memakai Prototipe
-)Kompiler akan melakukan konversi antara tipe parameter dalam definisi dan parameter fungsi
-)Jika Jumlah Parameter yang digunakan dalam definisi fungsi dan pada saat pemanggilan fungsi berbeda         atau tidak sama maka akan menunjukkan kesalahan
Untuk membuat suatu function, diperlukan suatu prototype dari function tersebut,Prototype function memiliki sintaks sbb:
returned_value_data_type nama_function(argumen);
Seperti halnya dalam Pascal, suatu function dapat mengembalikan (return) suatu nilai (value) yang tergantung tipe datanya. Tipe data value yang dikembalikan inilah yang dimaksud dengan returned_value_data_type.




Sedangkan argumen merupakan parameter-parameter yang akan diolah dalam function tersebut. Argumen boleh ada boleh tidak, sesuai kebutuhan. Apabila parameter argumennya lebih dari satu, cara penulisannya sbb:
tipe_data param1, tipe_data param2, ...
Contoh penulisan prototype function:
- double kuadrat(int x);
- float luas_segitiga(float alas, float tinggi);
- int jumlah_bil(int x, int y, int z);
Apabila suatu function tidak mengembalikan nilai, maka
returned_value_data_type nya diisi void.
Setelah prototype function dibuat, selanjutnya membuat function tersebut secara detail. Suatu function disebut juga subprogram, oleh karena itu strukturnya juga sama dengan struktur program utama. Pada contoh function garis() di atas, detail
dari function tersebut adalah:





DEFINISI FUNGSI
Fungsi adalah modul progam yang memberikan/mengembalikan(return) sebuah nilai yang bertipe sederhana(integer,Boolean,dan string).
Struktur Fungsi sama dengan struktur algoritma yang sudah anda kenal ada bagian header yang berisi nama fungsi dan spesifikasi fungsi,bagian deklarasi dan badan fungsi
Ada 2 Jenis Fungsi,
Fungsi yang mempunyai nilai kembalian (return value)
Seperti kita ketika menulis fungsi matematika y=f(x), kita mempunyai sebuah fungsi dengan nama x yang memproses x untuk menghasilkan suatu nilai yang isinya akan disimpan oleh y.  Ketika dipanggil fungsi jenis ini akan memberikan suatu hasil kembalian.
2. Fungsi yang tidak mempunya nilai kembalian.
Sering disebut sebagai prosedur. Berisi urutan proses yang tidak memberikan suatu ouput yang dapat ditangkap oleh suatu variable.
Struktur umum:
Tipe_kembalian nama_fungsi ( argumen1, argumen2, … )
{
statement – statement;
return value;
}
Deklarasi dari fungsi ditulis tanpa dengan menyebutkan argumen-argumen fungsinya. Sebenarnya argumen-argumen dari fungsi dan tipe datanya dapat juga dituliskan. Deklarasi seperti ini disebut dengan prototype fungsi.
Suatu fungsi yang memberikan hasil balik (return value) selain integer perlu dideklarasikan sebelum digunakan. Deklarasi fungsi ditulis sebelum fungsi tersebut digunakan. Akan tetapi sebaiknya setiap fungsi dideklarasikan terlebih dahulu
Deklarasi Fungsi:
tipe nama_fungsi( argumen1, argumen2, … );  // (Tanpa ada badan fungsi atau statement)
Jika suatu fungsi memberikan kembalian suatu nilai, maka nilai hasil balik yang diberikan oleh fungsi dapat dilakukan oleh statement return yang diikuti oleh nilai hasil baliknya yang ditulis tanda kurung. Contoh : return(F);
Semua pengenal (identifiers) di C harus dideklarasikan sebelum digunakan. Hal ini berlaku untuk fungsi serta variabel.Untuk fungsi deklarasi perlu sebelum panggilan pertama dari fungsi tersebut dilakukan.Sebuah deklarasi penuh termasuk tipe return (return type) dan nomor (jumlah) serta jenis argumen. Ini disebut prototipe fungsi
Sebagai contoh Fungsi untuk menentukan apakah sebuah bilangan bulat merupakan bilangan genap atau ganjil
FUNGSI
Function GENAP( input n: integer )-àboolean
{Mengembalikan nilai true jika n adalah bilangan genap,false jika sebaliknya

Progam Pemanggil
Algoritma Genap_Ganjil
Deklarasi
Bil:Integer
Function GENAP (input n:integer)à Boolean
{mengembalikan nilai true jika n adalah bilangan genap false jika sebaliknya }
Deskripsi
Read(bil)
If GENAP (bil) then
                Write(n, ‘adalah bilangan genap’ )
Else
                Write (n, ‘ adalah bilangan ganjil)
Endif



Tambahan: Versi yang lebih lama dari bahasa C tidak memiliki prototipe, deklarasi fungsi hanya ditentukan jenis return (return type) dan tidak mencantumkan jenis argumen. Setelah prototipe tersedia, sebelum penggunaan pertama dari fungsi,memungkinkan compiler untuk memeriksa bahwa jumlah yang benar dan jenis argumen yang digunakan dalam panggilan fungsi dan nilai kembalian (return value), jika ada, yang digunakan sudah cukup.Definisi fungsi itu sendiri dapat bertindak sebagai deklarasi fungsi implisit. Ini digunakan dalam contoh di atas dan mengapa jumlah dimasukkan sebelum main (fungsi utaman). Jika order terbalik compiler tidak akan mengakui jumlah sebagai fungsi. Untuk memperbaiki ini, prototipe dapat ditambahkan sebelum main (fungsi utama).

FUNGSI TANPA NILAI BALIK(Void)
Bahasa pemrograman C++ harus memiliki fungsi (funtion), minimal satu fungsi yaitu fungsi main(). Dalam C++, program merupakan kumpulan dari fungsi-fungsi, baik itu fungsi yang didefenisikan secara langsung dalam program maupun fungsi yang disimpan dalam suatu file header.
C++ mempunyai fungi utama yang disebut fungsi main ( ). Fungsi utama ini selalu ada dalam setiap program C++ dan compiler akan menjalankan program melalui perintah-perintah yang terdapat dalam fungsi ini.
Fungsi merupakan subprogram yang berguna untuk membuat program dapat menjadi medular sehingga akan lebih mudah dipahami dan dapat digunakan kembali, baik untuk program itu sendiri maupun untuk program lain yang memiliki proses yang sama.
-Tanpa Nilai Balik, 
Dalam pemrograman C++ bukanlah bahasa prosedural, karena prosedur tidak mempunyai nilai balik. Untuk melakukan hal ini di dalam C++, maka harus membuat suatu fungsi dengan tipe void, yang berarti tidak memiliki nilai balik (return value). contoh:
void nama_fungsi (parameter)
{
Pernyataan_yang_akan_dilakukan;
……………
}
Ciri-ciri dari jenis fungsi Void(Tanpa Nilai Balik) adalah sebagai berikut: 
o    Tidak adanya keyword return.
o    Tidak adanya tipe data di dalam deklarasi fungsi.
o    Menggunakan keyword void.
o    Tidak dapat langsung ditampilkan hasilnya.
o    Tidak memiliki nilai kembalian fungsi
o     Keyword void juga digunakan jika suatu function tidak mengandung suatu parameter apapun.
o    Void : void tampilkan_jml (int a, int b) 
Contoh Penggunaan Void Dalam Progam

 #include<iostream.h>
     void tampilkan() // argumen kosong
     {
     cout<<"Terima Kasih telah mengunjungi blog saya"<<endl;
     cout<<"Bla...Blaa..Bla.."<<endl;
     cout<<"\t Silahkan tinggalkan komentar anda"<<endl;
     }

 Lingkup Variabel
Pemahaman terhadap lingkup variable didalam penulisan fungsi sangatlah penting, agar tidak salah dalam menggunakan suatu variable. Lingkup variable menentukan keberadaan suatu variable tertentu didalam fungsi. Ada variable yang hanya dikenal disuatu fungsi dan tidak dikenal pada fungsi lain. Namun ada juga variable yang dapat di akses oleh semua fungsi.
Jenis variable berdasarkan kelas penyimpanannya, yaitu :
v Variabel otomatis.
v Variable eksternal.
v Variable statis.
Variabel Otomatis.
Variabel yang didefinisikan didalam suatu fungsi berlaku sebagai variabel lokal bagi fungsi. Artinya, variable tesebut hanya dikenal didalam fungsi tempat variable didefinisikan.
/*…….Contoh untuk memperlihatkan efek variabel……….*/
/*…….otomatis (lokal)…………………………….*/
#include<iostream.h>
#include<conio.h>
void alpha(); //prototipe fungsi
void main()
{
int x = 22; //variable lokal pada main()
double y = 2.22; //begitu juga pada variable ini
clrscr();
cout<<”Pada main(): x =”<<x
<<”y =”<< y <<endl;
alpha(); //panggil variable alpha
cout<<”Pada main(): x =”<<x
<<”y =”<< y <<endl;
}
//definisi fungsi alpha()
void alpha()
{
int x = 20; //variable lokal pada main()
double y=3.14; //begitu juga pada variable ini
cout<<”Pada main(): x =”<<x
<<”y =”<< y <<endl;
}
Variable Eksternal.
Varibel eksternal merupakan kebalikan dari variable otomatis. Variable eksternal adalah varibel yang didefinisikan diluar fungsi manapun. Variable ini dikenal juga sebagai variable global, sebab variable ini dikenal di semua fungsi.
Guna memperjelas bahwa suatu variable didalam suatu fungsi merupakan variable eksternal, didalam fungsi yang menggunakannya, kita dapat mendeklarasikan (bukan mendefinisikan, karena tidak ada pengalokasian memori) dengan menambahkan kata kunci extern didepan tipe data. Kata kunci menyatakan bahwa variable tersebut didefinisikan di tempat lain.
/*……….Contoh variable eksternal………………*/
#include<iostream.h>
#include<conio.h>
int oblada = 550; //variable eksternal
void tambah(); //prototipe fungsi
void main()
{
clrscr(); //hapus layar
cout<<oblada<<endl;
tambah();
cout<<oblada<<endl;
tambah();
cout<<oblada<<endl;
}
//definisi fungsi
void tambah()
{
oblada++; //variable eksternal dinaikkan
}

Variabel Statis.
Baik variable eksternal maupun otomatis dapat berkedudukan sebagai variable statis. Suatu variable statis mempunyai sifat :
o Jika variable lokal berdiri sebagai variable statis, maka :
ü Variabel tetap hanya dapat diakses pada fungsi yang mendefinisikannya .
ü Variabel tidak hilang saat eksekusi fungsi berakhir. Nilai akan tetap dipertahankan, sehingga akan dikenali pada pemanggilan fungsi untuk tahap berikutnya.
ü Inisialisasi oleh pemrogram akan dilakukan sekali saja selama program dijankan. Jika tidak ada inisialisasi secara eksplisit, variable diisi dengan nol.
o Jika variable eksternal dijadikan sebagai variable statis, variable ini dapat di akses oleh semua file yang didefinisikan pada file yang sama dengan variable eksternal tesebut (hal ini bermanfaat pada pemrogram file berganda atau kode program dituh pada beberapa file).
o Variable statis diperoleh dengan menamahkan kata kunci static didepan tipe variable pada pernyataan pendefinisian.
/*………Contoh untuk menunjukkan efek…………….*/
/*…………….varible statis……………………*/
#include<iostream.h>
#include<conio.h>
void saya_ingat(); //prototipe fungsi
void main()
{
int mamamia = 50;
clrscr(); //hapus layar
saya_ingat();
saya_ingat();
saya_ingat();
cout<<”main() : mamamia =”<<mamamia<<endl;
}
//pada fungsi berikut
//mamamia didefinisikan sebagai variabel statis
void saya_ingat()
{
static int mamamia = 77; //variable statis
mamamia++; //naikkan sebesar 1
cout<<”saya_ingat(): mamamia =”<<mamamia<<endl;

}

Argumen Fungsi
Argumen Fungsi adalah nilai bawaan yang akan disertakan saat pemanggilan fungsi




Inline Function
Fungsi digunakan di dalam program diantaranya adalah untuk membentuk program yang terstruktur. Namun pemakaian fungsi kadang-kadang berlebihan. Sebab argumen-argumen fungsi harus diletakkan didalam stack pada saat pemanggilan fungsi. Kemudian pada saat fungsi berakhir, argumen-argumen yang ada padastack perlu dikosongkan lagi. Sebagai akibat akan memperlambat eksekusi, terutama kalau fungsi sering dipanggil (misalnya pada pengulangan proses dengan while ).
Masalah seperti itu diatasi oleh C++ dengan menggunakan inline function. Sebuah inline function dibentuk dengan cukup menyisipkan kata kunci inline didepan tipe nilai balik fungsi dalam pendefisian fungsi.
Inline function disarankan dipakai pada fungsi yang sering dipanggil dan ukurannya kecil (terdiri satu atau dua pernyataan). Terutama jika dilibatkan pada pernyataan pengulangan proses (while, for dan do-while).
/*……Contoh pembuatan fungsi inline…………..*/
#include<iostream.h>
#include<conio.h>
//definisi fungsi sebagai inline
inline int jumlah(int x,int y)
{
return(x + y);
}
void main ()
{
clrscr();
for (int i = 1; i <100; i++)
cout << i <<”.” << jumlah(i, 2*i) << endl;

}

Nilai Bawaan Untuk Argumen Fungsi
Salah satu keistimewaan C++ yang sangat bermanfaat dalam pemrograman adalah adanya kemampuan untuk menyetel nilai bawaan (default) argumen fungsi. Argumen-argumen yang mempunyai nilai bawaan nantinya dapat tidak disertakan didalam pemanggilan fungsi dan dengan sendirinya C++ akan menggunakan nilai bawaan dari argumen yang tidak disertakan.Sebagai contoh liat dua contoh progam di bawah ini:
Contoh 1
void tulis_cplus (int jum)
{
for (int i=0;i<jum;i++)</jum;i++)
cout<<”C++”<<endl;</endl;
cout<<”Selesai”;
}
Fungsi diatas akan menampilkan tulisan C++ sebanyak jum kali. Setelah menampilkan tulisan tersebut, fungsi akan menampilkan tulisan “Selesai”. Jika mau menampilkan tulisan C++ sepuluh kali, pemanggilamnya berupa:
tulis_cplus(10);
Kalau hanya mau menampilkan sebuah tulisan C++, pemanggilanya berupa:
tulis_cplus(1);



Contoh 2
/*…..Contoh mengatur nilai bawaan terhadap argumen……..*/
/* pada fungsi yang memiliki dua buah program */
#include<iostream.h>
#include<conio.h>
//prototipe fungsi dan penyetelan nilai bawaan
//pada argumen ke dua
void ulang(char karakter =’-',int jum =10);
void main()
{
ulang(‘*’,5); //tampilkan * sebanyak 5 kali
ulang(‘+’); //tampilkan + sebanyak 10 kali
ulang(); //tampilkan – sebanyak 10 kali
}
//definisi fungsi
void ulang(char karakter,int jum)
{
for (int i = 0;i<jum; i++)
cout<<karakter;
cout<<endl;
}


Argumen By Value
Jika sebelumnya membahas Argumen Fungsi kali ini membahas Argumen by Value yaitu Argumen yang ditentukan oleh nilai sebagai contoh kita mengambil konversi dari string ke angka atau sebaliknya

Membalik string dengan strrev()
//* contoh pemakaian strrev() untuk membalikstring
#include <iostream.h>
#include <conio.h>
#include <string.h>
void main()
{
char kompiler[ ] = “Borland C++”;
clrscr();
strrev(kompiler);
cout<< kompiler<<endl;
}
Contoh menyalin string dengan strcpy()
//* contoh pemakaian strrev() untuk membalikstring
#include <iostream.h>
#include <conio.h>
#include <string.h>
void main()
{
char teks[ ] = “C++ ok”;
char data[25];
clrscr();
strcpy(data, teks);
cout<<”isi data : “<< data<<endl;
}

Function Overloading
Function Overloading terjadi sewaktu anda mendefisinikan kembali fungsi dengan sedemikian rupa sehingga fungsi itu bisa dipakai dalam beberapa versi di dalam satu program. Dalam bahasa C dua fungsi tidak bisa nemiliki scope yang sama. Dengan konsep function overloading itu C++ bisa mengatasi problem yang ada di bahasa C.
Function overloading atau overloading terhadap fungsi merupakan kemampuan C++ yang memungkinkan sebuah fungsi dapat menerima bermacam-macam tipe dan mamberikan nilai balik yang bervariasi pula. Ada beberapa alasan mengapa dilakukan funtion overloading:
· karena fungsi tertentu memiliki tugas generik (bisa dipakai dimana mana) tapi pemakaian lainnya memerlukan sedikit perubahan.
· karena kita menginginkan hasil yang sama dari nilai data yang bisa disajikan dalam berbagai format.
/*………contoh overloading terhadap fungsi…….*/
#include<iostream.h>
#include<conio.h>
//prototipe fungsi
int kuadrat (int i);
long kuadrat (long l);
double kuadrat (double d);
void main()
{
cout<<kuadrat(2)<<endl;
cout<<kuadrat(66666)<<endl;
cout<<kuadrat(1.2)<<endl;
}
//definisi fungsi
int kuadrat(int i)
{
return (i*i);
}
long kuadrat (long l)
{
return (l*l);
}
double kuadrat(double d)
{
return(d*d);
}
Contoh lain:
/*……Contoh overloading terhadap fungsi dengan…..*/
/*………jumlah argumen berlainan……………….*/
#include<iostream.h>
#include<conio.h>
void tampil(int i);
void tampil(int i,char *str);
void main()
{
clrscr();
tampil(5);
tampil(7,”Bintang”);
}
void tampil(int i)
{
cout<<i<<endl;
}
void tampil(int i,char * str)
{
cout<<i<<’ ‘<<str<<endl;
}

Rekursi
Rekursi adalah suatu proses dari fungsi yang memanggil dirinya sendiri.Fungsi yang seperti ini disebut fungsi rekursif.Dalam fungsi rekursif pemanggilan dapat terjadi berulang kali,Karena ada proses yang berulang-ulang maka harus ada suatu kondisi yang mengakhiri prosesnya Jika tidak maka proses tidak akan pernah berhenti sampai memori penuh.Pemecahan masalah dengan pendekatan rekursif dapat dilakukan jika masalah tersebut dapat didefinisikan secara rekursif yaitu masalah dapat diuraikan menjadi masalah yang lebih sederhana.
Sebagai contoh :
2 pangkat 3
2 pangkat 1 = 2
2 pangkat 2 = 2 x 2                    = 2 pangkat 1 x 2
2 pangkat 3 = 2 x 2 x 2              = 2 pangkat 2 x 2
berdasarkan contoh di atas, kita dapat menentukan base case dan relative casenya. yang antara lain :
Base Case :  x pangkat 1 = x
Relative Case : x pangkat n = x * x pangkat (n-1)
kalau diterapkan dalam program
kalau diterapkan dalam program
int pangkat (int x,int n)
{
if(n==1)
return (x);
else
return(x * Pangkat(x,n-1);
}
setelah menulis program di atas, kita tinggal mengambilnya dan memasukkannya ke dalam void main, seperti 


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


Fungsi Dengan jumlah Argumen bervariasi
Fungsi dengan Argumen bervariasi pada kali ini membahas tipe-tipe argument apa saja yang digunakan Sebagai contoh pada
Pengiriman Data Konstanta ke Fungsi
Mengirimkan data konstanta ke fungsi lain dapat dilakukan dengan cara mudah dapat dilihat dari progam berikut

Pengiriman Data Variabel ke Fungsi
Bentuk Pengiriman data variable ke fungsi sama halnya dengan pengiriman suatu nilai data ke konstanta ke suatu fungsi hanya saja nilai yang dikirimkan tersebut selalu berubah-ubah.Bentuk Pengiriman tersebut dapat dilihat dengan progam berikut.













Afrian Anggara Putra                        12410200080

Daftar Pustaka

Buku Algoritma & Pemrograman Dalam Bahasa Pascal dan C Rinaldi Munir

No comments:

Post a Comment