1 / 21

Fungsi (2)

Fungsi (2). Dr. Anto Satriyo Nugroho, M.Eng Email: asnugroho@gmail.com Web: http://asnugroho.net/lecture/dp.html. Jenis Variable. Variabel Lokal Variabel Eksternal/Global Variabel statis Variabel register. Variabel Lokal. Dideklarasikan dalam suatu fungsi

Download Presentation

Fungsi (2)

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 (2) Dr. Anto Satriyo Nugroho, M.Eng Email: asnugroho@gmail.com Web: http://asnugroho.net/lecture/dp.html

  2. Jenis Variable • Variabel Lokal • Variabel Eksternal/Global • Variabel statis • Variabel register

  3. Variabel Lokal • Dideklarasikan dalam suatu fungsi • Dibentuk ketika fungsi itu dipanggil, dan hilang ketika fungsi selesai dieksekusi • Hanya dikenal oleh fungsi tempat variabel itu dideklarasikan • Tidak ada inisialisasi secara otomatis

  4. Contoh 1 #include <stdio.h> float konversikeUSD(float rupiah) { float c; c=0.0001; /* 1 USD = 10000 rupiah */ return (rupiah*c); } main() { float x; printf(“Masukkan nilai mata uang dalam rupiah: “); scanf(“%f”,&x); printf(“Nilai matauang dalam USD: %f\n",konversikeUSD(x)); } c adalah variabel lokal fungsi konversikeUSD

  5. Variabel Eksternal • Dideklarasikan di luar fungsi • Dapat diakses semua fungsi • Apabila tidak diberi nilai awal, maka akan diinisialisasi dengan nilai nol • Contoh: lihat program 5.4 • Resiko memakai variabel eksternal • Semakin besar program, semakin besar resiko terjadinya error • Sulit melacak kesalahan • Data tidak terjaga dengan baik, karena setiap fungsi dapat mengubah isi variabel eksternal tanpa sepengetahuan fungsi yang lain • Biasakan tidak menggunakan variabel eksternal, melainkan memakai parameter untuk melakukan pengiriman data dari satu fungsi ke fungsi yang lain

  6. Contoh 2 (program 5.4) • #include <stdio.h> • int gNilai=98; • void inkremen(void) • { • gNilai= gNilai*1.05; • } • main() • { • printf("Nilai awal : %d\n",gNilai); • gNilai = gNilai +2; • printf("Nilai sekarang: %d\n",gNilai); • inkremen(); • printf("Nilai sekarang: %d\n",gNilai); • } gNilai adalah variabel eksternal

  7. Variabel Statis • Bisa merupakan variabel lokal maupun global • Jika variabel statis bersifat lokal, hanya dikenal oleh fungsi tempat variabel itu dideklarasikan. Jika variabel statis bersifat global, maka dapat diakses oleh seluruh fungsi • Perbedaan dengan variabel lokal: nilai variabel statis tidak akan hilang setelah keluar dari fungsi. • Inisialisasi hanya dilakukan sekali, pada saat fungsi itu dipanggil. Jika tidak ada inisialisasi, maka variabel statis itu akan diberi nilai nol

  8. Contoh 3 (program 5.5) • #include <stdio.h> • void naik(void) • { • static int statX; • statX++; • printf("Nilai statX dalam fungsi naik : %d\n",statX); • } • main() • { • int statX = 100; • naik(); • naik(); • printf("Nilai statX dalam fungsi main : %d\n",statX); • }

  9. Variabel Register • Variabel yang disimpan dalam register, bukan dalam RAM (Random Access Memory). • Biasanya digunakan untuk variabel yang berfungsi sebagai pengendali loop. • Variabel yang diletakkan di register akan mempunyai kecepatan jauh lebih tinggi daripada variabel yang diletakkan di RAM.

  10. Cara pengiriman parameter/argumen • Call by value • Call by reference

  11. Call by Value • Yang dikirimkan ke fungsi lain adalah NILAI parameter • Nilai parameter aktual akan disalin ke parameter formal. Sehingga kalau pun nilai parameter formal berubah, maka nilai parameter aktual tidak akan berubah.

  12. Contoh 4 (Program 5.7) #include <stdio.h> int jumlahganda(int n1,int n2) { int n3; n3= 2 * (n1+n2); return n3; } main() { int bil1, bil2, bil3; printf(“Bilangan ke-1: “); scanf(“%d”,&bil1); printf(“Bilangan ke-2: “); scanf(“%d”,&bil2); bil3=jumlahganda(bil1,bil2); printf(“Jumlah ganda= %d\n",bil3); } Isi parameter “bil1” disalin ke “n1”, Isi parameter “bil2” disalin ke “n2”. Walau di dalam fungsi jumlahganda, nilai n1 dan n2 diotak-atik sekalipun, nilai “bil1” dan “bil2” pada fungsi main tidak akan terpengaruh !

  13. Contoh 5 SWAP bil1 bil2 10 20 SWAP bil1 bil2 20 10

  14. Contoh 5-A SWAP (cara yang salah) #include <stdio.h> void dataswap(int n1,int n2) { int dummy; dummy=n1; n1=n2; n2=dummy; } main() { int bil1, bil2; printf(“Bilangan ke-1: “); scanf(“%d”,&bil1); printf(“Bilangan ke-2: “); scanf(“%d”,&bil2); dataswap(bil1,bil2); printf(“bil1= %d bil2=%d\n",bil1,bil2); } MENGAPA TIDAK BERHASIL ?

  15. Mengapa GAGAL ? • Call by value : • Isi bil1 disalin ke n1 • Isi bil2 disalin ke n2 • di fungsi dataswap, isi nilai n1 dan n2 ditukarkan, tetapi tidak akan berpengaruh pada isi bil1 dan bil2 • Karena itu, waktu isi bil1 dan bil2 diprint, tidak terlihat ada perubahan • Harus memakai CALL BY REFERENCE

  16. Call by Reference • Yang diserahterimakan bukan nilai parameter, melainkan ADDRESS mereka • Pakailah Call by Reference kalau anda ingin mengubah ISI dari parameter yang dikirimkan ke sebuah fungsi • INGAT : OPERATOR & dan * int x; nilai dari parameter x dapat diakses dengan x, ditampilkan dengan cara print(“%d”,x); ADDRESS dari x dapat diakses dengan &x int *y; nilai dari parameter dapat diakses dengan *y ADDRESS dari data tsb. dapat diakses dengan y

  17. Contoh 5-B SWAP (cara yang benar) #include <stdio.h> void dataswap(int *n1,int *n2) { int dummy; dummy=*n1; *n1=*n2; *n2=dummy; } main() { int bil1, bil2; printf(“Bilangan ke-1: “); scanf(“%d”,&bil1); printf(“Bilangan ke-2: “); scanf(“%d”,&bil2); dataswap(&bil1,&bil2); printf(“bil1= %d bil2=%d\n",bil1,bil2); } MENGAPA TIDAK BERHASIL ?

  18. Contoh 6 #include <stdio.h> void jumlahkali(int a,int b,int *c, int *d) { *c = a+b; *d = a*b; } main() { int x, y,jumlah,kali; printf("x: "); scanf("%d",&x); printf("y: "); scanf("%d",&y); jumlahkali(x,y,&jumlah,&kali); printf("%d+%d=%d %d*%d=%d\n",x,y,jumlah,x,y,kali); }

  19. Call by Reference & mengirimkan array • Mengirimkan array ke suatu fungsi untuk diolah, umumnya memakai teknik Call by Reference • Yang diserahkan ke fungsi adalah address elemen pertama sebuah array • Contoh int x[5]; address yang dikirimkan adalah 1001 dengan cara x &x[0] x[0] 1001 x[1] 1002 x[2] 1003 x[3] 1004 x[4] 1005

  20. Mengirimkan array 1 DIMENSI #include <stdio.h> int arraysum(int y[],int m) { int i,jumlah; jumlah=0; for(i=0;i<m;i++) jumlah = jumlah + y[i]; return jumlah; } main() { int x[5]={1,2,3,4,5}; int sum; sum=arraysum(x,5); printf("sum : %d\n",sum); }

  21. Mengirimkan array 2 DIMENSI #include <stdio.h> void matrix_jumlah(int x[2][3],int y[2][3],int row,int column) { int i,j; for (j=0;j<row;j++) { for(i=0;i<column;i++) { printf(“%d ”,x[j][i]+y[j][i]); } printf(“\n”); } } main() { int ma[2][3]= { {1, 2, 3}, {4, 5, 6} }; int mb[2][3]= { {6, 3, 4}, {5, 1, 2} }; matrix_jumlah(ma,mb,2,3); }

More Related