Minggu, 20 November 2011

TUGAS KULIAH LOGIKA &ALGORITMA (FUNGSI C++)

Bab 5: Fungsi I

5.1    Pengenalan:

§  Fungsi merupakan blok binaan penting dalam pembikinan aturcara C++.
§  Di dalam aturcara C++ mesti terdiri daripada sekurang-kurangnya SATU fungsi, dan sekiranya hanya ada satu saja fungsi dalam satu program itu, fungsi itu adalah fungsi main().
§  Fungsi main() akan dipanggil secara sendirinya, manakala fungsi-fungsi lain yang mempunyai nama-nama (pencam) yang diberikan oleh pengaturcara perlu dipanggil dengan menggunakan cara-cara tertentu sekiranya kita mahu menggunakan fungsi itu.
§  Fungsi memudahkan pengaturcara menulis atau menyelenggara program.

5.2    Struktur Fungsi

Sesuatu Fungsi dalam C++ mempunyai struktur yang berikut:

Jenis pulangan Nama_fungsi (senarai parameter)
{
  pengisytiharan dan pernyataan;
}

Nama_fungsi = sesuatu nama yang diberi sebagai pencam (identifier)

5.3    Pengisytiharan dan Definasi Fungsi:

§  Fungsi juga perlu diisytiharkan sepertimana pembolehubah sebelum ia dipanggil atau digunakan.
§  Pengisytiharan memberitahu pengkompil nama, bentuk pulangan data(return type) dan parameter fungsi itu.
§  Pendefinasian pula memberitahu pengkompil bagaimana fungsi itu berkerja.
§  Tidak ada fungsi yang boleh dipanggil sebelum iannya diisytiharkan. Walau bagaimanapun, fungsi main() adalah terkecuali daripada syarat ini kerana main() ini telahpun diketahui oleh pengkompil.
§  Terdapat tiga cara untuk mendeklarasi sesebuah fungsi.
1.   menulis prototaip fungsi tersebut ke dalam sebuah fail, kemudian memanggilnya semula ke dalam fail utama dengan menggunakan arahan #include.
2.   menulis prototaip di dalam fail di mana fungsi itu akan digunakan.
3.   mendefinasikan(define) fungsi tersebut sebelum ianya dipanggil oleh fungsi lain. Dengan melakukan cara ini, definasi itu akan bertindak sebagai pengisytiharan ke atas dirinya sendiri.

5.4    Panggilan Fungsi


§  Sesuatu fungsi boleh dipanggil oleh fungsi yang lain atau oleh fungsi itu sendiri.
§  Lazimnya sesuatu fungsi itu kerap dipanggil oleh fungsi main().

5.5    Fungsi Prototaip:

§  Fungsi prototaip perlu diisytiharkan sebelum fungsi itu dapat digunakan.
§  Fungsi prototaip ialah satu baris pernyataan. Oleh kerana ia adalah sejenis pernyataan, maka tanda semikolon(";") perlu diletakkan di penghujung baris.
§  Fungsi prototaip terdiri daripada jenis data yang akan dipulangkan oleh fungsi tersebut(return), nama fungsi dan senarai parameter.
§  Nama parameter tidaklah menjadi kewajipan; yang penting jenis data parameter tersebut perlu ditulis. Ini bermakna fungsi prototaip berikut adalah sah.

int Bahagi(int, int);

§  Walau bagaimanapun, kebiasannya nama parameter ditulis bersama-sama dan ini adalah cara yang lebih bijak.
§  Cara sebegini(di bawah) adalah lebih biasa digunakan dan mudah untuk difahami. (*Rujuk 5.7 di bawah)

int Bahagi(int pengatas, int pembawah);

5.6    Definasi fungsi:

§  Sepertimana yang dikatakan tadi, pendefinasian fungsi memberitahu kompiler bagaimana fungsi itu berkerja.
§  Definasi fungsi terdiri daripada pengepala dan pernyataannya.
§  Pengepala fungsi tersebut adalah sama seperti pengisytiharan prototaipnya kecuali parameter MESTI dinamakan dan di penghujung baris tersebut tidak mempunyai semikolon.
§  Badannya pula terdiri daripada kenyataan- kenyataan(statements) yang berada di dalam pendakap(brace).
§  Berikut adalah contoh program yang mengira isipadu sesebuah kiub(sebagai contoh; kotak).

Contoh:

#include <iostream.h>

int Isipadu(int nPanjang, int nLebar, int nTinggi); // deklarasi prototaip fungsi

int main()
{
int pjg, leb, tgi, volume;
cout << "masukkan Panjang" << endl;
cin >> pjg;
cout << "masukkan Lebar" << endl;
cin >> leb;
cout << "masukkan Tinggi" << endl;
cin >> tgi;
volume = Isipadu(pjg, leb, tgi); // fungsi Isipadu dipanggil
cout << "" << endl;
cout << "Isipadunya ialah " << volume << " unit padu" << endl;
return 0;
}

int Isipadu(int nPanjang, int nLebar, int nTinggi)
{
        return nPanjang * nLebar * nTinggi;
}

Output:

masukkan Panjang
2
masukkan Lebar
3
masukkan Tinggi
2
Isipadunya ialah 12 unit padu

§  Untuk sesuatu program yang besar, fungsi adalah sangat-sangat perlu.
§  Amalan pengaturcaraan yang baik ialah dengan memecahkan program kita supaya menjadi fungsi-fungsi yang berasingan.
§  Berbalik kepada program di atas, deklarasi prototaip boleh dibuat serentak dengan definasi fungsi dengan syarat deklarasi ini hendaklah dibuat sebelum fungsi itu dipanggil untuk digunakan.

Lihat Contoh program di bawah pula.

Contoh :

#include <iostream.h>

void FungsiDua();

void FungsiSatu() // deklarasi prototaip dan definasi fungsi secara serentak!
{
        cout << "FungsiSatu() dilaksanakan...... " << endl;
}

void main()
{
        cout << "main() dilaksanakan......... " << endl;
        FungsiSatu();
        FungsiDua();
}

void FungsiDua()
{
cout << "FungsiDua() dilaksanakan....... " << endl;
}

Penerangan:

§  Mula-mula kita lihat FungsiSatu() terlebih dahulu di baris. Di baris ini, pengisytiharan prototaip dan definasi fungsi berlaku serentak.
§  Di dalam fungsi main(), FungsiSatu() dipanggil untuk dilarikan(run). Dalam kes FungsiSatu() ini, deklarasi-definasi berlaku terlebih dahulu, kemudian barulah fungsi itu dipanggil untuk digunakan.
§  Sekiranya FungsiDua() dipanggil untuk digunakan tanpa meletakkan/mengisytiharkan fungsi prototaip di bahagian atas program, kesalahan(error) akan berlaku.


5.7    Komunikasi Antara Fungsi


§  Apabila sesuatu fungsi dipanggil oleh sesuatu fungsi yang lain, fungsi pemanggil (caller) boleh menghantar sesuatu data kepada fungsi tersebut (callee).
§  Komunikasi atau pertukaran data antara fungsi “caller” dan “callee” dibuat melalui tiga cara samada:
1.   Melalui pembolehubah sejagat(global)(*Rujuk 5.71 di bawah)
Setiap perubahan yang berlaku ke atas pembolehubah sejagat di dalam fungsi dapat dirassai oleh semua fungsi lain.
Contoh:

int jumlah;

void Fun1();
void Fun2();

void main()
{
          int indeks=1;
          for (;indeks<30;indeks++)
                   Fun1();
          cout<<”jumlah ialah”<<jumlah;
}

void Fun1()
{
          jumlah++;
}

void Fun2()
{
          int g=0;
g=jumlah *jumlah;
cout<<”Gandadua jumlah ialah”<<g;
}

2.    Melalui pernyatan pulangan dalam fungsi yang akan memulangkan sesuatu nilai dari fungsi tersebut (*Rujuk 5.8)
Data dari fungsi (callee) dapat dihantar pulang ke fungsi yang memanggil (caller).
     Contoh:
    
     Int Fun3(int p, int j)

     {
              return p*j;
     }

     void main()
     {
              int a=4, b=3, hasil;

              hasil=Fun3(a,b);
     }

     Pembolehubah hasil akan mempunyai nila yang dipulangkan oleh fungsi Fun3.


3.   Melalui senarai hujah di dalam parameter fungsi tersebut. (*Rujuk 5.8 di bawah)
Panggilan fungsi cara ini dipanggil sebagai panggilan_ikut-nilai.  Nilai yang ingin dihantar ke fungsi boleh dihantar melalui senarai parameter atau senarai hujahnya.

Contoh:

#include <iostream.h>
#include <math.h>

void gandatiga (int k)
{
          k=pow(k,3);
          cout<<”Nilas s dalam fungsi gandatiga ialah”<<k;
}

void main()
{
          int s=10;

gandatiga(s);
cout<<”Nilai s selepas panggilan fungsi gandatiga ialah”<<s;
}


Output:
Nilai s dalam fungsi gandatiga ialah 100
Nilai s selepas panggilan fungsi gandatiga ialah 10




5.71    Jenis Pembolehubah dan Kelas Storan

*Lihat Bab 2 (2.5)

§  Lazimnya dua pembolehubah sering digunakan untuk program yang ringkas iaitu pembolehubah tempatan dan global.
§  Pembolehubah yang diisytiharkan di dalam blok {} dipangggil pembolehubah tempatan.
§  Sifat utama pembolehubah tempatan ini ialah ianya tidak boleh dirujuk(dipanggil) dari luar blok tersebut(dari fungsi lain).
§  Ianya hanya boleh digunakan di dalam fungsi itu sahaja. Sebagai kesan baiknya, pembolehubah ini selamat daripada gangguan luar. Tambahan pula, walaupun nama pembolehubah itu sama dengan nama pembolehubah di fungsi lain, pengkompil tetap mengatakan yang ianya tidak sama.
§  Sebagai contoh katakan terdapat dua fungsi seperti berikut:

void Fungsi()
{
      int nombor;
      pernyataan;
}

int main()
{
     int nombor;
     pernyataan;
}

Penerangan:

§  Pembolehubah yang bernama "nombor" dalam Fungsi() adalah tidak sama dengan pembolehubah yang bernama "nombor" dalam main().
§  Jadi, walaupun kita mengubah nilai pemboleubah tersebut dalam main(), nilai pembolehubah yang berada dalam Fungsi() tidak berubah walaupun namanya serupa.
§  Pemboleh ubah tempatan digunakan apabila kita tidak mahu dua pemboleh ubah yang sama nama di dalam fungsi yang berlainan mempengaruhi di antara satu sama lain.
§  Pembolehubah yang diisytiharkan di luar sebarang fungsi dipanggil pembolehubah global dan boleh digunakan mana-mana fungsi.
§  Ini bermakna pembolehubah ini berkongsi data di antara fungsi-fungsi. Kadang-kadang fungsi dari jenis ini diperlukan tetapi penggunaannya tidaklah selalu digunakan sepertimana penggunaan pembolehubah tempatan.
§  Kegunaannya dipakai mengikut keperluan sesuatu program.

5.72     Pemboleh Ubah Statik

§  Pemboleh ubah statik menggabungkan kebolehlihatan pemboleh ubah tempatan dengan pemboleh ubah global.
§  Ini berguna apabila kita mahukan pemboleh ubah tempatan yang mengekalkan nilainya di antara pangilan fungsi.
§   
Contoh:

void print_vars (int i, int j, int k)
{
      static int count=0;

      cout << “The value is”<<i;
      cout <<”The value is”<<j;
      cout <<”The value is”<<k;
count = count +1;
cout <<”I’ve been called”<<count<<”time(s)”;
}

5.73     Pemboleh Ubah Luaran

§  Apabila program membesar dari segi saiz, biasanya ia akan dibahagikan kepada beberapa modul, dikompilkan dan menyambungkan modul-modul tersebut.
§  Setiap fungsi boleh dilihat secara otomatik pada semua modul kecuali kita mengisytiharkannya sebagai “static”
§  Pemboleh ubah hanya boleh dilihat di dalam modul di mana ia diisytiharkan kecuali kita membuatnya sebagai pemboleh ubah luaran.
§  Untuk mengisytiharkan pemboleh ubah luaran,
§  Isytiharkan pemboleh ubah sebagai global di dalam satu modul.
§  Setiap modul yang mahu menggunakan pemboleh ubah ini, perlu memasukkan “extern” dalam pengisytiharan.
§  Kita boleh juga memasukkan ke semua pemboleh ubah luaran ini ke dalam satu fail pengepala yang kemudiannya di masukkan ke dalam setiap projek yang menggunakan pemboleh ubah tersebut.

5.8    Jenis Data Pulangan dan Hukum Skop

§  Jenis Data Pulangan ialah data yang perlu dikembalikan oleh sesuatu fungsi mengikut jenis data yang telah ditetapkan.
§  Kecuali void, jenis data yang lain perlu mengembalikan nilainya.
§  Jenis data pulangan sesuatu fungsi ini diisytiharkan semasa proses deklarasi prototaip ataupun definasi fungsi itu sendiri. Ianya ditulis di hadapan nama fungsi tersebut.

char Fungsi(int makan, int minum);

§  Dalam pengisytiharan prototaip contoh fungsi d atas, bentuk data yang perlu dikembalikan ialah dari jenis char.
§  Fungsi tersebut wajib mengembalikan data dalam bentuk itu kerana ia telah menetapkani yang ia akan mengembalikan data dari jenis char itu.
§  Sekiranya kita jenis data lain dari yangtelah ditetapkan, pengkompil  akan mengesan kesalahan itu dan program tersebut tidak dapat dilarikan. Nilai ini dipulangkan dengan menggunakan kekunci "return". Sebagai contoh,

return 6;
returrn (x > 7);
return (FungsiSendiri());

Semua kenyataan di atas adalah sah dengan menganggap FungsiSendiri() memulangkan sebuah nilai. Dalam kenyataan kedua, return (x > 7) ), akan memulangkan nilai 0 sekiranya x bukan lebih besar daripada 7.

Hukum Skop
§  Skop bagi sesuatu nama pencam atau pembolehubah merujuk kepada bahagian di dalam aturcara yang nama tersebut dikenali atau mempunyai maksud tertentu.
§  Contoh:

#include <iostream.h>

int indeks;

void Fun1(int a, int b)
{
     int satu_tempatan;

     pernyataan;
}

void Fun2(int k)
{
     int dua_tempatan;

     pernyataan;
}

void main()
{
     int m_tempatan;

     pernyataan;
}

§  Pemboleh ubah indeks boleh dirujuk di dalam mana-mana fungsi aturcara tersebut. Indeks ialah global.
§  Fun1() boleh dipanggil oleh fungsinya sendiri, Fun2() dan main().  Fungsi Fun2() hanya boleh dipanggil oleh nya sendiri dan main() tetapi tidak Fun1().(*Rujuk definasi Fungsi)
§  Pemboleh ubah yang diisytiharkan dalam fungsi atau dalam senarai parameter hanya boleh digunakan oleh fungsi yg mengisytiharkannya sahaja. (*Rujuk jenis-jenis pembolehubah)


5.9    Funtion Arguments

§  Funtion arguments tidak semestinya sama bentuk.
§  Ia boleh jadi int,long,double, char atau lain-lain yag digunakan secara serentak.
§  Malah, Fungsi juga boleh digunakan sebagai parameter itu.
§  Walau bagaimanapun cara ini menyukarkan penyemakan program tersebut. Parameter ini ditulis di dalam kurungan () selepas nama fungsi.
§  Contoh:

int FungsiKomputer(int jenama, double harga);

§  Dalam pengisytiharan prototaip di atas, Fungsi yang bernama "FungsiKomputer" mempunyai 2 parameter iaitu jenama dan harga. Kedua-duanya adalah pembolehubah tempatan.
§  Oleh kerana pembolehubah tersebut adalah pembolehubah tempatan, maka ia tidak boleh dipangil di luar daripada fungsi tersebut.
§  Lihat contoh program di bawah.

Contoh:

#include <iostream.h>

int KiraLuas(int panjang, int lebar)
{
      return (
panjang * lebar); // <========== (a)
}

int main()
{
    int luas;
    int nPanjang = 5;
    int nLebar = 3;
    luas = KiraLuas(nPanjang, nLebar); // <====== (b)

    cout << "Panjang = "<<nPanjang<<"meter"<<endl;
    cout<<"Lebar = "<< nLebar << "meter"<< endl;
    cout << "Luas = " << luas << " meter persegi." << endl;
    return 0;
}

Output:

Panjang = 5 meter
Lebar = 3 meter
Luas = 15 meter persegi.

Penerangan:

Dalam fungsi KiraLuas di atas, 2 parameter telah disediakan. Pada baris (a), pengiraan untuk luas berlaku dan hasil pengiraannya dikembalikan. Pada baris (b) pula, fungsi tersebut dipanggil dengan dua data daripada pembolehubah nPanang dan nLebar dihantar ke fungsi KiraLuas untuk diproses. Perlu diingat bahawa data nPanjang akan di hantar ke pembolehubah "panjang" manakala data nLebar dihantar ke pembolehubah "lebar". Kemudian data yang diterima oleh parameter itu akan diproses dan dihantar semula ke tempat pemanggilnya..

 

0 komentar:

Posting Komentar

Pages

Sample Text

Diberdayakan oleh Blogger.

News

Recent Posts

Download