You are on page 1of 39

Yang Berlalu Takkan

Berulang, Tetapi Sejarah


Mungkin Berulang..

DIT 1104 - Pengaturcaraan 1


BAB 6 : FUNGSI
Objektif :
Untuk menerangkan tentang konsep:

Pengaturcaraan Modular/Fungsi
Fungsi Takrifan Pengguna
Elemen-elemen Fungsi : takrifan ,prototaip
dan panggilan fungsi
Jenis-jenis Fungsi
Skop Pembolehubah
DIT 1104 - Pengaturcaraan 2
FUNGS satu bahagian aturcara untuk melakukan tugas,
ditulis dan diuji secara berasingan

ITerbahagi kepada dua jenis Fungsi yang ditulis


dan direkabentuk sendiri
-Fungsi perpustakan piawai
oleh pengaturcara
-Telah disediakan untuk diguna
-Contoh :
exit(), scanf(), printf(),
clrscr ()

Prototaip fungsi
Elemen penting Takrifan fungsi
dalam fungsi
Panggilan fungsi
DIT 1104 - Pengaturcaraan 3
Pemecahan Modul
#include <stdio.h>
void main()
{ int a,b, hasildarab,hasiltambah,hasiltolak;
int hasilbahagi; //Mendapatkan nilai
printf(“\nMasukkan dua nombor integer”);
//Mendapatkan nilai
printf(“\nMasukkan dua nombor integer”); scanf(“%d %d”, &a, &b);
scanf(“%d %d”, &a, &b);

//Mengira hasil operasi aritmetik


hasiltambah = a + b; //Mengira hasil operasi aritmetik
hasiltolak = a – b; hasiltambah = a + b;
hasildarab = a * b;
hasiltolak = a – b;
hasilbahagi = a / b;
hasildarab = a * b;
//Mencetak hasil hasilbahagi = a / b;
printf(“Hasil tambah = %d”, hasiltambah);
printf(“Hasil tolak = %d”, hasiltolak);
printf(“Hasil darab = %d”, hasildarab); //Mencetak hasil
printf(“Hasil bahagi = %d”, hasilbahagi);
printf(“Hasil tambah = %d”, hasiltambah);
} printf(“Hasil tolak = %d”, hasiltolak);
printf(“Hasil darab = %d”, hasildarab);
printf(“Hasil bahagi = %d”, hasilbahagi);
DIT 1104 - Pengaturcaraan 4
Pengaturcaraan Modular
Guna kaedah rekabentuk penyelesaian atas-bawah
Masalah dipecahkan kepada beberapa bahagian /modul
Modul dipecahkan kepada sub-modul
Faedah :
- Struktur aturcara lebih mudah difahami
- Mudah membetulkan dan mengubahsuai aturcara
- Modul boleh digunasemula
Pengkodan modul guna konsep fungsi

DIT 1104 - Pengaturcaraan 5


Pemecahan Modul
#include <stdio.h> //Mengira hasil operasi aritmetik
int a,b, hasildarab,hasiltambah,hasiltolak;
int hasilbahagi; void Kirahasil()
{
void Dapatnilai(); hasiltambah = a + b;
void Kirahasil(); hasiltolak = a – b; takrifan
prototaip
void Cetakhasil(); hasildarab = a * b;
hasilbahagi = a / b;
void main() }
{
Dapatnilai(); //Mencetak hasil
Kirahasil(); panggilan void Cetakhasil()
Cetakhasil(); {
} printf(“Hasil tambah = %d”, hasiltambah);
printf(“Hasil tolak = %d”, hasiltolak);
//Mendapatkan nilai printf(“Hasil darab = %d”, hasildarab);
void Dapatnilai() printf(“Hasil bahagi = %d”, hasilbahagi);
{ printf(“\nMasukkan dua nombor integer”); }
scanf(“%d %d”, &a, &b);
}

DIT 1104 - Pengaturcaraan 6


Elemen-elemen Fungsi
1. Takrifan fungsi:
•Menakrifkan tugas-tugas bahagian/modul tertentu
•Format:
jenis_fungsi nama_fungsi (senarai parameter)
{
//pernyataan
}

Jenis fungsi

-Boleh terdiri daripada void, double, float, int atau char


-Tempat menentukan sama ada fungsi memulangkan nilai atau tidak
-Kalau guna void, bermakna fungsi tidak memulangkan sebarang nilai

DIT 1104 - Pengaturcaraan 7


Elemen-elemen Fungsi(samb..)
1. Takrifan fungsi:
Nama fungsi
-Nama mesti terdiri daripada nama pencam yang sah.
-Tidak boleh guna nama yang sama spt fungsi piawai perpustakaan C

Senarai parameter
-Tempat menentukan bilangan dan jenis data yang diterima
-Parameter adalah pembolehubah sementara
-Dikenali juga sebagai argumen

Pernyataan C
-Keratan aturcara untuk melaksanakan tugas-tugas fungsi
-Dimulakan dengan { dan ditutup dengan } .
DIT 1104 - Pengaturcaraan 8
Elemen-elemen fungsi(samb..)
Contoh:
1. void Cetak_segiempat (void)
{ int panjang, lebar;

printf(“Luas segiempat ialah %d”,panjang * lebar);


}

2. void mesej()
{
printf(“\nHello”);
printf(“\nSelamat pagi”);
printf(“\nSelamat datang”);
}

DIT 1104 - Pengaturcaraan 9


Elemen-elemen Fungsi(samb..)
2.Prototaip fungsi

-Pengisytiharan fungsi
-Perlu ditulis dalam aturcara sebelum penakrifan fungsi
-Memberitahu kepada pengkompil bahawa aturcara mengandungi
takrifan fungsi.

Format:
jenis_fungsi nama_fungsi(jenis paramater);

Cth:
void mesej();
void Cetak_segiempat(void);
int Kira_harga(int);

DIT 1104 - Pengaturcaraan 10


Elemen-elemen fungsi(samb..)
2.Panggilan fungsi
-Fungsi perlu dipanggil supaya tugas yang dikandung oleh fungsi
tersebut dapat dilaksanakan.
-Pemanggilan perlu dan boleh dibuat dalam bahagian badan utama
aturcara atau dari mana-mana badan fungsi.
- Format :
nama_fungsi(nilai_hantaran);
-Contoh:

mesej();
Cetak_segiempat();
Kira_harga(harga);

DIT 1104 - Pengaturcaraan 11


Elemen-elemen fungsi(samb..)
Format :
#include <stdio.h>
//tempat prototaip fungsi

void main()
{

//tempat panggilan fungsi


}

//tempat takrifan fungsi


DIT 1104 - Pengaturcaraan 12
Elemen-elemen fungsi(samb..)
Perbezaan & persamaan di antara elemen-elemen fungsi:

Prototaip fungsi:
Ditulis pada bahagian atas sebelum fungsi
void mesej(); main()

Panggilan fungsi:
Ditulis pada bahagian dalam fungsi
mesej(); main()

Takrifan fungsi:
void mesej()
{ printf(“\nHello”);
printf(“\nSelamat pagi”); Ditulis pada bahagian atas atau
printf(“\nSelamat datang”); bawah fungsi main()
}
DIT 1104 - Pengaturcaraan 13
Elemen-elemen fungsi(samb..)
Contoh 1:

#include <stdio.h>

void mesej(); //prototaip fungsi

void main()
{
mesej(); //panggilan fungsi
}

void mesej()
{ printf(“\nHello”);
printf(“\nSelamat pagi”); Takrifan fungsi
printf(“\nSelamat datang”);
} DIT 1104 - Pengaturcaraan 14
Elemen-elemen fungsi(samb..)
Contoh 2:

#include <stdio.h> void kira_diskaun(int harga)


{
void kira_diskaun(int); if (harga > 1000)
printf(“Diskaun ialah %d”, 0.50 * harga);
void main() else if (harga < 1000)
{ printf(“Diskaun ialah %d”,0.20 * harga);
int harga; else
printf(“\nMasukkan harga:”); printf(“Tiada diskaun”);
scanf(“%d”,&harga); }

kira_diskaun(harga);
}
DIT 1104 - Pengaturcaraan 15
Elemen-elemen fungsi(samb..)
Contoh 3:

#include <stdio.h> void input()


{ printf(“\nInputkan nilai x dan y:”);
void input(); scanf(“%d %d”,&x,&y);
void banding(); }
void output();
void banding()
int x,y,maksimum; {
void main() if ( x > y)
{ maksimum = x;
input(); else
banding(); maksimum = y;
output(); }
}
void output()
{ printf(“\nNombor maksimum ialah %d”,maksimum); }
DIT 1104 - Pengaturcaraan 16
Elemen-elemen fungsi(samb..)

Contoh 4:
#include <stdio.h> void input()
{ printf(“Nilai x ?”);
void input(); scanf(“%d”,&x);
void output(); printf(“\nNilai y ?”);
scanf(“%d”,&y);
int x,y; output(); 2 5
void main() }
{
input(); 1 void output()
output(); { printf(“\nNilai x = %d”,x);
3
input(); printf(“\nNilai y = %d”,y);
} 4 }

DIT 1104 - Pengaturcaraan 17


Skop pembolehubah
•Skop menentukan kawasan di mana sesuatu pembolehubah boleh
digunakan.
•Dua jenis skop pembolehubah: sejagat dan setempat

Pembolehubah sejagat Pembolehubah yang boleh dicapai oleh


semua fungsi yang ada dalam aturcara

Contoh
#include <stdio.h>
Diisytiharkan sebelum int a,b;
fungsi main() float c;
void main()
{ }
DIT 1104 - Pengaturcaraan 18
Skop pembolehubah (samb..)

Pembolehubah yang hanya boleh dicapai


Pembolehubah setempat dalam fungsi main() atau fungsi yang
mengisytiharkan sahaja

Contoh

Diisytiharkan dalam #include <stdio.h>


fungsi main() atau void dapatnilai();
mana-mana fungsi void main()
{ int x; }

void dapatnilai()
{ int z;
…………
}
DIT 1104 - Pengaturcaraan 19
Skop pembolehubah (samb..)
Contoh 1:
#include <stdio.h>

int a,b; //pembolehubah sejagat


void paparnilai();

void main()
{ printf(“\nMasukkan nilai a dan b:”);
scanf(“%d %d”,&a,&b);
paparnilai();
}

void paparnilai()
{
printf(“Nilai a ialah % dan b ialah %d”, a,b);
}
DIT 1104 - Pengaturcaraan 20
Skop pembolehubah (samb..)
Contoh 2:
#include <stdio.h> Output?
int a,b; //pembolehubah sejagat
void paparnilai();

void main()
{ int c;
a= 5;
b = 9;
c = 12;
paparnilai();
printf(“\nNilai c ialah %d”, c);
}
void paparnilai()
{
printf(“\nNilai a ialah %d”,a);
printf(“\nNilai b ialah %d”,b);
printf(“\nNilai c ialah %d”,c);
DIT 1104 - Pengaturcaraan 21
}
Skop pembolehubah (samb..)
Contoh 3:
#include <stdio.h> Output?
void paparnilai();

void main()
{ int c;
a= 5;
b = 9;
c = 12;
paparnilai();
printf(“\nNilai c ialah %d”, c);
}
void paparnilai()
{ int a,b;
printf(“\nNilai a ialah %d”,a);
printf(“\nNilai b ialah %d”,b);
}
DIT 1104 - Pengaturcaraan 22
Skop pembolehubah (samb..)
Contoh 4:
#include <stdio.h>
void fungsi1()
void fungsi1(); { int i,j ;
void fungsi2(); i= 3;
int z; j = i;
printf(“\nNilai i ialah %d”,i);
void main() printf(“\nNilai j ialah %d”,j);
{ fungsi1(); }
x = 7;
z = 15; void fungsi2()
fungsi2(); { int x = 4;
} z = j;
printf(“\nNilai x ialah %d”,x);
printf(“\nNilai z ialah %d”,z);
}

DIT 1104 - Pengaturcaraan 23


Jenis-jenis fungsi
Terdapat 3 jenis fungsi yang boleh digunakan :
1. Fungsi yang tidak memulangkan sebarang nilai dan tidak menerima
sebarang nilai
2. Fungsi yang tidak memulangkan sebarang nilai tetapi menerima nilai
3. Fungsi yang memulangkan dan tidak/menerima nilai

Format penulisan fungsi:

Jenis_fungsi nama_fungsi (senarai_parameter)

Tempat sama ada fungsi Tempat sama ada fungsi


memulangkan menerima
DIT 1104 - Pengaturcaraan 24
nilai atau tidak nilai atau tidak
Jenis-jenis fungsi (samb..)
1.Fungsi yang tidak memulangkan dan tidak menerima sebarang nilai

Cth:
void fungsi_satu(void);

Tidak pulang nilai Tidak terima nilai

void fungsi_dua(void);

Tidak pulang nilai Tidak terima nilai

DIT 1104 - Pengaturcaraan 25


Jenis-jenis fungsi (samb..)
Cth:
Prototaip: #include <stdio.h>
void input();
void input();
Panggilan:
input(); void main()
{
Takrifan: input();
}
void input()
{ printf(“Taipkan input :”); void input()
scanf(“%d”,&input); { printf(“Taipkan input :”);
} scanf(“%d”,&input);
}

DIT 1104 - Pengaturcaraan 26


Jenis-jenis fungsi (samb..)
2.Fungsi yang tidak memulangkan nilai tetapi menerima nilai

Cth:
void fungsi_satu(int);

Tidak pulang nilai Terima nilai berjenis integer

void fungsi_dua(int,int);

Tidak pulang nilai Terima dua nilai berjenis integer

void fungsi_tiga(int,float,int);

Tidak pulang nilai Terima dua nilai berjenis integer dan satu nilai float
DIT 1104 - Pengaturcaraan 27
Jenis-jenis fungsi (samb..)
Cth 1:
Prototaip: #include <stdio.h>
void fungsi1(int);
void fungsi1(int);
Panggilan:
fungsi1(a); void main()
{ int a ;
Takrifan: printf(“Dapatkan nilai :”);
scanf(“%d”,&a);
void fungsi1(int a) fungsi1(a);
{ printf(“Nilai a ialah %d”,a); }
}
void fungsi1(int a)
{ printf(“Nilai a ialah %d”,a); }

DIT 1104 - Pengaturcaraan 28


Jenis-jenis fungsi (samb..)
Cth 2:
Prototaip: #include <stdio.h>
void cetak_diskaun(int); void cetak_diskaun(int);

Panggilan: void main()


cetak_diskaun(kuantiti); { int kuantiti ;
printf(“Masukkan kuantiti :”);
Takrifan: scanf(“%d”,&kuantiti);
void cetak_diskaun(int b) cetak_diskaun(kuantiti);
{ if (b > 1000) }
printf(“Diskaun = 50%”); void cetak_diskaun(int b)
else { if (b > 1000)
printf(“Diskaun = 10%”); printf(“Diskaun = 50%”);
} else
printf(“Diskaun = 10%”);
}
DIT 1104 - Pengaturcaraan 29
Jenis-jenis fungsi (samb..)
3.Fungsi yang memulangkan nilai dan tidak/menerima nilai

Cth:
int fungsi_satu(int);

Pulang nilai Terima nilai berjenis integer

float fungsi_dua(int,int);

Pulang nilai Terima dua nilai berjenis integer

int fungsi_tiga(int,float,int);

Pulang nilai Terima dua nilai berjenis integer dan satu nilai float
DIT 1104 - Pengaturcaraan 30
Jenis-jenis fungsi (samb..)
Prototaip: #include <stdio.h>
float kira_diskaun(int); void cetak_diskaun(int);
float diskaun;
Panggilan:
void main()
kira_diskaun(kuantiti);
{ int kuantiti ;
printf(“Masukkan kuantiti :”);
Takrifan: scanf(“%d”,&kuantiti);
printf(“Diskaun %d”,cetak_diskaun(kuantiti));
float kira_diskaun(int b) }
{ if (b > 1000)
diskaun = 0.5; float kira_diskaun(int b)
else { if (b > 1000)
diskaun = 0.5;
diskaun = 0.1;
else
return diskaun; diskaun = 0.1;
} return diskaun;
}
DIT 1104 - Pengaturcaraan 31
Latih tubi:
1. Tuliskan prototaip fungsi bagi pernyataan berikut:

a. fungsi ini menerima satu nilai integer.


b. fungsi ini menerima nilai markah dan mengembalikan gred
markah
c. fungsi Nombor tidak menerima dan tidak memulangkan
sebarang
parameter.

2. Tuliskan satu fungsi bernama Nomborbulat() yang akan


mencetak dua nilai berjenis nombor bulat. Fungsi ini
menerima dua parameter.

DIT 1104 - Pengaturcaraan 32


Parameter Nilai dan Penunjuk serta
Memory Allocation
• Semasa fungsi dipanggil, memori untuk parameter
formal akan disediakan untuk badan fungsi
(pembolehubah setempat).
• Semasa panggilan fungsi, nilai bagi
pembolehubah sebenar akan disalin ke dalam sel
memori parameter formal tersebut.
• Manakala parameter rujukan, hanya alamat
pembolehubah disalin ke dalam sel memori.
• Maka semasa manipulasi data, ia akan merubah
nilai sebenar pembolehubah yang diterima oleh
parameter formal tersebut.
DIT 1104 - Pengaturcaraan 33
//contoh 1
#include<iostream.h>

void funOne(int a, int& b, char v);


void funTwo(int& x, int y, char& w);

int main() {
int num1, num2;
char ch;
num1 = 10; num2 = 15; ch = 'A';
cout << "Line 4 : inside main : num 1 = "<<num1<< ",num2 ="<<num2;
cout << " and ch = " <<ch<<endl;

funOne(num1, num2,ch);
cout << "Line 6 : After funOne : num 1 = "<<num1<< ", num2 ="<<num2;
cout << " and ch = " <<ch<<endl;

funTwo(num2, 25,ch);
cout << "Line 8 : After funTwo : num 1 = "<<num1<< ", num2 ="<<num2;
cout << " and ch = " <<ch<<endl;
return 0; }

void funOne(int a, int& b, char v)


{ int one; one = a;
b = b* 2;
v = 'B';
cout << "Line 13 : Inside funOne : a = "<< a << ",b ="<<b;
cout << " and v = " << v <<endl; }

void funTwo(int& x, int y, char& w)


{ x++;
y = y * 2;
w = 'G';
DIT 1104
cout << "Line 17 : Inside - Pengaturcaraan
funTwo : x = "<< x << ",y="<<y; 34
cout << " and w = " << w <<endl; }
Output

Output:
Line 4 : inside main : num 1 = 10, num2 = 15 and ch = A
Line 13 : inside funOne : num a = 10, b = 30 and v = B
Line 6 : after funOne : num 1 = 10, num2 = 30 and ch = A
Line 17 : inside funTwo : num x = 31, y = 50 and w = G
Line 8 : after funTwo: num 1 = 10, num2 = 31 and ch = G

DIT 1104 - Pengaturcaraan 35


#include<iostream.h>

void addFirst(int& first, int& second);


void doubleFirst(int one, int two);
void squareFirst(int& ref, int val);

int main()
{
int num=5;

cout << "Line 1: inside main : num = " << num << endl;
addFirst(num, num);
cout << "Line 3: inside main after addFirst: num = " << num << endl;
doubleFirst(num, num);
cout << "Line 5: inside main after doubleFirst: num = " << num << endl;
squareFirst(num, num);
cout << "Line 7: inside main after squareFirst: num = " << num << endl;
return 0;
}

void addFirst(int& first, int& second){


cout << "Line 8: inside addFirts: first = " << first ;
cout << "second : "<< second << endl;

first = first + 2;
cout << "Line 10: inside addFirts: first = " << first ;
cout << "second : "<< second << endl;

second = second*2;
cout << "Line 12: inside addFirts: first = " << first ;
cout << "second : "<< second << endl; }
DIT 1104 - Pengaturcaraan 36
void doubleFirst (int one, int two)
{
cout << "Line 13: inside doubleFirst: one = " << one ;
cout << "two : "<< two << endl;

one = one * 2;
cout << "Line 15: inside doubleFirst: one = " << one ;
cout << "two : "<< two << endl;

two= two + 2;

cout << "Line 17: inside doubleFirsts: one = " << one ;
cout << "two : "<< two << endl;
}

void squareFirst (int& ref, int val)


{
cout << "Line 18: inside squareFirst: ref = " << ref ;
cout << "val : "<< val << endl;
ref = ref*ref;
cout << "Line 20: inside squareFirst: ref = " << ref ;
cout << "val : "<< val << endl;
val = val + 2;
cout << "Line 22: inside squareFirst: ref = " << ref ;
cout << "val : "<< val << endl;
}

DIT 1104 - Pengaturcaraan 37


Output:
Line 1 : Inside main : num 5
Line 8 : Inside addFirst: first = 5, second = 5
Line 10 : Inside addFirst: first = 7, second = 7
Line 12 : Inside addFirst: first = 14, second = 14
Line 8 : Inside addFirst: first = 5, second = 5
Line 3 : Inside main after addFirst : num 14
Line 13 : Inside doubleFirst: one = 14, second = 14
Line 15 : Inside doubleFirst: one = 28, second = 14
Line 17 : Inside doubleFirst: one = 28, second = 16
Line 5 : Inside main after doubleFirst : num 14
Line 18 : Inside squareFirst: ref = 14, second = 14
Line 20 : Inside squareFirst: ref = 196, second = 14
Line 22 : Inside squareFirst: ref = 196, second = 16
Line 7 : Inside main after squareFirst : num 196

DIT 1104 - Pengaturcaraan 38


//contoh 3
#include<iostream.h>

int t;
void funOne(int a, int& b, char v);

int main() {
int num1, num2;
num1 = 10; num2 = 20; t = 15;
cout << "Line 4 : inside main : num 1 = "<<num1<< ",num2 ="<<num2;
cout << " and t = " <<t<<endl;
funOne(num1, t);
cout << "Line 6 : inside main After funOne : num 1 = "<<num1<< ", num2 ="<<num2;
cout << " and t = " <<t<<endl;
return 0; }

void funOne(int& a, int& x)


{ int z;

z = a + x;
cout << "Line 9 : Inside funOne1 : a = "<< a << ",x ="<<x;
cout << " z = " << z << " and t = " << t <<endl;

x = x + 5;
cout << "Line 11 : Inside funOne1 : a = "<< a << ",x ="<<x;
cout << " z = " << z << " and t = " << t <<endl;

a = a + 12;
cout << "Line 13 : Inside funOne1 : a = "<< a << ",x ="<<x;
cout << " z = " << z << " and t = " << t <<endl;

t = t + 13;
cout << "Line 15 : Inside funOne1 : a = "<< a << ",x ="<<x;
cout << " z = " << z << " and t = " << t <<endl;
}
DIT 1104 - Pengaturcaraan 39

You might also like