Upload
docong
View
234
Download
0
Embed Size (px)
Citation preview
FUNGSI DALAM BAHASA “C”
KELOMPOK 6
EKA FITRI YANI (52411343)
M FIRAS AUFAR (54411196)
OCTAVIANA (5A412139)
OKKY MAHENDRA (55411442)
UNIVERSITAS GUNADARMA
2012
ii
KATA PENGANTAR
Segala puji bagi Tuhan Yang Maha Esa karena berkat rahmat dan hidayah-Nya kami dapat
menyelasaikan makalah ini tepat waktu dan dengan sebaik-baiknya.
Makalah ini disusun agar pembaca dapat memperluas ilmu tentang Fungsi pada Bahasa
Pemrograman C yang kami sajikan berdasarkan pengamatan dari beberapa sumber. Penyusun
sangat berterima kasih kepada semua pihak yang telah membantu menyelesaikan makalah ini.
Semoga makalah ini dapat bermanfaat dan memberikan wawasan yang lebih luas kepada
pembaca. Walaupun makalah ini memiliki kelebihan dan kekurangan, penyusun mohon kepada
pembaca untuk memberi saran dan kritik yang bersifat membangun.
Depok, 19 Desember 2012
Penyusun
iii
DAFTAR ISI
Kata Pengantar ii
Daftar Isi iii
FUNGSI DALAM BAHASA C
A. Pengertian Fungsi 1
B. Mendefinisikan Fungsi 1
C. Deklarasi Fungsi 2
D. Parameter Formal dan Parameter Aktual 3
E. Ruang Lingkup Variabel 4
a. Variabel Lokal 4
b. Variabel Global 5
c. Variabel Register 6
d. Variabel Statik 7
F. Pengiriman Parameter 7
a. Pengiriman Parameter Secara Nilai (Call by Value) 7
b. Pengiriman parameter secara acuan (Call by reference) 9
c. Pengiriman Parameter Berupa Larik 10
G. Rekursi 11
H. Contoh Program Function 13
Daftar Pustaka 19
1
FUNGSI DALAM BAHASA “C”
A. PENGERTIAN FUNGSI
Fungsi merupakan suatu bagian dari program yang dimaksudkan untuk mengerjakan
suatu tugas tertentu dan letaknya terpisah dari program yang memanggilnya. Fungsi merupakan
elemen utama dalam bahasa C karena bahasa C sendiri terbentuk dari kumpulan fungsi-fungsi.
Dalam setiap program bahasa C, minimal terdapat satu fungsi yaitu fungsi main(). Fungsi banyak
diterapkan dalam program-program C yang terstruktur. Keuntungan penggunaan fungsi dalam
program yaitu program akan memiliki struktur yang jelas (mempunyai readability yang tinggi)
dan juga akan menghindari penulisan bagian program yang sama. Dalam bahasa C fungsi dapat
dibagi menjadi dua, yaitu fungsi pustaka dan fungsi yang didefinisikan atau dibuat oleh
programmer.
B. MENDEFINISIKAN FUNGSI
Suatu fungsi secara umum mempunyai dua buah komponen utama, yaitu definisi fungsi
dan tubuh fungsi. Definisi fungsi berisi dengan tipe dari fungsi, nama dari fungsi dan argumen-
argumennya jika digunakan. Tubuh fungsi berisi dengan statemen-statemen yang akan
melakukan tugas yang akan diberikan kepada fungsi yang bersangkutan.
Bentuk umum dari fungsi :
tipe_fungsi nama-fungsi(argumen1,argumen2,...) Definisi fungsi
{
..........................................................
.......................................................... Badan fungsi
..........................................................
}
Definisi fungsi ditulis sebelum tubuh fungsi tanpa diakhiri dengan titik koma. Tipe di
definisi fungsi menunjukkan tipe dari fungsi. Tipe dari fungsi tergantung dari tipe data hasil
balik yang akan diberikan oleh fungsi. Misalnya hasil balik dari fungsi berupa nilai numerik
pecahan, maka tipe dari fungsi dapat dibuat float atau double atau long double tergantung pada
2
ketepatan yang diinginkan. Jika fungsi tidak memberikan nilai balik, maka tipenya adalah void.
Tipe dari fungsi ini tidak dapat ditulis jika tipenya adalah char atau int. Jika suatu fungsi
didefinisikan tanpa menggunakan tipenya, maka akan dianggap bertipe integer.
Contoh definisi fungsi dengan menggunakan argumen atau parameter :
int Fungsi (float A, int B, char C)
Hal-hal yang perlu diperhatikan dalam penggunaan fungsi:
a) Kalau tipe fungsi tidak disebutkan, maka akan dianggap sebagai fungsi dengan nilai
keluaran bertipe integer.
b) Untuk fungsi yang memiliki keluaran bertipe bukan integer, maka diperlukan
pendefinisian penentu tipe fungsi.
c) Untuk fungsi yang tidak mempunyai nilai keluaran maka dimasukkan ke dalam tipe void
d) Pernyataan yang diberikan untuk memberikan nilai akhir fungsi berupa pernyataan
return.
e) Suatu fungsi dapat menghasilkan nilai balik bagi fungsi pemanggilnya.
C. DEKLARASI FUNGSI
Suatu fungsi yang memberikan hasil balik selain tipe integer perlu dideklarasikan
sebelum digunakan. Deklarasi fungsi ditulis sebelum fungsi tersebut digunakan.
Bentuk umum dari deklarasi fungsi :
tipe nama_fungsi( argumen1, argumen2, ... );
Jika bagian dari program yang menggunakan fungsi diletakkan sebelum definisi fungsi,
maka deklarasi fungsi diperlukan. Akan tetapi jika bagian program yang menggunakan fungsi
terletak setelah definisi dari fungsi, maka deklarasi fungsi boleh tidak dapat dituliskan. Jika suatu
fungsi memberikan hasil balik, maka nilai hasil balik yang diberikan oleh fungsi dapat dilakukan
oleh statement return yang diikuti oleh nilai hasil baliknya yang ditulis tanda kurung.
Contoh :
return(F);
Contoh program :
#include <stdio.h>
#include <conio.h>
3
int faktorial (int N); /*prototype fungsi*/
int main()
{
int N;
int fak;
printf ("berapa faktorial ? ");scanf ("%d", &N);
fak = faktorial (N);
printf ("%d faktorial = %d\n", N, fak);
getch();
}
int faktorial (int N) /*definisi fungsi*/
{
int I;
int F=1;
if (N<=0)
return (0);
for (I=2;I<=N;I++)
F *= I;
return(F);
}
Output :
D. PARAMETER FORMAL DAN PARAMETER AKTUAL
Parameter Formal adalah variabel yang ada pada daftar parameter dalam
definisi fungsi. Parameter Aktual adalah variabel (parameter) yang dipakai dalam
4
pemanggilan fungsi. Dalam contoh program pertambahan di atas parameter formal terdapat pada
pendefinisian fungsi.
Contoh program :
#include <stdio.h>
#include <conio.h>
int persegi(int s) /* Parameter formal */
{
int L;
L=s*s;
return (L);
}
main()
{
int Luas;
Luas = persegi(5); /* Parameter aktual */
printf ("Luas : %d ", Luas);
getch();
}
E. RUANG LINGKUP VARIABEL
Terdapat tiga macam bentuk variabel yang mempunyai ruang lingkup berbeda, yaitu
variabel lokal, variabel global, variabel register dan variabel statik.
a. Variabel Lokal
Merupakan variabel yang namanya dan nilainya hanya dikenal di suatu blok statemen tertentu
saja atau di dalam suatu fungsi. Variabel lokal akan dihapus dari memori jika proses sudah
meninggalkan blok statemen letak variabel lokalnya.
Sifat-sifat variabel lokal :
a) Secara otomatis akan diciptakan ketika fungsi dipanggil dan akan lenyap ketika proses
eksekusi terhadap fungsi berakhir.
5
b) Hanya dikenal oleh fungsi tempat variabel dideklarasikan
c) Tidak ada inisialisasi secara otomatis (saat variabel diciptakan nilainya random).
d) Dideklarasikan dengan menambahkan kata “auto” (opsional).
b. Variabel Global
Variabel global (eksternal) adalah variabel yang dideklarasikan di luar fungsi.
Sifat-sifat variabel global :
a) Dikenal (dapat diakses) oleh semua fungsi.
b) Jika tidak diberi nilai awal secara otomatis berisi nilai nol.
c) Dideklarasikan dengan menambahkan kata “extern” (opsional).
Contoh program :
#include <stdio.h>
#include <conio.h>
int a = 10; /* Variabel Global */
int b = 20;
int c = 30;
void lokal(int a,int b,int c);
main()
{
int d;
printf("ini adalah variabel global\n a=%d\n b=%d\n c=%d\n", a,b,c);
d = a+b;
printf("nilai d: %d\n", d);
lokal(a,b,c);
getch();
}
void lokal (int a,int b,int c)
{
6
a=1; /* Variabel Lokal */
b=2;
c=3;
int d= a+b;
printf("ini adalah variabel lokal\n a=%d\n b=%d\n c=%d\n", a,b,c);
printf ("nilai d = %d", d);
getch();
}
Output :
c. Variabel Register
Variabel Register adalah variabel yang nilainya disimpan dalam register dan bukan dalam
memori RAM.
Sifat-sifat variabel register :
a) Hanya dapat diterapkan pada variabel lokal yang bertipe int dan char.
b) Digunakan untuk mengendalikan proses perulangan (looping).
c) Proses perulangan akan lebih cepat karena variabel register memiliki kecepatan yang
lebih tinggi dibandingkan variabel biasa.
d) Dideklarasikan dengan menambahkan kata “register”.
Contoh Program :
#include <stdio.h>
int pangkat(register int a, register int b){
register int hasil;
hasil = 1;
for (;b;b–){
hasil *=a;
7
}
return hasil;
}
main(){
printf(“2^6 = %d\n”,pangkat(2,6));
return 0;
}
Output :
d. Variabel Statik
Variabel statis adalah variabel yang nilainya tetap dan bisa berupa variabel lokal
(internal) dan variabel global (eksternal).
Sifat-sifat variabel statis :
a) Jika bersifat internal (lokal), maka variabel hanya dikenal oleh fungsi tempat variabel
dideklarasikan.
b) Jika bersifat eksternal (global), maka variabel dapat dipergunakan oleh semua fungsi
yang terletak pada program yang sama.
c) Nilai variabel statis tidak akan hilang walau eksekusi terhadap fungsi telah berakhir.
d) Inisialisasi hanya perlu dilakukan sekali saja, yaitu pada saat fungsi dipanggil pertama
kali.
e) Jika tidak diberi nilai awal secara otomatis berisi nilai nol.
f) Dideklarasikan dengan menambahkan kata “static”.
F. PENGIRIMAN PARAMETER
a. Pengiriman Parameter Secara Nilai (Call by Value)
Yang dikirim adalah nilai dari datanya, bukan alamat memori letak datanya. Perubahan
nilai di fungsi tidak akan merubah nilai asli di bagian program yang memanggil fungsi walaupun
8
keduanya menggunakan nama variabel yang sama. Merupakan pengiriman searah, yaitu dari
bagian program yang memanggil fungsi ke fungsi yang dipanggil.
Contoh program :
#include <stdio.h>
void Secara_Nilai(float A, float B, char C);
main()
{
char C='a';
float A = 25, *Alamat_A;
Alamat_A=&A;
Secara_Nilai(A,A/3,C);
printf(“Di fungsi utama setelah memanggil fungsi Secara_Nilai:\n”);
printf(“Nilai A adalah %f di alamat %p\n”, A, Alamat_A);
printf(“Nilai A/3 adalah %f\n”, A/3);
printf(“Nilai karakter C adalah %c\n”, C);
}
void Secara_Nilai(float A, float B, char C);
{
float *Alamat_A;
Alamat_A=&A;
A=7;
printf(“Di fungsi Secara_Nilai:\n”);
printf(“Nilai A adalah 5f di alamat %p\n”,A,Alamat_A);
printf(“Nilai B adalah %f\n”,B);
printf(“Nilai karakter C adalah %c\n\n”,C);
}
Output :
Di fungsi Secara_Nilai:
Nilai A adalah 7.000000 di alamat FFCA
Nilai B adalah 8.333333
9
Nilai karakter C adalah a. Di fungsi utama setelah memanggil Secara_Nilai;, Nilai A adalah
25.000000 di alamat FFD8, Nilai A/3 adalah 8.333333, Nilai karakter C adalah a
Keterangan :
Parameter-parameter nyata yang dikirimkan adalah datanya, yaitu untuk variabel A, A/3,
dan C sebagai berikut : Secara_Nilai(A, A/3, C);
Variabel A dan C menempati memori yang berbeda untuk fungsi utama yang memanggil
fungsi dan yang digunakan di fungsi Secara_Nilai(). Untuk fungsi utama, variabel A
disimpan di alamat FFD8, sedangkan di fungsi Secara_Nilai() nilai variabel A disimpan
dalam alamat memori FFCA.
Perubahan nilai variabel A di fungsi Secara_Nilai() menjadi bernilai 7 tidak merubah
nilai variabel A ini di fungsi utama yang akan tetap bernilai 25.
Pengiriman suatu nilai merupakan pengiriman satu arah sebagai berikut : Secara_Nilai(A,
A/3, C); void Secara_Nilai(float A,float B, Char C)
Pengiriman secara nilai dapat mengirimkan suatu ungkapan, yaitu A/3.
b. Pengiriman parameter secara acuan (Call by reference)
Yang dikirim adalah alamat memori letak datanya, bukan nilai dari datanya. Perubahan
nilai di fungsi akan merubah nilai asli di bagian program yang memanggil fungsi. Merupakan
pengiriman dua arah, yaitu dari bagian program yang memanggil fungsi ke fungsi yang dipanggil
dan sebaliknya. Contoh di bawah ini akan menunjukkan bahwa perubahan nilai di fungsi untuk
parameter yang dikirimkan secara acuan akan merubah juga nilai di bagian program yang
memanggilnya. Karena sifat dua arah ini, maka pengiriman parameter secara acuan dapat juga
dipakai sebagai pengganti hasil balik dari fungsi. Di contoh ini, parameter nyata C akan
mengirimkan alamatnya ke fungsi Tambah( ). Setelah proses di Tambah( ) selesai, alamat ini
akan berisi dengan hasil proses fungsi, sehingga dapat digunakan dibagian program yang
memanggilnya sebagai hasil yang diperoleh dari fungsi yang dipanggil.
Contoh program :
#include “stdio.h”
#include “conio.h”
void tukar(int *px, int *py);
void main()
10
{ int a,b;
clrscr();
a = 15;
b = 10;
printf(“Nilai sebelum pemanggilan fungsi\n”);
printf(“a = %i b = %i\n\n”, a, b);
tukar(&a,&b); /* parameter alamat a dan alamat b */
printf(“Nilai setelah pemanggilan fungsi\n”);
printf(“a = %i b = %i\n\n”, a, b);
getch();
}
void tukar(int *px, int *py)
{ int z; /* variabel sementara */
z = *px;
*px = *py;
*py = z;
printf(“Nilai di akhir fungsi tukar()\n”);
printf(“*px = %i *py = %i\n\n”, *px, *py);
}
Output :
c. Pengiriman Parameter Berupa Larik
Pengiriman parameter berupa larik (yang dibahas larik dimensi satu) sebenarnya
merupakan pengiriman secara acuan, karena sebenarnya yang dikirimkan adalah alamat dari
elemen pertama lariknya, bukan seluruh nilai- nilai elemennya. Alamat elemen pertama dari larik
dapat ditunjukkan oleh nama lariknya yang tidak ditulis dalam indeksnya. Bentuk ini akan
tampak sebagai argumen di parameter nyata untuk bagian yang memanggil fungsi.
11
Contoh program :
#include<stdio.h>
void Cetak_Mundur(char S[]);
main()
{
char S[]=”Ini string”;
Cetak_Mundur(S);
}
void Cetak_Mundur(char S[])
{
int I,N;
for(N=0; S[N];N++);
for (I=N-1;I>=0;I--) printf(“%c”,S[I]);
printf(“\n”);
}
Output :
gnirtS inI
G. REKURSI
Rekursi adalah suatu proses dari fungsi yang memanggil dirinya sendiri secaraberulang-
ulang.
Contoh program :
#include < stdio.h >
long int Fak_Rekursif ( int N );/* prototype fungsi */
main()
{
int N ;
N = 5;
printf(“%d faktorial = %ld\n”, N, Fak_Rekursif(N));
}
12
long int Fak_Rekursif ( int N )/* definisi fungsi */
{
long int F;
if ( N <= 1 ) return( 1 ) ;
else
{
F = N * Fak_Rekursif( N – 1);
return(F);
}
}
Output :
5 faktorial = 120
Penjelasan :
Fungsi utama memanggil fungsi Fak_Rekursif dengan mengirimkan nilai 5 untuk
parameter nyata N, yang maksudnya akan dilakukan perhitungan sebanyak 5 faktorial.
Jika nilai dari N pertama kali yang diberikan oleh fungsi utama bernilai kurang atau sama
dengan satu, maka hasil faktorial yang akan diberikan adalah bernilai 1.
Jika N pertama kali yang diberikan oleh fungsi utama lebih besar dari 1,maka proses
rekursi akan dilakukan. Misalnya nilai N adalah 5, maka proses rekursi yang pertama
adalah : F=5*Fak_Rekursif(4); Proses ini akan memanggil kembali fungsi dirinya sendiri
dengan mengirimkan nilai 4 sebagai nilai N yang baru. Karena nilai N masih lebih besar
dari 1, maka proses rekursi yang kedua akan dilakukan dengan hasil adalah
4*Fak_Rekursif(3). Begitu selanjutnya sampai nilai N adalah 1. Untuk nilai N =1 ini,
statemen return(1) akan mengembalikan proses ke bagian yang memanggilnya, yaitu
statemen setelah statemen F=5*Fak_Rekursif(N-1). Statemen return(F) kemudian baru
akan mengembalikan proses ke fungsi utama.
13
H. CONTOH PROGRAM FUNCTION
Contoh Program ke-1 :
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int jumlah;
void bakso()
{
int b;
printf("masukkan jumlah pesanan anda : ");scanf("%d",&b);
jumlah = b*7000;
printf("total harga bakso pesanan anda = %d ", jumlah);
}
void mie_ayam()
{
int my;
printf("masukkan jumlah pesanan anda : ");scanf("%d",&my);
jumlah = my*6000;
printf("total harga mie ayam pesanan anda = %d ", jumlah);
}
void soto_ayam()
{
int soto;
printf("masukkan jumlah pesanan anda : ");scanf("%d",&soto);
jumlah = soto*8000;
printf("total harga soto ayam pesanan anda = %d ", jumlah);
}
void menu_makan()
{
int x;
printf("Pilih Makanan\n");
14
printf(" 1. BAKSO\n 2. MIE AYAM\n 3. SOTO AYAM\n");
printf("Masukkan Pilihan Anda : "); scanf("%d", &x);
if (x==1){bakso();}
else if (x==2) {mie_ayam();}
else if (x==3) {soto_ayam();}
else {printf("Anda memasukkan yg tidak ada di pilihan");}
}
void estehmanis();
void jusjeruk();
void jusalpukat();
void menu_minum()
{
int y;
printf("\n\nPilih Minuman\n");
printf(" 1. ES TEH MANIS\n 2. JUS JERUK\n 3. JUS ALPUKAT\n");
printf("Masukkan Pilihan Anda : "); scanf("%d", &y);
if (y==1){estehmanis();}
else if (y==2) {jusjeruk();}
else if (y==3) {jusalpukat();}
else {printf("Anda memasukkan yang tidak ada di pilihan");}
}
void estehmanis()
{
int stm;
printf("masukkan jumlah pesanan anda : ");scanf("%d",&stm);
jumlah = stm*2000;
printf("total harga es teh manis pesanan anda = %d ", jumlah);
}
void jusjeruk()
{
int jusjer;
15
printf("masukkan jumlah pesanan anda : ");scanf("%d",&jusjer);
jumlah = jusjer*3000;
printf("total harga jus jeruk pesanan anda = %d ", jumlah);
}
void jusalpukat()
{
int alpukat;
printf("masukkan jumlah pesanan anda : ");scanf("%d",&alpukat);
jumlah = alpukat*5000;
printf("total harga jus alpukat pesanan anda = %d ", jumlah);
}
main()
{
menu_makan();
menu_minum();
getch();
}
Output
16
Contoh Program ke-2 :
#include "stdio.h"
#include "conio.h"
long int Fak_Rekursif ( int N )/* definisi fungsi */
{ long int F;
if ( N <= 1 ) return( 1 ) ;
else
{ F = N * Fak_Rekursif( N - 1);
return(F); }
}
int dectobin(int n){
if (n>0){
dectobin(n/2);
printf("%d", n & 1);
} return n; }
void Cetak_Mundur(char S[])
{ int I,N;
for(N=0; S[N];N++);
for (I=N-1;I>=0;I--) printf("%c",S[I]);
printf("\n"); }
int pil; int N; int fak; int n;
char S[40]; char x;
void main()
{ x='y';
do {
clrscr();
printf ("======== Menu =========\n");
printf ("1. Faktorial\n");
printf ("2. Konversi Desimal Ke Biner\n");
printf ("3. String Terbalik\n");
17
printf ("Masukkan pilihan Anda : "); scanf ("%d",&pil);
switch (pil)
{ case 1:
{
printf ("\nMasukkan nilai N : "); scanf ("%d", &N);
fak = Fak_Rekursif(N);
printf("\n%d faktorial = %ld\n", N, fak);}
printf ("\nIngin kembali ke menu awal (y/t)?");
x = getch();
break;
case 2:
{
printf ("\nMasukkan bilangan desimal : "); scanf ("%d", &n);
printf ("\nBiner dari %d adalah ",n);
dectobin(n); }
printf ("\n\nIngin kembali ke menu awal (y/t)?");
x = getch();
break;
case 3:
{
printf ("\nMasukkan Nilai String : "); scanf ("%s",&S);
printf ("\nString terbalik dari %s adalah ",S);
Cetak_Mundur(S); }
printf ("\nIngin kembali ke menu awal (y/t)?");
x = getch();
break;
}
}
while(x=='y');
}
18
Output
19
DAFTAR PUSTAKA
Rachmat, Antonius.2010."Algoritma dan Pemrograman dengan Bahasa C".Yogyakarta : ANDI.
http://www.ilab.gunadarma.ac.id/modul/NewPTA2011-2012/AP3%20Cobol&C/m6.pdf
http://blog.sunan-ampel.ac.id/ahmadlubab/files/2012/06/solichin-bahasac-07.pdf