1 / 45

Fungsi

Fungsi. Pertemuan 0 8. Dasar Pemrograman Komputer 20 10. Learning Outcomes. Pada akhir pertemuan ini , diharapkan mahasiswa akan mampu : Mendemonstrasikan penggunaan fungsi serta pengiriman parameter. Outline Materi. Pemrograman Modular Library Function vs user-defined function

allan
Download Presentation

Fungsi

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Fungsi Pertemuan08 DasarPemrogramanKomputer 2010

  2. Learning Outcomes Padaakhirpertemuanini, diharapkanmahasiswa akanmampu : • Mendemonstrasikanpenggunaanfungsisertapengirimanparameter

  3. Outline Materi PemrogramanModular Library Function vs user-defined function Prototipefungsi Jangkauan identifier Pengiriman parameter Iterasivsrekursif

  4. Pemrograman Modular Program dibagi-bagimenjadiModul-Modul Moduldalambahasa C di-implementasikandenganFungsi Fungsidibentukdenganmengelompokkansejumlahperintahuntukmenyelesaikantugastertentu. Moduldiperlukanjikakelompokperintahtersebutkerap kali digunakanditempat lain dalam program Modulseringdisebutjugadengan Sub-Program

  5. Pemrograman Modular • Rancangan Top - down denganteknik Sub goal, program besardapatdibagimenjadimodul-modul yang lebihkecil. • Dapatdikerjakanolehlebihdarisatuorangdengankoordinasi yang relatifmudah. • Mencarikesalahanrelatiflebihmudahkarenaalurlogikalebihjelas, dankesalahandapatdilokalisirdalamsatumodul. • Modifikasidapatdilakukan, tanpamenggangu program secarakeseluruhan • Mempermudahdokumentasi • Keuntunganmenggunakanmodul :

  6. Pemrograman Modular Program Utama SubProgram SubProgram SubProgram SubProgram SubProgram Bahasa C melengkapifasilitas modular denganmenggunakanfungsipadasetiapSubProgram. Contohpembagian program menjadibeberapa subprogram.

  7. Pemrograman Modular • Sifat-sifatmodul yang baikadalah : • Fan-In yang tinggi, yaitumakinseringsuatumoduldipanggilolehpengguna, makintingginilai fan-in. • Fan-Out yang rendah, makinsedikittugas yang dilakukanolehsuatumodulmakinrendahnilai fan-out. Dengandemikian, makinspesifiktugas yang dikerjakanolehmodultersebut. • Self-Contained, ataumemenuhikebutu-hannyasendiri.

  8. Library vs User-Defined Function • Fungsidalamabahasa C terbagidalamduajenis : • Library function • User-defined function • Library function, adalahfungsi-fungsi standard yang sudahdisediakanolehbahasa C. Fungsi-fungsitersebutdideklarasikandalam file header (.h), contohnyaclrscr() adadi file conio.h, sqrt() dalammath.h, printf() dalamstdio.h • User-define function, adalahfungsi yang didefinisikansendiriolehpemrogram.

  9. Library vs User-Defined Function Contoh Program yang menggunakan Standard Library Function : printfdansqrt #include<stdio.h> #include<math.h> int main() { inti; for(i=0; i<6; i++) printf(“%d %f”,i,sqrt(i)); return 0; }

  10. KonstruksiFungsi • Konstruksifungsi return-value-type function-name( parameter-list ) { statements; } • return-value-type:tipe data yang dikembalikanolehfungsi • Jikatidakdiisimakadianggaptipenya integer (default int) • Jikareturn-value-typediganti void makafungsitidakmengembalikannilai • Parameter-list:berisidaftarnilai yang dikirimkandarifungsipemanggil

  11. KonstruksiFungsi formal parameter Fungsi intmaksimum (intx, inty){ intmaks = x; if ( y > maks) maks = y; returnmaks; } Pemanggil void main () { inta,b; printf("Input 2 bilanganbulat : "); scanf("%d %d", &a, &b); printf("Bilanganyglebihbesar : %d\n",maksimum(a,b)); } Actual parameter Contoh :

  12. PrototipeFungsi • Penulisanfungsipadabahasa C padadasarnyadiletakkandiataspemanggil (blokmain, ataublokfungsilainnya). Namunadakalanyablokfungsidiletakkansetelahblokpemanggil. Padakondisitersebutperludigunakanprototipefungsi. • Tujuandariprototipefungsi : • Meyakinkansebuahfungsidikenalolehpemanggilnya • Compilerakanmemvalidasi parameter • Sintaks return-value-type function-name( parameter-list );

  13. PrototipeFungsi #include<stdio.h> intmaksimum (int x, int y){ intmaks = x; if ( y > maks) maks = y; return maks } void main () { inta,b; printf("Input 2 bilanganbulat : "); scanf("%d %d", &a, &b); printf("Bilanganyglebihbesar : %d\n",maksimum(a,b)); } Karenafungsimaksimumdiletakkandiataspemanggilnya (main program), makatidakperluprototipefungsi Contoh :

  14. PrototipeFungsi Prototipe Fungsi #include<stdio.h> intmaksimum(int, int); void main () { inta,b; printf("Input 2 bilanganbulat : "); scanf("%d %d", &a, &b); printf("Bilanganyglebihbesar : %d\n",maksimum(a,b)); } intmaksimum (int x, int y){ intmaks = x; if ( y > maks) maks = y; return maks } Karenafungsimaksimumdiletakkandibawahpemanggilnya (main), makaperludiletakkanprototipefungsidiatas,supayadikenalolehpemanggilnya Contoh :

  15. PrototipeFungsi • PenulisanPrototipeFungsisepertidiatasbisaditambahnamaparameternyasbb : intmaksimum(int a, int b); • Yang dipentingkandalamprototipefungsiadalahtipe parameter, jumlah parameter danurutannya.

  16. Lingkup Identifier • Lingkup identifier meliputibagian-bagian program dimanasebuah identifier masihbisadiakses. • Lingkup identifier meliputi : • Local • Global • Local identifier • Identifier yang dideklarasikandidalamfungsi, termasukdaftar parameter. • Lingkupnya terbataspadafungsi tempat dideklarasikan.

  17. Lingkup Identifier • Global identifier • Identifier yang dideklarasikandiluarfungsi. • Ruang lingkupnya meliputiseluruhprogram. • Identifier global, dapatdigunakanuntuk identifier lokal. • Disarankantidakbanyakmenggunakanidentifier global karena: • Jika program semakinbesar, kecenderungan errorsemakinbesar . • Sulitmelacakbila terjadi kesalahan. • Data tidakterjagadenganbaik, setiapfungsi dapatmengubahnilai variabeltanpasepengetahuanfungsi lainnya.

  18. scope darivariabelx int x; fungsi1(){ - - } scope darivariabel y int y; fungsi2(){ int z; - } z dan y hanyadikenalolehmain() z dimain()berbedadgndi fungsi2() y di main() berbeda dgn di fungsi2() main(){ int z,y; - } Jangkauan Identifier Contoh :

  19. Lingkup Identifier

  20. Parameter Fungsi • Pengiriman nilai data antar fungsi dapat dilakukan melalui penggunaan parameter fungsi. • Parametermerupakan ‘interface’ antara suatufungsi denganfungsi lain. • Pengirimannilai data melalui parameter dapat berupa: • By-Value Yang dikirimkefungsi lain adalahnilai datanya. • By Location / by reference Yang ditransferkefungsi lain adalahalamat memorinya.

  21. Pengiriman Parameter #include <stdio.h> void Garis (char x) { //x sbg Parameter Formal {inti; // i, x adalah Local Variabel for (i = 1; i<=10; i++) printf(“%c”,x); } /*Program Utama*/ void main() {char A= ’-’; Garis(A);// A disebut Parameter Aktual } Contoh : Pengiriman parameter by value

  22. Pengiriman Parameter #include <stdio.h> void Hitung (int X, int Y, int *P, int *Q) {*P = X + Y; *Q = X * Y; } void main() {intX, Y, P, Q; /*local variabel*/ printf(“ X=”); scanf(“%d”,&X); printf(“ Y=”); scanf(“%d”,&Y); Hitung(X,Y,&P,&Q); printf(”X + Y = %d\n”, P); printf(”X * Y = %d\n”, Q); } Contoh : Pengiriman parameter by location

  23. Array Dimensi-1 Sebagai Parameter #include <stdio.h> void cetak_array(int index, int *A) { printf(“A[%d]=%d\n”,index, A[index]); } void main() { int A[ ]={1,6,2,8,12}; cetak_array(2, A); } • Contohdiatas: A padafungsi main adalah pointer constant, sedangkan A padafungsicetak_arrayadalah pointer variable. Jika array digunakansebagai parameter dalamsuatufungsi, maka passing parameter harus by location. Contoh:

  24. Array Dimensi-2 sbg Parameter • Deklarasifungsinyadapatberupa: void isimatriks(inta[10][10], int b, int k) atau void isimatriks(int a[][10], int b, int k) • tetapiTIDAKbisaberupa: void isimatriks(inta[10][], int b, int k) atau void isimatriks(inta[][], int b, int k)

  25. Array Dimensi-2 sbg Parameter • Contoh: #include <stdio.h> void cetak(int A[3][4]) {introw,col; for(row=0; row<3; row++){ for(col=0; col<4; col++) printf("X[%d][%d]=%d",row,col,A[row][col]); printf("\n"); } } int main() {int x[3][4]={{1,2,3,4},{8,7,6,5},{9,10,11,12}}; cetak(x); return(0); }

  26. Pengiriman Parameter int main() {char ss[20]="KASUR"; balik(ss); printf("%s\n",ss); getch(); return(0); } Untuk string pada formal parameter bisa : char[ ] atau char * void balik( char ss[ ] ) {intc,i,j; for(i=0, j=strlen(ss)-1; i<j; i++, j--){ c=ss[i]; ss[i]=ss[j]; ss[j]=c; } } void balik( char *ss) {intc,i,j; for(i=0, j=strlen(ss)-1; i<j; i++, j--){ c=ss[i]; ss[i]=ss[j]; ss[j]=c; } }

  27. FungsiRekursif • Fungsirekursifadalahfungsi yang didalamnyaterdapat statement yang memanggildirinyasendiri. • Fungsirekursif, sangatbergunadalampemecahanmasalahyang dapatdidefinisikansecararekursif pula. • Contoh : Faktorial (n)atau n! didefinisikansebagaiberikut : n! = 1, untuk n = 0; n! = n * (n-1)!, untuk n > 0 4! = 4 * 3! 3! = 3 * 2! 2! = 2 * 1! 1! = 1* 0! 0! = 1 Biladitelusurmundur : 4! = 1*2*3*4 = 24

  28. FungsiRekursif 5! (5 * 4!) (5 * (4 *3!)) (5 * (4 * (3 * 2!))) (5 * (4 * (3 * (2 * 1!)))) (5 * (4 * (3 * (2 * (1 * 0!))))) (5 * (4 * (3 * (2 * (1 * 1))))) (5 * (4 * (3 * (2 * 1)))) (5 * (4 * (3 * 2))) (5 * (4 * 6 )) (5 * 24) 120 Contohperhitungan 5 faktorial

  29. FungsiRekursif • Fungsirekursifmempunyaiduakomponenyaitu: • Base case: mengembalikannilaitanpamelakukanpemanggilanrekursiberikutnya. • Reduction step: menghubungkanfungsidisuatunilai input kefungsi yang dievaluasidinilai input yang lain. Sekuennilai input haruskonvergenke base case. • Fungsifaktorial • Base case: n = 0 • Reduction step: f(n) = n * f(n-1)

  30. FungsiRekursifvsIterasi • Faktorial - Rekursif • long faktor (int n) • {if(n==0) return (1); • else return(n * faktor(n-1)); • } • Faktorial - Iteratif • long faktor(int n) • {long i, fak = 1; • for(i=1; i<=n; i++) fak *= i; • return (fak); • } Contoh

  31. KekuranganRekursif Apakah stack ? • Meskipunpenulisan program dengancararekursifbisalebihpendek, namunfunction rekursifmemerlukan : • Memori yang lebihbanyak, karenaperlutambahanuntukmengaktifkan Stack. • Waktulebih lama, karenaperlumenjejakisetiappemanggilanrekursifmelalui stack.

  32. KapanMenggunakanRekursif? • Secaraumum, gunakanpenyelesaiansecararekursif, hanyajika : • Penyelesaiansulitdilaksanakansecaraiteratif • Efisiensidengancararekursifsudahmemadai • Efisiensibukanmasalahdibandingkandengankejelasanlogika program • Tidakmempertimbangkanfaktorpenghematanmemoridankecepataneksekusi program • Pertimbanganantaraaspekkecepatandanpenghematanmemori menggunakaniteratif, dibandingperancanganlogika yang baikmenggunakanrekursif

  33. Bilangan Fibonacci • Urutanbilangan 0, 1, 1, 2, 3, 5, 8, 13 … disebutbilanganFibonacci. Hubunganantarasatuangkadenganangkaberikutnyadidefinisikansecararekursifsebagaiberikut : • Fib(N) = N jikaN = 0 atau 1 • Fib(N) = Fib(N-2) + Fib(N-1) jika N >= 2

  34. Bilangan Fibonacci int Fib(int n) { int f; if(n==0) f = 0; else if(n==1) f = 1; else f = Fib(n-2) + Fib(n-1); return f; } Fungsi fib() di-sampingditulissecararekursidandisebutsebagaislow_Fib() tulislahfast_Fib() menggunakaniterasi. Contoh :

  35. Bilangan Fibonacci FIB (4) FIB (3) FIB (2) FIB (2) FIB (1) FIB (1) FIB (0) FIB (1) FIB (0) Contoh : Skemafibonaccijika N=4

  36. Function Parameter Declaration int fungsi1(a) int a; { a++; return a; } int fungsi2(b) int b; { b = b * b; return b; } #include <stdio.h> int main() {intx; x=fungsi1(3); printf("x=%d\n",x); x=fungsi2(13); printf("x=%d\n",x); return(0); } • ClassicFunction Parameter declaration • Contoh:

  37. Function Parameter Declaration #include <stdio.h> int main() {intx; x=fungsi1(3); printf("x=%d\n",x); x=fungsi2(13); printf("x=%d\n",x); return(0); } int fungsi1(int a) { a++; return a; } int fungsi2(intb) { b = b * b; return b; } • ModernFunction Parameter declaration • Contoh:

  38. Latihan • Buatlah program denganfungsisbb: • Fungsiuntukmeng-input 10 bilangankedalam array • Fungsiuntukmencaribilanganterbesardalam array tersebut • Fungsiuntukmencaribilanganterkecildalam array tersebut • Fungsiuntukmenampilkan : • 10 bilangantersebut • Bilanganterbesardanterkecil

  39. Latihan void Tukar(char A, char B ) { char C ; C = A; A = B, B = C; } void main() { char X, Y ; X = ‘S’; Y = ‘D’; Tukar(X, Y); printf(“X = %c Y= %c”, X, Y); } Perbaiki program berikutsehinggabisadigunakanuntukmenukar 2 buahkarakter

  40. Latihan Fungsitidakmengembalikannilai Fungsi yang mengembalikannilai Jelaskanapaperbedaan keyword return yang adapadafungsibagidenganreturn yang adapadafungsi div ? #include <stdio.h> void bagi(float x, int y, float *z) { if(y==0) return; *z=x/y; } float div(float x, int y) { if(y!=0) return(x/y); } void main() { float f,a=12.75; int b=5; bagi(a,b,&f); printf("%f dibagi %d = %f\n",a,b,f); b=3; f=div(a,b); printf("%f dibagi %d = %f\n",a,b,f); }

  41. Latihan • Bolehkahpadafungsibagitidakmenggunakan keyword return, jikabolehsilahkanprogramnyadirubah ? • Bolehkanpadafungsi div tidakmenggunakan keyword return ? #include <stdio.h> void bagi(float x, int y, float *z) { if(y==0) return; *z=x/y; } float div(float x, int y) { if(y!=0) return(x/y); } void main() { float f,a=12.75; int b=5; bagi(a,b,&f); printf("%f dibagi %d = %f\n",a,b,f); b=3; f=div(a,b); printf("%f dibagi %d = %f\n",a,b,f); }

  42. Latihan PerhatikanLingkupvariabel x pada program disamping. Apa output dari program disamping ? #include <stdio.h> int main() { intx,y; for(x=1; x<=3; x++) { intx=5; printf("x=%d ",x++); for(y=0; y<x; y++) { int x=20; printf("x=%d ",x++); } printf("\n"); } return 0; }

  43. Pilar Kiri Pilar Kanan Tengah Pilar 1 2 3 4 Latihan • Menara Hanoi

  44. Latihan • Pindahkan n-piringandaripilar-kirikepilar-kanandenganpilar-tengahsebagaiantara. Piringan yang beradadipilarkiritersusunsedemikianrupasehinggamenyerupaimenara, yaitupiringan yang lebihkecilselaluberadadiataspiringan yang lebihbesar. Padaprosespemindahanpiringan-piringantersebut, polasusunanmenaraharusselaludijaga. • Alurpemecahansecararekursif : 1. Pindahkan (n-1) piringan-piringanataskepilarantara. 2. Pindahkanpiringanterakhirkepilartujuan. 3. Ulangi 2 dan 3, hinggaselesai.

  45. Latihan • Simulasikanpemindahandengan : • 3 piringan • 4 piringan • 5 piringan • Buatprogramnyasecararekursif

More Related