Anda di halaman 1dari 30

Fungsi

PRODI. TEKNIK INFORMATIKA (S-1)


Team Teaching

Ali Akbar Lubis, S.Kom., M.TI.,


Sunaryo Winardi, S.Kom., M.TI.,
Wulan Sri Lestari, S.Kom.
Objek Pembelajaran
• Apa itu Fungsi
• Deklarasi Fungsi
• Kegunaan Fungsi
• Contoh program dengan Fungsi
Pendahuluan
• Fungsi merupakan blok dari kode yang dirancang untuk
melaksanakan tugas khusus.
• Berisi sejumlah pernyataan yang dikemas dalam sebuah
nama.
• Tujuan:
• Program menjadi Terstuktur. Memudahkan dalam mengembangkan
program. (program dibagi menjadi beberapa modul kecil – modular
programming).
• Menghemat ukuran program. (menghindari penulisan yang berulang
– ulang).
• Memudahkan dalam maintenance program.
• Fungsi yang telah didefinisikan, dapat digunakan untuk program lain.
(dapat dibuat sebuah library).
Cara Definisi Fungsi
return-value-type function-name ( parameter-list )
{
statements;
}

return-value-type: tipe data yang dikembalikan oleh fungsi


Jika tidak diisi maka dianggap tipenya integer (default int) Jika
return-value-type diganti void maka fungsi tidak
mengembalikan nilai

function-name: nama untuk user-define function

Parameter-list: berisi daftar nilai yang dikirimkan dari fungsi


pemanggil
How Function works in C Programming?
Advantages of user-defined function
1. The program will be easier to understand, maintain and
debug.
2. Reusable codes that can be used in other programs
3. A large program can be divided into smaller modules.
Hence, a large project can be divided among many
programmers.
Contoh penggunaan Fungsi
int maksimum (int x, int y){
int maks = x;
if ( y > maks)
maks = y;
return maks;
}

void main () {
int a,b;
printf("Input 2 bilangan bulat : ");
scanf("%d %d", &a, &b);
printf("Bilangan yg lebih besar :
%d\n",maksimum(a,b));
}
How to Pass Argument to a function?
Prototipe Fungsi
Penulisan fungsi pada bahasa C pada dasarnya
diletakkan diatas fungsi utama (blok main). Namun
ada kalanya blok fungsi diletakkan setelah blok
pemanggil. Pada kondisi tersebut perlu digunakan
prototipe fungsi.
Tujuan dari prototipe fungsi :
Meyakinkan sebuah fungsi dikenal oleh pemanggilnya Compiler
akan memvalidasi parameter

Sintaks:
return-value-type function-name( parameter-list );
Contoh Program tanpa Fungsi
#include <stdio.h>
#include <conio.h>
void main(){
int bil1, bil2, bil3, bil4;
printf("Program Menghitung Penjumlahan & Pengurangan\n");
printf("dari 2 buah bilangan\n");
printf("-------------------------------------\n");
printf("Nilai A : "); scanf("%d", &bil1);
printf("Nilai B : "); scanf("%d", &bil2);
bil3 = bil1 + bil2;
bil4 = bil1 - bil2;
printf("\n\nResult:\n");
printf("\t%2d + %2d = %2d\n", bil1, bil2, bil3);
printf("\t%2d - %2d = %2d\n", bil1, bil2, bil4);
getch();
}
Contoh Program dengan fungsi tanpa prototipe

#include <stdio.h>
#include <conio.h>
void judul(){
printf("Program Mencari Penjumlahan dan
Pengurangan\n");
printf("dari 2 buah bilangan\n");
printf("-------------------------------------\n");
}

int jumlah(int a, int b){


return(a + b);
}

int selisih(int a , int b) {


return(a - b);
}
Cont…

void main(){
judul();
int bil1, bil2, bil3, bil4;
printf("Nilai A : "); scanf("%d", &bil1);
printf("Nilai B : "); scanf("%d", &bil2);
bil3 = jumlah(bil1, bil2);
bil4 = selisih(bil1, bil2);
printf("\n\nResult:\n");
printf("\t%2d + %2d = %2d\n", bil1, bil2, bil3);
printf("\t%2d - %2d = %2d\n", bil1, bil2, bil4);
getch();
}
Contoh Program dengan fungsi dengan prototipe

#include <stdio.h>
#include <conio.h>
void judul();
int jumlah(int a, int b);
int selisih(int a, int b);
void main(){
int bil1, bil2, bil3, bil4;
clrscr();
judul();
printf("Nilai A : "); scanf("%d", &bil1);
printf("Nilai B : "); scanf("%d", &bil2);
bil3 = jumlah(bil1, bil2);
bil4 = selisih(bil1, bil2);
printf("\n\nResult:\n");
Cont…
printf("\t%2d + %2d = %2d\n", bil1, bil2, bil3);
printf("\t%2d - %2d = %2d\n", bil1, bil2, bil4);
getch();
}

void judul(){
printf("Program Mencari Penjumlahan dan
Pengurangan\n");
printf("dari 2 buah bilangan\n");

printf("-------------------------------------------\n")
;
}

int jumlah(int a, int b){


return(a + b);
}

int selisih(int a , int b) {


return(a - b);
}
Return Statement of a Function
Pengiriman Parameter

Terdapat 2 macam parameter fungsi, yaitu:


• Parameter formal (virtual), merupakan variabel
yang terdapat pada daftar parameter yang berada di
dalam definisi fungsi atau parameter yang
dideklarasikan pada bagian header dari fungsi.
• Parameter aktual, merupakan variabel yang
digunakan pada pemanggilan suatu fungsi.
Cara melewatkan Parameter ke dalam
fungsi
• Pemanggilan dengan Nilai (pass by value)
Pada pemanggilan jenis ini, nilai dari parameter aktual
akan dimasukkan ke parameter formal. Dengan cara ini, nilai
parameter aktual tidak akan berubah, walaupun nilai dari
parameter formal berubah.

• Pemanggilan dengan Referensi (pass by reference)


Pemanggilan dengan referensi merupakan pemanggilan
alamat suatu variabel di dalam fungsi. Cara ini dapat dipakai
untuk mengubah isi suatu variabel yang ada di luar dari
fungsi, yang dilakukan dengan mengubah nilai suatu variabel
yang ada di dalam fungsi.
Contoh : Pengiriman parameter by value

#include <stdio.h>

void tampil(int x){ /* x disebut Parameter Formal */


x=x+10;;
printf(“%d”,x)
}
/*Program Utama*/
void main(){
int A = 10;
tampil(A); /* A disebut Parameter Aktual */
printf(“%d”,A);

}
Contoh Pengiriman parameter by
reference

#include <stdio.h>
void Hitung (int X, int Y, int *P, int *Q)
{
*P = X + Y;
*Q = X * Y;
}

void main()
{
int X, 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);
}
Cont…
void BacaData(int n, int x[]) {
int i, j;
printf("\nProses Baca Data Secara RANDOM: \n");
for(i = 0; i < n; i++) {
x[i] = rand()%100;
printf("Data ke -%2d : %d\n", i+1, x[i]);
}
}
void TampilData(int n, int x[]) {
int i, j;
for(i = 0; i < n; i++)
printf("%5d", x[i]);
}
Fungsi Rekursi
Fungsi rekursi adalah fungsi yang di dalam function body-nya ada statement yang
memanggil dirinya sendiri.
Contoh :
Faktorial (n) atau n! didefinisikan sebagai berikut :
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
Bila ditelusur mundur : 4! = 1*2*3*4 = 24
Contoh perhitungan 5 faktorial

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
Cont…

Fungsi rekursif mempunyai dua komponen yaitu:


Base case: mengembalikan nilai tanpa melakukan pemanggilan
rekursi berikutnya.
Reduction step: menghubungkan fungsi di suatu nilai input ke
fungsi yang dievaluasi di nilai input yang lain. Sekuen nilai input
harus konvergen ke base case.

Fungsi faktorial
Base case : n = 0
Reduction step: f(n) = n * f(n-1)
Fungsi Iterasi vs Rekursif
• 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);
}
Gambaran Proses Rekursif

Jadi 4! = 4*3*2*1 = 24
Kekurangan Rekursif
Meskipun penulisan program dengan cara rekursif bisa lebih
pendek, namun procedure atau function rekursif memerlukan :
• Menggunakan memori yang lebih banyak
• Waktu lebih lama
Kapan Menggunakan Rekursif?

Secara umum, gunakan penyelesaian secara rekursif, hanya


jika:
• Penyelesaian sulit dilaksanakan secara iteratif
• Efisiensi dengan cara rekursif sudah memadai
• Efisiensi bukan masalah dibandingkan dengan kejelasan logika program
• Tidak mempertimbangkan faktor penghematan memori dan kecepatan
eksekusi program

Pertimbangan antara aspek kecepatan dan penghematan


menggunakan iteratif, dibanding perancangan logika yang baik
menggunakan rekursif
Latihan
Buatlah fungsi untuk menghasilkan deret bilangan Lucas
dengan ketentuan sebagai berikut:

Anda mungkin juga menyukai