DISU USUN OLEH H : ADAM MU UKHARIL BA ACHTIAR, S..Kom. DIK KTAT MATA A KULIAH PEMROGRA P AMAN I
IF F
BAB VII V FUNC CTION (F FUNGSII)
Pe endahu uluan Fungs si man C/C++ + program m merupakan n kumpulan dari fungs si-fungsi Dalam pemrogram k yang dide efinisikan la angsung da alam progra am maupun n yang disim mpan di da alam file baik header. Sebelumnya juga ada sebu uah fungsi yang pasti digunakan n di dalam bahasa C++ yaitu fungsi main n. Fungsi main m ini haru us ada di setiap progrram dalam bahasa C/C C/C C++ karena a fungsi inilah yang ak kan dijalank kan oleh co ompiler. Fungsi
kan merupak
blok
dari
kode
program m
yang
dirancang
untuk
husus. Sebuah fung gsi berisi sejumlah pernyataan n yang melaksanakan tugas kh emas dalam m sebuah nama. n Nanttinya, nama ini yang akan dipan nggil dalam m fungsi dike main. Tujuan pembuatan p n fungsi ada alah sebaga ai berikut: 1. Memud dahkan dala am mengem mbangkan program. p 2. Menghe emat ukura an program m. 3. Program m menjadi lebih terstrruktur. 4. Dapat m mengurang gi pengulangan kode. ng harus dipahami, sebuah fung gsi harus mempunya ai satu nila ai balikan (return ( Yan valu ue) oleh karena k itu fungsi harrus mempu unyai tipe data. Ben ntuk umum m fungsi adalah sebaga ai berikut: tip pe_data na ama_fungsi(parame eter) { //badan_ _fungsi return nilai_return n } Di dalam d pemrrograman C/C++ C ada dua macam m fungsi ya aitu: 1. User-de efined function Fungsi--fungsi yang didefinisikan sendiri oleh seora ang programmer. 2. Built-in function ap pakai” yang telah disediakan n oleh comp piler. Fungsi--fungsi “sia
DIK KTAT PEMR ROGRAMAN I
HAL 1
DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom. Fungsi juga bisa dibedakan berdasarkan nilai balik yaitu: 1. Fungsi tanpa nilai balik (Procedure) 2. Fungsi dengan nilai balik.
Prototipe Fungsi Ada dua cara menggunakan sebuah fungsi di dalam suatu program yaitu: 1. Menggunakan fungsi tanpa menyertakan prototipe fungsinya Cara yang pertama ini bisa digunakan dengan syarat fungsi yang dibuat harus diletakkan di atas fungsi main. Apabila fungsi yang dibuat diletakkan setelah fungsi
main
maka
fungsi
tersebut
dianggap
tidak
terdefinisi.
Bentuk
umumnya adalah sebagai berikut: tipe_data nama_fungsi(parameter) { //badan_fungsi return nilai_return } main() { nama_fungsi(parameter); return 0; }
2. Menggunakan fungsi dengan menyertakan prototipe fungsinya Prototipe fungsi adalah kode program yang digunakan untuk mendeklarasikan sebuah fungsi yang dibuat oleh programmer. Dengan menggunakan cara yang kedua ini maka seorang programmer dapat meletakkan fungsi yang dibuat di manapun. Bentuk umumnya adalah sebagai berikut:
DIKTAT PEMROGRAMAN I
HAL 2
DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom. //prototipe fungsi tipe_data nama_fungsi1(parameter); tipe_data nama_fungsi2(parameter); tipe_data nama_fungsi1(parameter) { //badan_fungsi return nilai_return } main() { nama_fungsi1(parameter); nama_fungsi2(parameter); return 0; } tipe_data nama_fungsi2(parameter) { //badan_fungsi return nilai_return }
Fungsi Tanpa Nilai Balik (Procedure) Pemrograman
C/C++
tidak
mengenal
istilah
prosedur
seperti
yang
dipelajari di algoritma. Lalu bagaimana kalau seorang programmer ingin membuat sebuah fungsi yang tidak mengembalikan suatu nilai? Fungsi seperti ini dalam pemrograman C/C++ dikenal dengan fungsi yang bertipe void. Berarti dalam hal ini fungsi tersebut tidak memiliki nilai balik. Bentuk umum dari fungsi ini adalah sebagai berikut:
DIKTAT PEMROGRAMAN I
HAL 3
DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom. //prototipe fungsi void nama_fungsi(parameter1,parameter2); void nama_fungsi(parameter1,parameter2) { //badan_fungsi } main() { // Pemanggilan fungsi nama_fungsi(nilai_parameter1,nilai_parameter2); return 0; } Parameter pada fungsi ini bukanlah suatu harga mati maksudnya fungsi void ini tidak harus selalu menggunakan parameter. Tetapi alangkah lebih baiknya apabila dalam pembuatan dan pemanggilan sebuah fungsi disertai dengan parameternya agar memperjelas variabel yang akan diolah di dalam fungsi tersebut. Sebagai contoh buatlah program dengan sintaks seperti di bawah ini: 1. Fungsi void tanpa parameter
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/* Program 7.1 Nama File : Lat-7.1.c Programmer : Adam Mukharil Bachtiar, S.Kom. */ #include <stdio.h> #include <stdlib.h> //prototipe fungsi void tampil_nama(); void tampil_nama() { int nim; char nama[31],alamat[51]; printf("Masukkan NIM : ");scanf("%i",&nim); printf("Masukkan Nama : ");fflush(stdin); gets(nama);
DIKTAT PEMROGRAMAN I
HAL 4
DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom.
printf("Masukkan Alamat gets(alamat); printf("\n"); printf("NIM anda printf("Nama anda printf("Alamat anda
20 21 22 23 24 25 26 27 28 29 30 31 32
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
: ");fflush(stdin);
= %i\n\a",nim); = %s\n\a",nama); = %s\n\n\a",alamat);
} int main(int argc, char *argv[]) { tampil_nama(); system("PAUSE"); return 0; }
/* Program 7.1 Nama File : Lat-7.1.cpp Programmer : Adam Mukharil Bachtiar, S.Kom. */ #include
#include using namespace std; //prototipe fungsi void tampil_nama(); void tampil_nama() { int nim; char nama[31],alamat[51]; cout<<"Masukkan NIM : cout<<"Masukkan Nama : cin.get(nama,30); cout<<"Masukkan Alamat : cin.get(alamat,50); cout<<endl; cout<<"NIM anda = cout<<"Nama anda = cout<<"Alamat anda = <<endl<<endl<<"\a"; }
DIKTAT PEMROGRAMAN I
";cin>>nim; ";fflush(stdin); ";fflush(stdin);
"<
HAL 5
DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom.
28 29 30 31 32 33
int main(int argc, char *argv[]) { tampil_nama(); system("PAUSE"); return EXIT_SUCCESS; }
Hasil eksekusi:
Gambar 7.1 Hasil eksekusi program Lat 7.1 2. Fungsi void menggunakan parameter
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
#include <stdio.h> #include <stdlib.h> //prototipe fungsi void tampil_nama(int nim,char nama[31],char alamat[51]); void tampil_nama(int nim,char nama[31],char alamat[51]) { printf("NIM anda = %i\n\a",nim); printf("Nama anda = %s\n\a",nama); printf("Alamat anda = %s\n\n\a",alamat); } int main(int argc, char *argv[]) { int nim_isi; char nama_isi[31],alamat_isi[51]; printf("Masukkan NIM : ");scanf("%i",&nim_isi);
DIKTAT PEMROGRAMAN I
HAL 6
DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom.
printf("Masukkan Nama : ");fflush(stdin); gets(nama_isi); printf("Masukkan Alamat : ");fflush(stdin); gets(alamat_isi); printf("\n"); tampil_nama(nim_isi,nama_isi,alamat_isi); system("PAUSE"); return 0;
19 20 21 22 23 24 25 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
} /* Program 7.2 Nama File : Lat-7.2.cpp Programmer : Adam Mukharil Bachtiar, S.Kom. */ #include #include using namespace std; //prototipe fungsi void tampil_nama(int nim,char nama[31],char alamat[51]); void tampil_nama(int nim,char { cout<<"NIM anda = cout<<"Nama anda = cout<<"Alamat anda = <<endl<<endl<<"\a"; }
nama[31],char alamat[51]) "<
int main(int argc, char *argv[]) { int nim_isi; char nama_isi[31],alamat_isi[51]; cout<<"Masukkan NIM : ";cin>>nim_isi; cout<<"Masukkan Nama : ";fflush(stdin); cin.get(nama_isi,30); cout<<"Masukkan Alamat : ";fflush(stdin); cin.get(alamat_isi,50); cout<<endl; tampil_nama(nim_isi,nama_isi,alamat_isi); system("PAUSE"); return EXIT_SUCCESS; }
DIKTAT PEMROGRAMAN I
HAL 7
DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom. Hasil eksekusi:
Gambar 7.2 Hasil eksekusi program Lat 7.2 Contoh lain untuk fungsi bertipe void adalah fungsi untuk membuat kotak yang sintaksnya sebagai berikut:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
20
/* Program 7.3 Nama File : Lat-7.3.c Programmer : Adam Mukharil Bachtiar, S.Kom. */ #include <stdio.h> #include <stdlib.h> #include //prototipe fungsi void Kotak(int X1,int Y1, int X2,int Y2,int Bingkai, int Latar); void Kotak(int X1,int Y1, int X2,int Y2,int Bingkai, int Latar) { int i; textcolor(Bingkai); textbackground(Latar); gotoxy(X1,Y1);printf("Ú");//untuk simbol Ú cari di simbol M.Word dengan Character Code 218 from ASCII(Decimal) lalu copy-kan gotoxy(X1,Y2);printf("%c",192);//ASCII Decimal 192
DIKTAT PEMROGRAMAN I
HAL 8
DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom.
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
gotoxy(X2,Y1);printf("%c",191); gotoxy(X2,Y2);printf("%c",217); for (i=X1+1;i<=X2-1;i++) { gotoxy(i,Y1);printf("%c",196); gotoxy(i,Y2);printf("%c",196); } for(i=Y1+1;i<=Y2-1;i++) { gotoxy(X1,i);printf("%c",179); gotoxy(X2,i);printf("%c",179); } } int main(int argc, char *argv[]) { //warna background textbackground(WHITE); clrscr(); Kotak(1,1,80,24,WHITE,BLUE); Kotak(2,2,15,23,WHITE,RED); textbackground(WHITE); textcolor(BLACK); gotoxy(1,25);system("PAUSE"); return 0; }
/* Program 7.3 Nama File : Lat-7.3.cpp Programmer : Adam Mukharil Bachtiar, S.Kom. */ #include #include #include using namespace std; //prototipe fungsi void Kotak(int X1,int Y1, int X2,int Y2,int Bingkai, int Latar); void Kotak(int X1,int Y1, int X2,int Y2,int Bingkai,
DIKTAT PEMROGRAMAN I
HAL 9
DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom.
int Latar) 17 18 19 20 21
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
{ int i; textcolor(Bingkai); textbackground(Latar); gotoxy(X1,Y1);cout<<"Ú";//untuk simbol Ú cari di simbol M.Word dengan Character Code 218 from ASCII(Decimal) lalu copy-kan gotoxy(X1,Y2);cout<<"\xC0"; gotoxy(X2,Y1);cout<<"\xBF"; gotoxy(X2,Y2);cout<<"\xD9"; for (i=X1+1;i<=X2-1;i++) { gotoxy(i,Y1);cout<<"\xC4"; gotoxy(i,Y2);cout<<"\xC4"; } for(i=Y1+1;i<=Y2-1;i++) { gotoxy(X1,i);cout<<"\xB3"; gotoxy(X2,i);cout<<"\xB3"; } } int main(int argc, char *argv[]) { //warna background textbackground(WHITE); clrscr(); Kotak(1,1,80,24,WHITE,BLUE); Kotak(2,2,15,23,WHITE,RED); textbackground(WHITE); textcolor(BLACK); gotoxy(1,25);system("PAUSE"); return EXIT_SUCCESS; }
DIKTAT PEMROGRAMAN I
HAL 10
DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom. Hasil eksekusi:
Gambar 7.3 Hasil eksekusi program Lat 7.3 Void kotak merupakan sebuah fungsi yang akan membuat kotak di layar sesuai dengan koordinat yang diberikan di bagian parameter. Koordinat tersebut adalah koordinat kiri atas (X1,Y1) dan koordinat titik kanan bawah (X2,Y2). Selain itu ada parameter Bingkai yang berfungsi untuk menentukan warna bingkai serta parameter Layar untuk menentukan warna latar belakang kotak yang dibuat. Catatan
Parameter dalam sebuah fungsi memang buka sebuah harga mati akan
tetapi
sangat
disarankan
penggunaan
parameter
dalam
pembuatan dan pemanggilan fungsi untuk memperjelas penggunaan variabel dari sebuah fungsi. Untuk parameter tetap ada yang bersifat global maupun lokal seperti yang dijelaskan di Bab III.
Fungsi dengan Nilai Balik Berbeda dengan fungsi yang bertipe void, fungsi ini berguna untuk melakukan suatu proses yang dapat mengembalikan suatu nilai. Dalam membuat fungsi ini kita perlu untuk memilih tipe data yang akan menjadi tipe data untuk nilai balik dari fungsi yang dibuat. Bentuk umum fungsi tersebut adalah sebagai berikut:
DIKTAT PEMROGRAMAN I
HAL 11
DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom. //prototipe fungsi tipe_data nama_fungsi(parameter1,parameter2); tipe_data nama_fungsi(parameter1,parameter2) { //badan_fungsi return nilai_yang_dikembalikan; } main() { // pemanggilan fungsi nama_fungsi(nilai_parameter1,nilai_parameter2); return 0; }
Fungsi yang Mengembalikan Tipe String Berikut ini adalah contoh sebuah fungsi yang mengembalikan data bertipe string.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/* Program 7.4 Nama File : Lat-7.4.c Programmer : Adam Mukharil Bachtiar, S.Kom. */ #include <stdio.h> #include <stdlib.h> char *nama(); char *nama() { return "Fungsi string dipanggil!"; } int main(int argc, char *argv[]) { printf("%s\n\n",nama());
DIKTAT PEMROGRAMAN I
HAL 12
DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom.
20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
system("PAUSE"); return 0; } /* Program 7.4 Nama File : Lat-7.4.cpp Programmer : Adam Mukharil Bachtiar, S.Kom. */ #include #include using namespace std; char *nama(); char *nama() { return "Fungsi string dipanggil!"; } int main(int argc, char *argv[]) { cout<
Hasil eksekusi:
Gambar 7.4 Hasil eksekusi program Lat 7.4 DIKTAT PEMROGRAMAN I
HAL 13
DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom.
Fungsi yang Mengembalikan Tipe Bilangan Berikut ini adalah contoh sebuah fungsi yang mengembalikan data bertipe bilangan.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
/*
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/*
Program 7.5 Nama File : Lat-7.5.c Programmer : Adam Mukharil Bachtiar, S.Kom. */ #include <stdio.h> #include <stdlib.h> float luas_lingkaran(); float luas_lingkaran() { return(3.14*10*10);//jari2 = 10 } int main(int argc, char *argv[]) { printf("%f\n\n",luas_lingkaran()); system("PAUSE"); return 0; }
Program 7.5 Nama File : Lat-7.5.cpp Programmer : Adam Mukharil Bachtiar, S.Kom. */ #include #include using namespace std; float luas_lingkaran(); float luas_lingkaran() { return(3.14*10*10);//jari2 = 10 }
DIKTAT PEMROGRAMAN I
HAL 14
DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom.
19 20 21 22 23 24
int main(int argc, char *argv[]) { cout<
Hasil eksekusi:
Gambar 7.5 Hasil eksekusi program Lat 7.5 dalam bahasa C dan C++
DIKTAT PEMROGRAMAN I
HAL 15
DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom.
Fungsi Bertipe dengan Parameter Kedua buah fungsi sebelum sub bab ini adalah contoh dari fungsi bertipe tanpa
parameter.
Dalam
sub
bab
ini
akan
dibuat
fungsi
bertipe
dengam
menggunakan parameter tetapi sebelum itu ada tiga jenis parameter yang bisa digunakan di dalam pembuatan fungsi, yaitu: 1. Parameter masukan 2. Parameter keluaran 3. Parameter masukan/keluaran.
Parameter Masukan Sesuai dengan namanya, parameter ini digunakan sebagai nilai masukan dalam sebuah fungsi.
Nilai tersebut kemudian akan diproses oleh fungsi untuk
menghasilkan sebuah nilai balik. Untuk lebih jelasnya buatlah program dengan sintaks di bawah ini:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
/* Program 7.6 Nama File : Lat-7.6.c Programmer : Adam Mukharil Bachtiar, S.Kom. */ #include <stdio.h> #include <stdlib.h> float kecepatan(float s, float t); float kecepatan(float s, float t) { float v; v=s/t; return v; } int main(int argc, char *argv[]) { float s_isi,t_isi,v; printf("Masukkan jarak (KM) : ");scanf("%f",&s_isi); printf("Masukkan waktu (S) : ");scanf("%f",&t_isi); v=kecepatan(s_isi,t_isi); printf("\nKecepatan = %.2f KM/Jam\n\n",v);
DIKTAT PEMROGRAMAN I
HAL 16
DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom.
26 27 28 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
system("PAUSE"); return 0; } /* Program 7.6 Nama File : Lat-7.6.cpp Programmer : Adam Mukharil Bachtiar, S.Kom. */ #include #include #include using namespace std; float kecepatan(float s, float t); float kecepatan(float s, float t) { float v; v=s/t; return v; } int main(int argc, char *argv[]) { float s_isi,t_isi,v; cout<<"Masukkan jarak (KM) : ";cin>>s_isi; cout<<"Masukkan waktu (S) : ";cin>>t_isi; v=kecepatan(s_isi,t_isi); cout<<endl; cout<<setiosflags(ios::fixed); cout<<"Kecepatan = "<<setprecision(2) <
DIKTAT PEMROGRAMAN I
HAL 17
DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom. Hasil eksekusi:
Gambar 7.6 Hasil eksekusi program Lat 7.6 Variabel s dan variabel t pada fungsi kecepatan berfungsi sebagai parameter masukan.
Parameter Keluaran Parameter keluaran adalah parameter yang berfungsi untuk menampung nilai yang dihasilkan dari proses di dalam fungsi. Parameter ini harus dilewatkan berdasarkan alamat atau referensinya bukan nilainya. Parameter keluaran biasanya digunakan untuk fungsi bertipe void. Untuk lebih jelasnya buatlah program dengan sintaks di bawah ini:
1 2 3 4 5 6 7 8 9 10 11
/* Program 7.7 Nama File : Lat-7.7.c Programmer : Adam Mukharil Bachtiar, S.Kom. */ #include <stdio.h> #include <stdlib.h> void jumlah_deret(int batas, int *jumlah);
DIKTAT PEMROGRAMAN I
HAL 18
DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom.
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
void jumlah_deret(int batas,int *jumlah) { int x; *jumlah=0; for(x=1;x<=batas;x++) { *jumlah=*jumlah+x; } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
/*
int main(int argc, char *argv[]) { int batas,jumlah; printf("Masukkan batas deret : ");scanf("%i",&batas); jumlah_deret(batas,&jumlah); printf("%i\n\n",jumlah); system("PAUSE"); return 0; }
Program 7.7 Nama File : Lat-7.7.cpp Programmer : Adam Mukharil Bachtiar, S.Kom. */ #include #include using namespace std; void jumlah_deret(int batas, int *jumlah); void jumlah_deret(int batas,int *jumlah) { int x; *jumlah=0; for(x=1;x<=batas;x++) { *jumlah=*jumlah+x; } } int main(int argc, char *argv[]) { int batas,jumlah; cout<<"Masukkan batas deret : ";cin>>batas;
DIKTAT PEMROGRAMAN I
HAL 19
DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom.
jumlah_deret(batas,&jumlah); cout<<endl; cout<<"Jumlah Deret = "<<jumlah <<endl<<endl; system("PAUSE"); return EXIT_SUCCESS;
28 29 30 31 32 33
}
Hasil eksekusi:
Gambar 7.7 Hasil eksekusi program Lat 7.7 Parameter jumlah yang ada di dalam fungsi jumlah_deret adalah parameter keluaran. Apabila lebih diperhatikan lagi ketika pemanggilan fungsi jumlah_deret, parameter yang diisikan untuk posisi int *jumlah berisikan variabel yang diawali dengan tanda &. Hal itu digunakan untuk mengakses alamat dari suatu variabel yang menyimpan nilai(akan dipelajari lebih lanjut di Bab Pointer).
Parameter Masukan/Keluaran Parameter ini bisa digunakan sebagai parameter masukan ataupun parameter keluaran. Artinya parameter ini akan digunakan sebagai masukan untuk proses di dalam fungsi dan setelah proses tersebut selesai hasilnya akan disimpan kembali ke dalam parameter tersebut sebagai nilai keluaran. Untuk lebih jelasnya buat program dengan sintaks di bawah ini:
DIKTAT PEMROGRAMAN I
HAL 20
DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
/*
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
/*
Program 7.8 Nama File : Lat-7.8.c Programmer : Adam Mukharil Bachtiar, S.Kom. */ #include <stdio.h> #include <stdlib.h> #include <math.h> void pangkat_dua(float *bil); void pangkat_dua(float *bil) { *bil=pow(*bil,2); } int main(int argc, char *argv[]) { float bilangan; printf("Masukkan bilangan : ");scanf("%f",&bilangan); pangkat_dua(&bilangan); printf("pangkat dua = %.0f\n\n",bilangan); system("PAUSE"); return 0; }
Program 7.8 Nama File : Lat-7.8.cpp Programmer : Adam Mukharil Bachtiar, S.Kom. */ #include #include #include #include
<math.h>
using namespace std; void pangkat_dua(float *bil); void pangkat_dua(float *bil) { *bil=pow(*bil,2); } int main(int argc, char *argv[])
DIKTAT PEMROGRAMAN I
HAL 21
DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom.
22 23 24 25 26 27 28 29 30
{ float bilangan; cout<<"Masukkan bilangan : ";cin>>bilangan; pangkat_dua(&bilangan); cout<<setiosflags(ios::fixed); cout<<"pangkat dua = "<<setprecision(0) <
Hasil eksekusi:
Gambar 7.8 Hasil eksekusi program Lat 7.8
Parameter Formal dan Aktual Jenis-jenis Parameter terbagi menjadi dua yaitu: 1. Parameter Formal Parameter yang dideklarasikan pada saat pembuatan sebuah prototipe fungsi atau fungsi. Parameter inilah yang akan diisi dengan nilai, variabel, atau alamat ketika pemanggilan fungsinya. 2. Parameter Aktual Parameter yang dideklarasikan dan digunakan ketika pemanggilan fungsi. Penamaan variabel untuk parameter ini bisa sama dengan nama variabel
DIKTAT PEMROGRAMAN I
HAL 22
DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom. parameter formalnya atau boleh juga berbeda dengan nama variabel parameter formalnya. Untuk lebih jelasnya buat program dengan sintaks di bawah ini:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
23 24 25 1 2 3 4 5 6 7 8 9 10 11 12 13 14
/* Program 7.9 Nama File : Lat-7.9.c Programmer : Adam Mukharil Bachtiar, S.Kom. */ #include <stdio.h> #include <stdlib.h> #include <math.h> float akar_pangkat(int bil); float akar_pangkat(int bil)//bil di sini parameter formal { return (sqrt(bil)); } int main(int argc, char *argv[]) { int bil; printf("Masukkan bilangan : ");scanf("%i",&bil); printf("Akar pangkat dua = %.2f\n\n" ,akar_pangkat(bil));//bil di sini parameter aktual system("PAUSE"); return 0; } /* Program 7.9 Nama File : Lat-7.9.cpp Programmer : Adam Mukharil Bachtiar, S.Kom. */ #include #include #include #include
<math.h>
using namespace std; float akar_pangkat(int bil);
DIKTAT PEMROGRAMAN I
HAL 23
DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom.
15 16 17 18 19 20 21 22 23 24 25 26
27 28 29
float akar_pangkat(int bil)//bil di sini parameter formal { return (sqrt(bil)); } int main(int argc, char *argv[]) { int bil; cout<<"Masukkan bilangan : ";cin>>bil; cout<<setiosflags(ios::fixed); cout<<"Akar pangkat dua = "<<setprecision(2) <
Hasil eksekusi:
Gambar 7.9 Hasil eksekusi program Lat 7.9 Keterangan: 1. Variabel bil yang ada di prototipe fungsi dan pembuatan fungsi akar akar_pangkat merupakan parameter formal. 2. Variabel bil yang ada di fungsi main ketika pemanggilan fungsi akar_pangkat merupakan parameter aktual.
DIKTAT PEMROGRAMAN I
HAL 24
DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom.
Melewatkan Parameter Di Fungsi Parameter bisa dilewatkan di dalam sebuah fungsi dengan dua cara yaitu: 1. Berdasarkan nilai (pass by value) Nilai yang dihasilkan oleh suatu fungsi tidak akan mempengaruhi nilai di dalam program (di luar fungsi tersebut). Hal ini disebabkan karena dalam pemanggilan fungsi, compiler hanya membuat salinan dari nilai yang ada di parameter aktual ke parameter formal. Untuk lebih jelasnya buat program dengan sintaks di bawah ini.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
/* Program 7.10 Nama File : Lat-7.10.c Programmer : Adam Mukharil Bachtiar, S.Kom. */ #include <stdio.h> #include <stdlib.h> void perkalian_lima(int bil); int main(int argc, char *argv[]) { int bil_isi; printf("Masukkan bilangan : "); scanf("%i",&bil_isi); perkalian_lima(bil_isi); printf("Bilangan input : %i\n\n",bil_isi); system("PAUSE"); return 0; } void perkalian_lima(int bil) { bil=bil*5; printf("Hasil perkalian lima : %i\n",bil); }
DIKTAT PEMROGRAMAN I
HAL 25
DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
/* Program 7.10 Nama File : Lat-7.10.cpp Programmer : Adam Mukharil Bachtiar, S.Kom. */ #include #include using namespace std; void perkalian_lima(int bil); int main(int argc, char *argv[]) { int bil_isi; cout<<"Masukkan bilangan : ";cin>>bil_isi; perkalian_lima(bil_isi); cout<<"Bilangan input : "<
Hasil eksekusi:
Gambar 7.10 Hasil eksekusi program Lat 7.10
DIKTAT PEMROGRAMAN I
HAL 26
DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom. Pada kasus tersebut variabel bil_isi dan variabel bil menempati alamat yang berbeda sehingga pada saat pemanggilan fungsi nilai keduanya akan berbeda. Variabel bil_isi akan bernilai tetap (sesuai yang diinput) karena memang program ini tidak melakukan apa-apa terhadap variabel tersebut. 2. Berdasarkan alamat (pass by reference) Berbeda
dengan
parameter
pass
by
value,
pass
by
reference
akan
melewatkan parameter ke sebuah fungsi berdasarkan alamatnya. Hal ini akan menyebabkan nilai di dalam fungsi akan sama dengan nilai yang ada di luar fungsi. Untuk lebih jelasnya buat program dengan sintaks di bawah ini.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 1 2 3 4 5
/* Program 7.11 Nama File : Lat-7.11.c Programmer : Adam Mukharil Bachtiar, S.Kom. */ #include <stdio.h> #include <stdlib.h> void perkalian_lima(int *bil); int main(int argc, char *argv[]) { int bil_isi; printf("Masukkan bilangan : "); scanf("%i",&bil_isi); perkalian_lima(&bil_isi); printf("Bilangan input : %i\n\n",bil_isi); system("PAUSE"); return 0; } void perkalian_lima(int *bil) { *bil=(*bil)*5; printf("Hasil perkalian lima : %i\n",*bil); } /* Program 7.11 Nama File : Lat-7.11.cpp Programmer : Adam Mukharil Bachtiar, S.Kom. */
DIKTAT PEMROGRAMAN I
HAL 27
DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom.
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
#include #include using namespace std; void perkalian_lima(int *bil); int main(int argc, char *argv[]) { int bil_isi; cout<<"Masukkan bilangan : ";cin>>bil_isi; perkalian_lima(&bil_isi); cout<<"Bilangan input : "<
Hasil eksekusi:
Gambar 7.11 Hasil eksekusi program Lat 7.11 Variabel
bil_isi dan variabel bil akan menempati memori yang sama sehingga
apabila satu terubah maka yang lain akan terubah juga.
DIKTAT PEMROGRAMAN I
HAL 28
DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom.
Overloading Function Overloading function adalah fungsi yang mempunyai nama yang sama akan tetapi mempunyai parameter yang berbeda. Berbeda di sini dapat dilihat dari tiga sisi yaitu secara jumlah, tipe data, maupun gabungan dari keduanya. Salah satu contoh dari overloading function bisa dilihat dari penggunaan fungsi printf dan cout. Kedua fungsi tersebut bisa digunakan untuk menampilkan teks saja ataupun gabungan teks dengan variabel walaupun cara pemanggilannya sama yaitu tinggal memanggil nama fungsi tersebut lalu tinggal dibedakan berdasarkan parameter aktualnya. Tetapi kelebihan ini hanya bisa digunakan untuk bahasa C++. Untuk lebih jelasnya buat program dengan sintaks di bawah ini.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
/* Program 7.12 Nama File : Lat-7.12.cpp Programmer : Adam Mukharil Bachtiar, S.Kom. */ #include #include using namespace std; int luas(int sisi); int luas(int panjang,int lebar); int main(int argc, char *argv[]) { int sisi_isi; int panjang_isi,lebar_isi; cout<<"Masukkan sisi persegi : "; cin>>sisi_isi; cout<<"Masukkan panjang persegi panjang : "; cin>>panjang_isi; cout<<"Masukkan lebar persegi panjang : "; cin>>lebar_isi; cout<<"Luas persegi = "<
DIKTAT PEMROGRAMAN I
HAL 29
DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom.
28 29 30 31 32 33 34 35 36 37 38 39 40
int luas(int sisi) { int hasil; hasil=sisi*sisi; return hasil; } int luas(int panjang,int lebar) { int hasil; hasil=panjang*lebar; return hasil; }
Hasil eksekusi:
Gambar 7.12 Hasil eksekusi program Lat 7.12 Program di atas memiliki dua buah fungsi yang memiliki nama yang sama yaitu fungsi luas. Untu fungsi luas yang pertama memiliki parameter sisi digunakan untuk menghitung luas persegi sedangkan fungsi luas yang kedua memiliki parameter panjang dan lebar digunakan untuk menghitung luas persegi panjang.
DIKTAT PEMROGRAMAN I
HAL 30
DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom.
Rekursi Fungsi Di dalam pemrogram C/C++ dimungkinkan untuk suatu fungsi memanggil fungsi itu sendiri. Hal tersebut disebuat sebagai rekursi fungsi. Sebagai contoh adalah program untuk menghitung xy. Programnya sebagai berikut:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
/*
1 2 3 4 5 6
/*
Program 7.13 Nama File : Lat-7.13.c Programmer : Adam Mukharil Bachtiar, S.Kom. */ #include <stdio.h> #include <stdlib.h> int pangkat(int x,int y); int main(int argc, char *argv[]) { int a,b; printf("x : ");scanf("%i",&a); printf("y : ");scanf("%i",&b); printf("x pangkat y = %i\n\n",pangkat(a,b)); system("PAUSE"); return 0; } int pangkat(int x,int y) { if(y==1) { return x; } else { return (x*pangkat(x,y-1)); } }
Program 7.13 Nama File : Lat-7.13.cpp Programmer : Adam Mukharil Bachtiar, S.Kom. */
DIKTAT PEMROGRAMAN I
HAL 31
DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom.
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
#include #include using namespace std; int pangkat(int x,int y); int pangkat(int x,int y) { if(y==1) { return x; } else { return (x*pangkat(x,y-1)); //rekursi fungsi } } int main(int argc, char *argv[]) { int a,b; cout<<"x : ";cin>>a; cout<<"y : ";cin>>b; cout<<"x pangkat y = "<<pangkat(a,b)<<endl<<endl; system("PAUSE"); return EXIT_SUCCESS; }
Hasil eksekusi:
Gambar 7.13 Hasil eksekusi program Lat 7.13 DIKTAT PEMROGRAMAN I
HAL 32