Anda di halaman 1dari 7

Fungsi Suatu fungsi adalah suatu bagian dari program yang dimaksudkan untuk mengerjakan suatu tugas tertentu

dan letaknya dipisahkan dari bagian program yang menggunakannya. Tujuan penggunaan fungsi : 1. Program menjadi terstruktur 2. Dapat mengurangi pengulangan kode program. Fungsi dapat diimplementasikan dalam tiga bentuk : 1. Pendeklarasian fungsi sebagai prototype fungsi. 2. Pendefinisian fungsi. 3. pemanggilan fungsi dari program lain. 1. Prototipe Fungsi Prototipe fungsi merupakan model dari sebuah fungsi yang berguna untuk mendeklarasikan cirri-ciri fungsi, meliputi : 1. nama fungsi 2. tipe nilai balik fungsi. 3. jumlah dan tipe argument. Bentuk umum : jenis_data nama fungsi (jenis_data, jenis_data,); Prototype fungsi tidak perlu dituliskan bila suatu fungsi terletak di atas fungsi yang memanggilnya. Contoh : long kuadrat(long); int maks(int a, int b); void garis( ); long nilai(int,int);

2. Pendefinisian Fungsi Mendefinisikan fungsi adalah menyusun perintah-perintah yang akan dilakukan fungsi itu sesuai dengan tugas yang akan dilakukannya. Bentuk umum : [jenis data] nama_fungsi ([jenis_data arg1], jenis data ag2],) { [deklarasi variable]; [kode program]; [pernyataan return]; } 3. Pemanggilan Fungsi Fungsi-fungsi yang telah didefinisikan dapat dipanggil dari bagian-bagian fungsi lain. Pada saat sebuah fungsi dipanggil, alur eksekusi program akan berpindah ke fungsi yang dipanggil itu. Setelah selesai mengeksekusi fungsi, kendali program akan

BahasaC Minggu ke-11

dikembalikan kepada fungsi yang memanggil, dan alur eksekusi program dilanjtukan pada pernyataan setelah pemanggilan fungsi tersebut. Bentuk umum : Nama_fungsi( [jenis_data arg1], [jenis data ag2],); Nama fungsi( ); Contoh fungsi tanpa nilai balik : #include <stdio.h> void main( ) { void factor( ); /*prototype fungsi*/ int angka; printf(berikan sebuah bilangan bulat: ); scanf(%d, &angka); factor(angka); /*pemanggilan fungsi*/ } void factor(int angka) /*fungsi*/ { int f,g; f = 2; while (angka %f != 0) /*selama angka mod f tdk sama dengan 0*/ f++; g = angka/f; printf(KPK = %d, PBB = %d\n,f ,g); } output : berikan sebuah bilangan bulat: 27 KPK = 3, PBB = 9 Pengiriman Argumen Pengiriman data dari satu fungsi ke fungsi lain, dapat dilakukan dengan dua cara: 1. mengirimkan salinan data, disebut juga pengiriman dengan nilai (passing by value), dan 2. mengirimkan alamat data, disebut juga pengiriman dengan alamat (passing by reference atau passing by address). Contoh : /*1. pengiriman argument dengan nilai dan fungsi dengan nilai balik*/ #include<stdio.h> void main ( ) { int fungsi(int x); /*prototipe fungsi*/ int x = 5, y =4; printf(Dalam fungsi main( ): x = %d, y = %d\n, x, y); y += fungsi(x); /*memanggil fungsi &mengirim nilai x */ printf(Dalam fungsi main( ): x = %d, y = %d\n, x, y); } int fungsi(int x) /*pendefinisian fungsi*/ { int y; BahasaC Minggu ke-11

y = ++x; printf(Dalam fungsi : x = %d, y = %d\n, x,y); return y; // kembali ke prog utama&mengirim nilai y ke y+ = fungsi(x) } output : Dalam fungsi main( ) : x = ,y = Dalam fungsi : x = , y = Dalam fungsi main( ) : x = ,y =

return merupakan perintah yang berfungsi untuk mengembalikan nilai dari fungsi. Bentuk Umum: return [(ekspresi)] Contoh : return; return 0; return (x*x); return (x > y ? x : y) Lingkup Variabel Variabel internal (lokal) adalah variabel yang dideklarasikan dalam fungsi. Hanya dikenal oleh fungsi tempat variabel dideklarasikan. Variabel eksternal (global) merupakan variabel yang dideklarasikan di luar fungsi. Dapat diakses oleh semua fungsi. Variabel Statis dapat berupa variabel internal (lokal) maupun variabel eksternal (global). Variabel statis tidak akan hilang sekeluarnya dari fungsi (nilai pada variabel akan tetap). Variabel register adalah variabel yang nilainya disimpan dalam register dan bukan dalam memori RAM. Fungsi Rekursi Fungsi C dapat dipakai secara rekursi maksudnya adalah suatu fungsi dapat memanggil dirinya sendiri. Syarat-syarat : 1. Harus ada kasus penghentian. 2. Tiap-tiap sturuktur pemanggilan harus lebih sederhana daripada srtruktur pemanggilan sebelumnnya. Proses rekursi 1. Semua variable otomatis yang terdapat di dalam fungsi rekursif akan memiliki lokasi memory sendiri pada setiap pemanggilannya. 2. Pernyataan-pernyataan yang terdapat sebelum rekursif akan dieksekusi dengan urutan yang sama. 3. Pernyatan-pernyataan yang terdapat setelah pemanggilan rekursif akan dikerjakan dengan urutan yang terbalik terhadap pemanggilan. 4. Kode program untuk fungsi rekursif tidak duplikat, walaupun fungsi tersebut dipanggil beberapa kali. Contoh 1: #include <stdio.h> void main( ) { void hitung(int) ; BahasaC Minggu ke-11 3

hitung(1) ;

/*pemanggilan fungsi dan mengirim nilai 1 */

void hitung (int n) { printf(%d angka, ,n); if (n<5) hitung(n+1); // fungsi rekursi dengan menaikkan nilai n selama n < dari 5 printf(%d angka ,,n); // pemanggilan rekursif dikerjakan dengan urutan yang terbalik terhadap pemanggilan, yaitu n dari 5 sampai 1 } output : 1 angka, 2 angka, 3 angka, 4 angka, 5 angka, 5 angka, 4 angka, 3 angka, 2 angka, 1 angka Contoh2 : #include <stdio.h> #include<conio.h> void main( ) { int m,n; long pangkat (int, int); /*prototipe fungsi*/ printf(input bilangan dan eksponen : ); scanf(%d %d, &m, &n); printf(%d pangkat %d = %ld\n, m, n, pangkat(m,n) ; getch( ); long pangkat(int m,int n) { static long p = 1; if (n = = 0) return 1; else p = m* pangkat(m, n-1); return p; } output : input bilangan dan eksponen : 3 4 3 pangkat 4 = 81 Jenis-jenis rekusif : 1. Rekursi akhir (tail recusive), apabila pemanggilan dilakukan pada bagian akhir fungsi. 2. Rekursi tunggal (singly rekursi), apabila tiap-tiap pemanggilan paling banyak membentuk satu pemanggilan lagi. 3. rekursi ganda (doubly recursive), apabila tiap-tiap pemanggilan membentuk lebih dari satu pemanggilan. Contoh variable local, global dan static: #include <stdio.h> int A = 10; // A variable global void ingat(); //deklarasi fungsi atau prototype fungsi void main( ) BahasaC Minggu ke-11 4 /*fungsi*/ /*p berupa variable statis*/ /*syarat penghentian*/ /*pemanggilan rekursif*/

int m = 10; //m variable lokal printf(main() : m = %d dan A = %d\n, m,A); ingat(); ingat(); ingat(); } void ingat() { static int m = 77 ; m++ ; printf(ingat() : m = %d dan A = %d , m,A); } output : main() : m = 10 dan A = 10 ingat() : m = 78 dan A = 10 ingat() : m = 79 dan A = 10

Array Sekumpulan data yang sejenis dapat disimpan dalam sebuah objek data yang disebut array. 1. Array dimensi Satu. BU deklarasi array : jenis_data nama_array[ukuran]; Jenis_data nama_array[ukuran] = {nilai1,nila2,..}; Contoh: int nilai[3]; int nilai[3] = {1,2,3}; int nilai[] = {1,2,5}; ukuran array boleh tidak ditulis jika elemenya disebutkan. Srting : char hari [3] [7] ={senin, selasa, jumat}; [3] = banyaknya elemen array [7] = banyaknya karakter setiap elemen. Contoh 1: #includestdio.h main() { int I; float nilai[4]; //array nilai dengan 4 elemen bertipe float printf( Masukkan 5 buah nilai suhu\n); for( I = 1; I<4 ; I++) { printf(nilai ke %d : , I+1); scanf(%f,&nilai[I]); tot = tot + nilai[I]; } printf(Total Nilai : %d,tot); } Output : nilai ke 1 : 2 nilai ke 2 : 3 nilai ke 3 : 1 nilai ke 4 : 6 Total Nilai : 12 BahasaC Minggu ke-11

Contoh array karakter: #includestdio.h main() { int i, j; char nama[3][7]={ Dian,Adi,Santi}; for(i=0; i<3;i++) { for (j = 0;j <7;j++) printf(%c,nama[i][j] );printf(\n);} } Output : Dian---Adi----Santi--

Contoh array string: #includestdio.h main() { int i, char nama[3][7]={ Dian,Adi,Santi }; for(i=0; i<3;i++) printf(%s,nama[i]);} } Output : DianAdiSanti Catt : Array string dimensi satu dapat dibentuk dari array karakter dimensi dua, array string dimensi dua dapat dibentuk dari array karakter dimensi tiga dan seterusnya. 2. Array dimensi dua BU : Jenis-data nama_array[ukuran brs][ukuran kolom]; Missal : int nilai[2][3]; Int nilai[2][3] = {1,2,3,4,5,6}; int nilai[ ][3] = {1,2,3,4,5,6); String : char [3][2][10]={Ani,Dian,Candra,Erni,Kiki,Lusi}; [3] = banyaknya elemen baris [2] = banyaknya elemen kolom [10] = banyaknya karakter setiap elemen Contoh : /*program matriks*/ #include <stdio.h> #define brs 2 #define kol 3

BahasaC Minggu ke-11

void main( ) { int data[brs][kol]; int n,m; for (m = 0; m < brs; m++) //input data { for (n = 0; n< kol; n++) { printf(masukan mat [d % ][%d] : ,m,n); scanf(%d, &nilai);printf(\n); data[m][n] = nilai; } clrscr(); } //cetak data for (m = 0 ;m<brs;m++) { for (n = 0;n<=kol;n++) printf(3%d,data[m][n]); printf(\n); } }

BahasaC Minggu ke-11

Anda mungkin juga menyukai