Anda di halaman 1dari 16

MK9-FUNGSI/FUNCTION

Program Bahasa C merupakan kumpulan fungsi-fungsi. Untuk mempermudah


dalam penyusunan program yang akan dibuat untuk menyelesaikan suatu masalah,
maka bahasa menyediakan fungsi-fungsi yang siap pakai yang terdapat dalam
pustaka/library Bahasa C. Untuk dapat menggunakan Pustaka tersebut, maka harus
menyertakan preprocessor #include disertai dengan header filenya sebagai
syaratnya.
Fungsi dapat diartikan suatu statement-statement tertentu yang merupakan
bagian dari program dengan maksud untuk mengerjakan suatu tugas tertentu dan
letaknya terpisah dari program yang memanggilnya. Dengan adanya fungsi, maka
program akan menjadi lebih terstruktur dan fungsi cukup ditulis satu kali, tetapi
penggunaannya bisa berkali-kali yang disesuaikan dengan kebutuhan.
Fungsi yang akan di bahas ini adalah fungsi yang dapat dibuat sendiri oleh
pemrogram.

6.1 Membuat Fungsi


Sebelum fungsi tersebut digunakan, maka harus dideklarasikan terlebih dahulu
dengan cara :

Tipe_Keluaran_Fungsi Nama_Fungsi(Daftar Parameter);

Tipe_Keluaran_Fungsi dapat berisi salah satu tipe data yang ada


dalam Bahasa C.
Nama_Fungsi harus sesuai dengan syarat dari sebuah identifier.
Daftar_Parameter yang berfungsi sebagai alat komunikasi antara satu fungsi
dengan fungsi yang lainnya yang bersifat Optional (boleh ada, boleh tidak ada).

Setelah dideklarasikan, kemudian fungsi tersebut harus didefinisikan, dengan cara


sbb :

Tipe_Keluaran_Fungsi Nama_Fungsi(Daftar
Parameter)
{
statement-1;
statement-2;
...
}
Terdapat beberapa hal yang harus diperhatikan berkaitan dengan pembuatan
sebuah fungsi :
1. Jika Tipe_Keluaran_Fungsi tidak disebutkan, maka akan dianggap sebagai
fungsi dengan tipe int. Jika memiliki Tipe_keluaran_Fungsi selain int, maka
harus didefinisikan dengan menyebutkan tipe fungsinya.
2. Untuk fungsi yang tidak mempunyai Tipe_Keluaran_Fungsi, maka
te0072masuk tipe void.
3. Nilai akhir sebuah fungsi dinyatakan dengan memberikan pernyataan
return.
4. Fungsi dapat diberikan ke dalam sebuah variabel, dioperasikan dalam
sebuah ungkapan maupun dicetak langsung ke layar monitor.
5. Posisi/letak suatu fungsi dapat diletakan sebelum atau sesudah fungsi utama
yaitu fungsi main().

Perhatikan contoh program berikut ini :


#include <stdio.h> /*contoh program 9.1*/
#include “conio.h“
int jumlah(int a, int b); /*deklarasi fungsi*/

main()
{
int x,y;

clrscr();
printf("Masukan bilangan pertama : ");
scanf("%d",&x); fflush(stdin);
printf("Masukan bilangan kedua : ");
scanf("%d",&y); fflush(stdin);

printf("%d + %d = %d",x,y,jumlah(x,y));
printf(“\n“); x=3; y=7;
printf("%d + %d = %d",x,y,jumlah(x,y));
getch();
}

/*definisi fungsi*/
int jumlah(int a, int b)
{
return(a+b); /*pemberian nilai akhir ke fungsi*/
}
#include <stdio.h> /*contoh program 9.2*/
#include “conio.h“
int jumlah(int a, int b); /*deklarasi fungsi*/
main()
{
int x,y, jumlah;

clrscr();
printf("Masukan bilangan pertama : ");
scanf("%d",&x); fflush(stdin);
printf("Masukan bilangan kedua : ");
scanf("%d",&y); fflush(stdin);

hasil=jumlah(a,b); /* fungsi dipanggil*/


printf("%d + %d = %d",x,y,hasil);
getch();
}

/*definisi fungsi*/
int jumlah(int a, int b)
{
int c; c=a+b;
return(c);/*cara lain pemberian nilai akhir ke fungsi*/
}

Contoh program yang memiliki fungsi tapi fungsi tersebut tidak memiliki tipe
keluaran fungsi :
#include <stdio.h> /*contoh program 9.3*/
#include <conio.h>
void tampilkan(void); /*deklarasi fungsi*/
main()
{
int x,y, jumlah;

clrscr();
tampilkan();
getch();
}

/*definisi fungsi*/
void tampilkan(void)
{ puts(“UNIVERSITAS KOMPUTER INDONESIA“); }

6.2 Jenis Parameter dalam fungsi


Dengan adanya parameter yang terdapat pada fungsi, maka dimungkinkannya
adanya komunikasi antara satu fungsi dengan fungsi yang lain. Terdapat 2 jenis
parameter yaitu :
1. Parameter Formal, adalah parameter yang terdapat pada definisi fungsi.
Parameter Formal berupa sebuah variabel.
2. Parameter Aktual, adalah parameter yang terdapat pada pemanggilan fungsi.
Parameter aktual dapat berupa variabel, konstanta, value/nilai, ungkapan,
atau kombinasi diantaranya.
Perhatikan contoh program di bawah ini untuk dapat membedakan parameter
formal dan aktual :

#include <stdio.h> /*contoh program */


#include “conio.h“
int jumlah(int a, int b); /*deklarasi fungsi*/
main()
{ x dan y adalah parameter aktual
int x,y, jumlah;
...
hasil=jumlah(x,y);
printf("%d + %d = %d",x,y,hasil);
getch();
} a dan b adalah parameter formal

//definisi fungsi
int jumlah(int a, int b)
{ ... }

6.3 Cara melewatkan parameter


Terdapat 2 cara untuk melewatkan suatu parameter dalam sebuah fungsi, yaitu :
1. Melewatkan parameter dengan Nilai (Passing Parameter By Value), dengan
karakteristik sbb :
o parameter formal akan menyalin data nilai dari parameter aktualnya
bukan alamat memori letak dari datanya.
o Fungsi yang menerima kiriman nilai akan menyimpannya di alamat
memori terpisah dari nilai aslinya yang digunakan oleh bagian program
yang memanggil fungsi.
o Perubahan nilai yang terjadi pada parameter formal, tidak akan
mempengaruhi nilai pada parameter aktualnya (passing satu arah).

2. Melewatkan parameter dengan referensi (Passing By Refference), dengan


karakteristik sbb :
o Parameter yang dikirim dari parameter aktual ke parameter formal
berupa alamat yang merupakan letak dari nilai datanya di memori
komputer suatu variabel bukan nilai datanya.
o Fungsi yang menerima kiriman alamt ini, akan menggunakan alamat
yang sama untuk mendapatkan nilai datanya. Dengan kata lain
Parameter formal dapat merubah parameter aktualnya (passing dua
arah). Artinya berubah maupun tidak data nilai yang terdapat pada
parameter formal akan selalu dikirimkan kembali ke parameter
aktualnya.
o Pengiriman dua arah ini tidak bisa dilakukan dimana paramater
aktualnya berupa suatu ungkapan.

Perhatikan contoh kedua passing tersebut berikut ini :


/*contoh passing satu arah.contoh 9.4 */
#include "stdio.h"
#include "conio.h"
void tukar(int a, int b);

main()
{
int x=5,y=10;

clrscr();
printf("nilai sebelum tukar() dipanggil x=%d y=%d\n",x,y);
tukar(x,y);
printf("nilai setelah tukar() dipanggil x=%d y=%d\n",x,y);
getch();
}

void tukar(int a, int b)


{
int temp;
temp=a; a=b; b=temp;
printf("nilai di dalam tukar() a=%d y=%d\n",a,b);
}
Contoh output
nilai sebelum tukar() dipanggil x=5 y=10
nilai di dalam tukar() a=10 y=5
nilai setelah tukar() dipanggil x=5 y=10

/*contoh passing dua arah. Contoh 11.5*/


#include "stdio.h"
#include "conio.h"
void tukar(int *a, int *b);
main()
{
int x=5,y=10;

clrscr();
printf("nilai sebelum tukar() dipanggil x=%d y=%d\n",x,y);
tukar(&x,&y);
printf("nilai setelah tukar() dipanggil x=%d y=%d\n",x,y);
getch();
}

void tukar(int *a, int *b)


{
int temp;
temp=*a; *a=*b; *b=temp;
printf("nilai di dalam tukar() a=%d y=%d\n",*a,*b);
}

Contoh output
nilai sebelum tukar() dipanggil x=5 y=10
nilai di dalam tukar() a=10 y=5
nilai setelah tukar() dipanggil x=10 y=5

6.4 Klasifikasi Variabel


Berkaitan dengan sebuah variabel yang digunakan dalam sebuah program, maka
variabel dapat diklasifikasikan berdasarkan kelas penyimpanannya sbb :
1. Variable LOKAL (internal)
Adalah variabel yang dideklarasikan di dalam fungsi dengan sifat-sifat :
o Secara otomatis akan diciptaan ketika fungsi dipanggil dan akan
hilang ketika eksekusi terhadap fungsi tempat variabel dideklarasikan
berakhir.
o Hanya dikenal oleh fungsi tempat variabel dideklarasikan.
o Tidak diinisialisasi secara otomatis. Ketika diciptakan nilainya random.
o Dapat dideklarasikan secara optional dengan menambahkan kata
”auto”.

2. Variabel GLOBAL (eksternal)


Adalah variabel yang dideklarasikan di luar fungsi dengan sifat-sifat :
o Dapat dikenal oleh semua fungsi yang ada
o Jika tidak diinisialisasi, maka secara otomatis akan diberi nilai awal
’nol’.
o Dapat dideklarasikan secara optional dengan menambahkan kata
”extern”.

Perhatikan contoh di bawah ini untuk menjelaskan variabel lokal dan global :
#include <stdio.h> /*contoh program 9.5 */
#include <conio.h>

void satu(void); /*deklarasi fungsi*/


int i=10; /* dekarasi var.Global*/

main()
{
clrscr();
printf(”nilai i sebelum satu() dipanggil = %d\n”,i);
satu(); i=i+3;
printf(”nilai i setelah satu() dipanggil = %d ”,i); getch();
}
void satu(void) /* definisi fungsi*/
{
int i; /* deklarasi var. Lokal */

i=5;
printf(”nilai i dalam satu()= %d\n”,i);
}

Contoh Output
nilai i sebelum satu() dipanggil = 10
nilai i dalam satu() = 5
nilai i setelah satu() dipanggil = 13

3. Variabel STATIS
Adalah variabel yang nilainya tetap dan dapat berupa variabel Lokal dan
Global dengan sifat-sifat sbb :
o Jika bersifat internal/lokal, maka :
 variabel hanya dikenal oleh fungsi tempat variabel
dideklarasikan.
 Nilainya tidak akan hilang setelah keluar dari fungsi (akan tetap
diingat) walaupun eksekusi terhadap fungsi telah berakhir
o Jika bersifat eksternal/global, maka variabel dikenal oleh semua fungsi
yang ada dalam program yang sama.
o Inisialisasi dilakukan hanya sekali yaitu pada saat fungsi pertama kali
dipanggil.
o Jika tidak diberi inisialisasi, maka secara otomatis bernilai ’nol’.
o Dapat dideklarasikan secara optional dengan menambahkan kata
”static”.

Perhatikan contoh di bawah ini :


#include <stdio.h> /*contoh program 9.6 */
#include <conio.h>
void satu(void); /*deklarasi fungsi*/
extern int i=10;

main()
{
clrscr();
printf(”nilai i sebelum satu() dipanggil = %d\n”,i);
satu();
printf(”nilai i setelah satu() dipanggil = %d ”,i+3);
satu();
getch();
}

void satu(void) /* definisi fungsi*/


{
static int i=5; /* deklarasi var. Lokal */

i+=3;
printf(”nilai i dalam satu()= %d\n”,i);
}

Contoh Output
nilai i sebelum satu() dipanggil = 10
nilai i dalam satu() = 8
nilai i setelah satu() dipanggil = 13
nilai i dalam satu() = 11

4. Variabel REGISTER
Adalah variabel yang nilainya disimpan dalam register dan bukan dalam
memori dengan sifat-sifat sbb :
o Hanya dapat diterapkan pada varaibel Lokal.
o Digunakan untuk mengendalikan proses perulangan. Dengan demikian
proses perulangan akan lebih cepat karena variabel register memiliki
kecepatan yang lebih tinggi dibandingkan variabel biasa.
o Dapat dideklarasikan secara optional dengan menambahkan kata
”register”.

6.5 Rekursif
Fungsi yang bersifat rekursif adalah fungsi yang memangil dirinya sendiri.
Perhatikan contoh kasus di bawah ini :
#include <stdio.h> /*contoh program 9.7 */
#include <conio.h>
int jumlahnya(int a);

main()
{
int bil;

clrscr();
printf(”masukan sebuah bilangan bulat positif : ”);
scanf(”%d”,&bil);
printf(”jumlah semua bilangan dari 1-%d = %d”,bil, jumlahnya(bil));

getch();
}

int jumlahnya(int x) /* definisi fungsi*/


{
if (x==1)
return(1);
else
return(x+jumlahnya(x-1));
}

Contoh Output
masukan sebuah bilangan bulat positif : 5 [enter]
jumlah semua bilangan dari 1-5 = 15_

6.6 Pemanggilan antarfungsi


Perhatikan contoh di bawah ini :
#include <stdio.h> /*contoh program 9.8 */
#include <conio.h>
void satu(void);
void dua(void);

void satu(void)
{ puts(“isi fungsi satu()“); }

void dua(void)
{ puts(“isi fungsi dua()“); }
main()
{
clrscr();
puts(”isi fungsi main()”);
satu();
dua();
getch();
}

Outputnya
isi fungsi main()
isi fungsi satu()
isi fungsi dua()

Berkaitan dengan pemanggilan antar fungsi, maka jangan sampai terjadi


pemanggilan antar fungsi yang tidak ada ujungnya, karena akan menyebabkan
program menjadi error. Seperti contoh di bawah ini :
#include <stdio.h> /*contoh program 9.9 */
#include <conio.h>
void satu(void);
void dua(void);

void satu(void)
{
puts(“isi fungsi satu()“);
dua();
}

void dua(void)
{
puts(“isi fungsi dua()“);
satu();
}

main()
{
clrscr();
puts(”isi fungsi main()”);
satu();
getch();
}

Contoh solusi untuk menghentikan kondisi tersebut, perhatikan contoh prohram di


bawah ini :
#include <stdio.h> /*contoh program 9.10 */
#include <conio.h>
void satu(void);
void dua(void);
int x;

void satu(void)
{
puts(“isi fungsi satu()“); dua();
}

void dua(void)
{
x++; puts(“isi fungsi dua()“);
if (x<=5) satu();
else exit();
}

main()
{
clrscr();
puts(”isi fungsi main()”);
satu();
getch();
}

TUGAS/LATIHAN
1. Buatlah program secara modular (dibuat ke dalam beberapa fungsi) untuk
membuat 3 buah bidang geometri dengan contoh output sbb :
MENGHITUNG LUAS BIDANG GEOMETRI
1. SEGITIGA
2. PERSEGI PANJANG
3. LINGKARAN
PILIH [1/2/3 ] : 3 [enter]
Panjang Jari-jari : 4 [enter]
Luas Lingkaran : 50.24

Dengan ketentuan sbb :


Rumus Luas Segitiga = 0.5 x Panjang Alas x Tinggi
Rumus Luas Persegi Panjang = P x L
Rumus Luas Lingkaran = 3,14 x R2

2. Bagaimana bentuk output dari program di bawah ini :


#include <stdio.h>
#include <conio.h>
void satu(void;
void dua(void);
int x=20;

main()
{
int x=5;
printf(”x=%d\n”,x);
satu();
printf(”nilai x sekarang =%d\n”,x);
}

void satu(void)
{
static x=1;

x+=2; printf(“nilai x dalam satu() = %d\n”,x);


dua();
}
void dua(void)
{ x++; printf(“nilai x dalam dua() =%d\n”,x); }

3. Buatlah program secara rekursif untuk membagi dua buah bilangan bulat positif
dengan menggunakan konsep penjumlahan ! Dengan syarat jika bilangan yang
akan dibagi di mod kan dengan bilangan pembaginya menghasilkan nol. Jika tidak
demikian, maka program akan mengulang kembali menginputkan 2 buah bilangan
kembali hingga syarat di atas dipenuhi.
4. Buatlah sebuah program secara rekursif untuk mengalikan 2 buah bilangan bulat
dengan menggunakan konsep penjumlahan. Contoh :
2 x 3 = 6, 6 didapat dengan cara 2 + 2 + 2 atau 3 + 3
5. Bagaimana bentuk output dari program di bawah ini :
#include <stdio.h>
int tukar(int a, int *b);

main()
{
int a=1,b=2;

printf(”nilai a dan b semula = %d %d\n”,a,b);


tukar(a+b,&b);
printf(”nilai a dan b sekarang =%d\n”,a,b);
}

int tukar(int a, int *b)


{
int temp;

temp=a; a=*b; *b=temp;


printf(”nilai a dan b di dalam tukar() = %d %d\n”,a,*b);
}
Contoh Beberapa Fungsi Pustaka dan contoh implementasinya
Fungsi-fungsi berikut ini, merupakan contoh sebagian kecil fungsi yang terdapat
dalam pustaka Bahasa C yang dapat digunakan dalam membuat program beserta
kegunaan dan contoh implementasinya.
 Fungsi operasi string, lokasi berada pada header file string.h diantaranya :
1) strcpy(), digunakan untuk menyalin suatu string ke variabel tujuan.
Sintaknya : strcpy(var_tujuan, sumber_string);
2) strlen(), digunakan untuk memperoleh jumlah karakter dari suatu
string.
Sintaknya : strlen(string);
3) strcat(), digunakan untuk menambahkan string sumber ke bagian akhir
string tujuan.
Sintaknya : strcat(tujuan, string_sumber);
4) strupr(), digunakan untuk mengubah setiap huruf dari suatu string
menjadi huruf kapital semua.
Sintaknya : strupr(string);
5) strlwr(), digunakan untuk mengubah setiap huruf dari suatu string
menjadi huruf kecil semua.
Sintaknya : strupr(string);
6) strcmp(), digunakan untuk membandingkan dua buah string. Hasil dari
fungsi ini bertipe integer dengan nilai negatif jika string pertama kurang
dari string kedua, nol jika string pertama sama dengan string kedua,
Positif jika string pertama lebih besar dari string kedua.
Sintaknya : strcmp(string1, string2);
 Fungsi operasi karakter, lokasi berada pada header file ctype.h diantaranya :
1) islower(), fungsi akan menghasilkan nilai benar (bukan nol) jika
karakter merupakan huruf kecil.
Sintaknya : islower(char);
2) isupper(),fungsi akan menghasilkan nilai benar (bukan nol) jika karakter
merupakan huruf kapital.
Sintaknya : isupper(char);
3) isdigit(), fungsi akan menghasilkan nilai benar (bukan nol) jika
karakter merupakan huruf kecil.
Sintaknya : isdigit(char);
4) toupper (), fungsi akan mengubah huruf kecil menjadi huruf kapital
Sintaknya : toupper(char);
5) tolower(), fungsi akan mengubah huruf kapital menjadi huruf kecil.
Sintaknya : tolower(char);
 Fungsi operasi Operasi Matematika, lokasi berada pada header file math.h
diantaranya :
1) sqrt(), digunakan untuk menghitung akar dari sebuah bilangan.
Sintaknya : sqrt(bilangan);
2) pow(),digunakan untuk menghitung pemangkatan dari suatu bilangan.
Sintaknya : pow(bilangan, pangkat);
3) sin(), cos(), tan), digunakan untuk menghitung nilai sinus, cosinus dan
tangens dari suatu sudut .
Sintaknya : sin(sudut); cos(sudut; tan(sudut);
4) atoi(),diunakan untuk mengkonversi nilai string menjadi bilangan
bertipe double.
Sintaknya : atoi(char x);
5) atof(), diunakan untuk mengkonversi nilai string menjadi bilangan
bertipe integer.
Sintaknya : atof(char x);
6) div(), digunakan untuk menghitung hasil pembagian dan sisa
pembagian.
Sintaknya : div_t div(int x, int y);
Dengan strukturnya sbb :
typedef struct
{
int quot; //hasil pembagian
int rem; //sisia pembagian
} div_t;
7) max(), digunakan untuk menentukan nilai maksimal diantara dua buah
bilangan.
Sintaknya : max(bil1, bil2);
8) min(),digunakan untuk menentukan nilai minimal diantara dua buah
bilangan.
Sintaknya : mai(bil1, bil2);
Contoh-contoh implementasinya dalam program :
/* mencari panjang suatu string */
#include <stdio.h>
#include <conio.h>
#include <string.h>
main()
{
char nama[20];
clrscr();
printf("Nama Saudara ? "); scanf("%s",&nama);
printf("%d",strlen(nama));
getch();
}

Contoh Output
Nama Saudara ? asepberlian
11

#include <stdio.h>
#include <conio.h>
#include <string.h>
main()
{
char n1[20]=”Uni”, n2[20]=”Kom”;

clrscr();
strcat(n1,n2);
printf("Hasil penggabungannya menjadi %s ",n1);

printf("Diubah ke huruf kapital %s ",strupr(n1));


printf("Diubah ke huruf kecil %s ",strlwr(n1));
getch();
}

Contoh Output
Hasil penggabungannya menjadi UniKom
Diubah ke huruf kapital UNIKOM
Diubah ke huruf kecil unikom

#include <stdio.h>
#include <conio.h>
#include <ctype.h>
main()
{
char kar;

clrscr();

printf("masukan sebuah karakter : ");


scanf("%c",&kar);

if (isupper(kar))
{
puts("adalah huruf besar");
printf("huruf kecilnya adalah : %c",tolower(kar));
}
else
{
puts("adalah huruf kecil");
printf("huruf besarnya adalah : %c",toupper(kar));
}
getch();
}

Contoh Output
masukan sebuah karakter : A
adalah huruf besar
huruf kecilnya adalah : a

masukan sebuah karakter : b


adalah huruf kecil
huruf besarnya adalah : B
#include <conio.h>
#include <math.h>
main()
{
int x,y;

clrscr();

printf("masukan bilangan pertama : ");


scanf("%d",&x); fflush(stdin);
printf("masukan bilangan kedua : ");
scanf("%d",&y);

printf("%d pangkat %d = %7.2f",x,y,pow(x,y));

getch();
}

Contoh Output
masukan bilangan pertama : 2
masukan bilangan kedua : 3
2 pangkat 3 = 8.00

#include <stdio.h>
#include <conio.h>
#include <math.h>
main()
{
float sudut;

clrscr();

printf("masukan besar sudut : ");


scanf("%f",&sudut);

printf("nilai sinus %.2f adalah %.2f\n", sudut, sin(sudut));


printf("nilai cosinus %.2f adalah %.2f\n", sudut, cos(sudut));
printf("nilai tangens %.2f adalah %.2f\n", sudut, tan(sudut));

getch();
}

Contoh Output
masukan besar sudut : 20
nilai sinus 20.00 adalah 0.91
nilai cosinus 20.00 adalah 0.41
nilai tangens 20.00 adalah 2.24

Anda mungkin juga menyukai