BAB7 : FUNGSI (Pengaturcaraan Bermodular )

Post on 01-Feb-2016

124 views 1 download

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 )

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

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

Fungsi (sambungan)

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

fungsi slps main() )– Panggilan fungsi

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

Contoh Fungsi

void cetak_mesej (void){

printf("Hi\n");}

int campur (int x, int y){

return(x+y);}

/* 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

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

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

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

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

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

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

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

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

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 *.

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

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;

}

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

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

Skop prototaip

• Sama seperti skop pembolehubah

#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){:

}

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;

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