BAB7 : FUNGSI (Pengaturcaraan Bermodular )

24
BAB7 : FUNGSI (Pengaturcaraan Bermodular)

description

BAB7 : FUNGSI (Pengaturcaraan Bermodular ). FUNGSI. Terdapat 2 kategori fungsi: Fungsi piawai perpustakaan C main() printf() scanf() dll Fungsi takrifan pengguna direkabentuk dan ditulis sendiri oleh pengaturcara. Mengapa perlu fungsi?. Struktur mudah difahami - PowerPoint PPT Presentation

Transcript of BAB7 : FUNGSI (Pengaturcaraan Bermodular )

Page 1: BAB7 : FUNGSI (Pengaturcaraan Bermodular )

BAB7 : FUNGSI (Pengaturcaraan Bermodular)

Page 2: BAB7 : FUNGSI (Pengaturcaraan Bermodular )

FUNGSI

• Terdapat 2 kategori fungsi:

– Fungsi piawai perpustakaan C

• main()

• printf()

• scanf() dll

– Fungsi takrifan pengguna

• direkabentuk dan ditulis sendiri oleh pengaturcara

Page 3: BAB7 : FUNGSI (Pengaturcaraan Bermodular )

Mengapa perlu fungsi?• Struktur mudah difahami

– aturcara mudah dibaca dan difahami kerana kumpulan suruhan2 yg melakukan kerja tertentu dikumpulkan dalam beberapa bahagian.

– juga memudahkan proses debug

• Jimat masa/ruang dan guna semula– fungsi hanya perlu ditulis sekali shj dan boleh

digunakan berulang2 dgn memanggil nama fungsi tersebut.

• Menggalakkan aturcara bermodular– masalah yg besar dipecahkan kpd masalah yg

kecil(pendekatan atas-bawah)

Page 4: BAB7 : FUNGSI (Pengaturcaraan Bermodular )

Fungsi (sambungan)

• Secara ringkasnya melibatkan :– Takrifan fungsi– Mengistiharkan Prototaip fungsi (*perlu jika

fungsi slps main() )– Panggilan fungsi

Page 5: BAB7 : FUNGSI (Pengaturcaraan Bermodular )

Format Fungsi• Takrifan fungsi• Bentuk Asas:

jenis_pulangan nama_fungsi (parameter_masuk){ badan_fungsi; return (nilai);}

Contoh :float kira_luas (float l, float p){ float A; A = p*l; return(A);}

Page 6: BAB7 : FUNGSI (Pengaturcaraan Bermodular )

Contoh Fungsi

void cetak_mesej (void){

printf("Hi\n");}

int campur (int x, int y){

return(x+y);}

Page 7: BAB7 : FUNGSI (Pengaturcaraan Bermodular )

/* cari luas bulatan */

#include <stdio.h>

int main ( )

{

float luas, jejari;

printf(“\nmasukkan nilai jejari:“);

scanf(“ %lf “, &jejari);

luas = 3.14159 * jejari * jejari;

printf(“\nLuas bulatan %lf”,luas);

return 0;

}

#include <stdio.h>float luas_bulat(float jari){ return ( 3.1415*jari*jari );}

int main ( )

{

float luas, jejari;

printf(“\nmasukkan nilai jejari:“);

scanf(“ %lf “, &jejari);

luas = luas_bulat(jejari);

printf(“\nLuas bulatan%lf”,luas);

return 0;

}

Takrifan fungsi luas bulatan

Page 8: BAB7 : FUNGSI (Pengaturcaraan Bermodular )

PROTOTAIP FUNGSI

• Contoh sblm (fungsi sebelum main( )) tidak perlu prototaip fungsi.

• Jika fungsi takrifan pengguna terletak selepas fungsi main( ) perlu prototaip fungsi

• Format prototaip fungsi– Sama spt baris pertama takrifan fungsi & ditmb ;– nama fungsi, bilangan, susunan & jenis parameter mesti

sama– Nama parameter boleh ditinggalkan

Page 9: BAB7 : FUNGSI (Pengaturcaraan Bermodular )

Contoh prototaip fungsi#include <stdio.h>float luas_bulat (float);

int main ( )

{

:

scanf(“ %lf “, &jejari);

luas = luas_bulat(jejari);

:

}float luas_bulat (float jari){ return ( 3.1415*jari*jari );}

Prototaip fungsi

Page 10: BAB7 : FUNGSI (Pengaturcaraan Bermodular )

Parameter dalam fungsi#include <stdio.h>float luas_bulat (float);

int main ( )

{

:

scanf(“ %lf “, &jejari);

luas = luas_bulat(jejari);

:

}float luas_bulat (float jari){ return ( 3.1415*jari*jari );}

Parameter formal

Parameter sebenar

Page 11: BAB7 : FUNGSI (Pengaturcaraan Bermodular )

Panggilan & Pulangan fungsi

• Boleh dipanggil oleh fungsi luar atau dalam fungsi yg sama (rekursif).

• 3 perkara penting– Nama fungsi – mesti sama dengan nama fungsi

yang ditakrifkan.– Data yg dihantar – jenis, bilangan & turutan

mesti sama.– Pulangan fungsi – jenis mesti sama

Page 12: BAB7 : FUNGSI (Pengaturcaraan Bermodular )

Contoh1 panggilan & pulangan fungsi#include <stdio.h>float luas_bulat (float);

int main ( )

{ float luas, jejari;

:

scanf(“ %lf “, &jejari);

luas = luas_bulat(jejari);

:

}

float luas_bulat (float jari){ return ( 3.1415*jari*jari );}

Pulangan fungsi

Panggilan fungsi

Page 13: BAB7 : FUNGSI (Pengaturcaraan Bermodular )

Contoh 2 panggilan & pulangan fungsi#include <stdio.h>float luas_bulat (float);

int main ( )

{ :

cetak1( );

scanf(“ %lf “, &jejari);

luas = luas_bulat(jejari);

:

}

void cetak1 (void){ printf(“\nmasukkan nilai jejari:“);}

Panggilan fungsi

Page 14: BAB7 : FUNGSI (Pengaturcaraan Bermodular )

Penghantaran Nilai kepada Fungsi• 2 cara :

– penghantaran nilai sebenar (call by value)– penghantaran alamat nilai (call by reference)

• Penghantaran nilai sebenar – Nilai sebenar akan diumpukan kpd parameter formal

pada fungsi yang memanggil.– Nilai dihantar kpd sesuatu fungsi dlm bentuk satu arah.– sebarang perubahan nilai berlaku hanya didalam

fungsi sahaja– perubahan keatas nilai didalam fungsi tidak dapat

“dilihat” oleh pemanggil

Page 15: BAB7 : FUNGSI (Pengaturcaraan Bermodular )

Contoh penghantaran nilai sebenarvoid main( ){ :tpk = 9.0; tg = 4.0;luas = luas_segi3 ( tpk, tg );printf(“%f , %f ,%f ”,tpk, tg, luas);}float luas_segi3 (float tapak, float tinggi){float luas3;tapak=tapak+1; tinggi=tinggi+1;luas3 =(tapak*tinggi)/2.0;return ( luas3 );}

tpk tg luas

tapak tinggi luas3

Page 16: BAB7 : FUNGSI (Pengaturcaraan Bermodular )

Penghantaran alamat nilai• setiap pembolehubah disimpan pada suatu alamat didalam ingatan (RAM)

&pembolehubah• Alamat tersebut dihantar kpd parameter formal pada fungsi yang

memanggil. (bukannya nilai)• sebarang perubahan keatas kandungan alamat (nilai) yang dilakukan di

dalam fungsi dapat dilihat oleh pemanggil • Nilai pembolehubah yg distorkan di dlm alamat boleh dirujuk dgn

penunding *pembolehubah• Nilai dihantar kpd sesuatu fungsi dlm bentuk dua arah.• ‘Return’ tidak diperlukan. (kalau guna pun tak salah)• parameter sebenar (pemanggil), bermula dengan simbol &.• parameter formal (dipanggil), bermula dengan *.

Page 17: BAB7 : FUNGSI (Pengaturcaraan Bermodular )

Contoh penghantaran alamat nilai void main( ){ :tpk = 9.0; tg = 4.0;luas=0.0;luas_segi3 ( &tpk, &tg, &luas);printf(“%f, %f, %f ”, tpk, tg, luas);}float luas_segi3(float *tapak,float *tinggi, float*luas3){*tapak=*tapak+1;*tinggi=*tinggi+1;*luas3 =(*tapak*(*tinggi))/2.0;}

tpk tg luas

tapak tinggi luas3

Page 18: BAB7 : FUNGSI (Pengaturcaraan Bermodular )

latihanvoid main(){int x=10, y=10, z=25, campur, tolak;Kiraan(x, &y, z, &campur, &tolak);Printf(“\nNilai x, y, z = %d%d%d”,x, y, z);printf(“\nNilai bagi campur ialah %d ”, campur);printf(“\nNilai bagi tolak ialah %d “, tolak); return;} void Kiraan(int a, int *b, int c, int *tambah, int *kurang){

a = a+3; *b = *b+2;*tambah = a + *b + c;*kurang = a - *b - c;

}

Page 19: BAB7 : FUNGSI (Pengaturcaraan Bermodular )

Skop Pembolehubah• Pembolehubah setempat

– Diistiharkan dalam sesuatu fungsi– Hanya boleh digunakan/ dicapai/ dicam dalam

fungsi tersebut sahaja– Hanya wujud semasa fungsi tersebut aktif

• Pembolehubah sejagat– Diistiharkan diluar fungsi– Boleh digunakan/ dicapai/ dicam oleh semua

fungsi kecuali jika namanya sama dgn pembolehubah setempat

Page 20: BAB7 : FUNGSI (Pengaturcaraan Bermodular )

Contoh skop pembolehubah#include <stdio.h>

float luas= 0;

void luas_segi4 (void)

{

float pjg=2, lbr=4;

luas = pjg*lbr;

}

float luas_bulat (float jejari)

{

float luas;

luas = 3.1415*jejari*jejari;

return(luas);

}

void main(){float j;:luas_segi4 ();luas = luas_bulat(j);}

Page 21: BAB7 : FUNGSI (Pengaturcaraan Bermodular )

Skop prototaip

• Sama seperti skop pembolehubah

Page 22: BAB7 : FUNGSI (Pengaturcaraan Bermodular )

#include <stdio.h> void menu (void); float luas_segi4 (void);void main(){float luas_segi3 (float, float);:menu();luas = luas_segi4 ();luas = luas_segi3 (tpk, tg);}float luas_segi4 (void){ float luas_bulat (float jejari); : luas = luas_bulat (j); :}

float luas_segi3 (float tapak, float tinggi)

{:}float luas_bulat (float jejari){menu();:}void menu (void){:

}

Page 23: BAB7 : FUNGSI (Pengaturcaraan Bermodular )

Pembolehubah automatik dan statik• Pembolehubah automatik

– nilai bagi pembolehubah automatik wujud apabila memasuki fungsi/blok dimana pembolehubah tersebut diistiharkan dan akan terhapus apabila keluar.

– Format : auto float x, y;– secara default, pembolehubah yang digunakan adalah

berjenis auto. format diatas jarang digunakan

• Pembolehubah statik– nilai yang terdapat dalam pembolehubah ini akan kekal

walaupun telah keluar daripada fungsi/blok dimana ia distiharkan

– Format : static int count;

Page 24: BAB7 : FUNGSI (Pengaturcaraan Bermodular )

#include <stdio.h>void a(void);void b(void);void c( void); main( ){ a( ); b( ); a( ); b( );}

void a(void){ int y = 25; printf(“y dalam fungsi a = %d”, y); ++y; printf(“y dalam fungsi a = %d”, y);} void b (void){ static int z = 40; printf(“z dalam fungsi b = %d”, z); ++z; printf(“z dalam fungsi b = %d”, z);}