Anda di halaman 1dari 9

MODUL 4

PEMROGRAMAN TERSTRUKTUR - FUNGSI

 Membuat program yang mudah dimengerti dan mudah dirawat (maintainance) oleh
manusia.
 Mengutamakan kesederhanaan.
 Menggunakan 3 struktur / bentuk kontrol, yaitu :
1. SEQUENCE (Urutan statemen dalam program).
2. SELECTION (Pemilihan satu dari beberapa alternatif).
3. REPETITION (Pengulangan / looping).
 Dalam bahasa C,

1. SEQUENCE, diimplementasikan dengan menuliskan satu statemen


setelah statemen lainnya.
2. SELECTION, diimplementasikan dengan menggunakan struktur if, if /
else atau switch.
3. REPETITION, diimplementasikan dengan menggunakan struktur
while, for, atau do/while.

4.1. FUNGSI

 Solusi masalah dunia nyata biasanya memerlukan program yang jauh lebih besar dari
pada program yang telah kita bahasa sejauh ini.
 Program yang besar sebaiknya terdiri dari satuan-satuan yang lebih kecil atau modul-
modul, supaya lebih mudah dikelola.
 Modul- modul program C berbentuk FUNGSI.
 Program C biasanya merupakan kombinasi dari fungsi-fungsi baru yang ditulis oleh
programmer dan fungsi-fungsi yang telah tersedia dalam C-standard library.
 printf dan scanf adalah contoh fungsi-fungsi dari C-standard library yang sering kita
gunakan.

 Program yang telah kita bahas sejauh ini terdiri dari hanya satu fungsi, yaitu fungsi
main yang memanggil fungsi-fungsi dari C-standard library.
 Programmer dapat membuat fungsi sesuai dengan kebutuhannya.

Konsep Pemrograman 34
 Bentuk umum penulisan definisi suatu fungsi :
tipe-hasil nama-fungsi (deklarasi parameter)
{
deklarasi-deklarasi
statemen-statemen
}

/* Program ini mengandung fungsi bernama pangkat


* yang dibuat sendiri oleh programmer
* --------------------------------------*/
#include <stdio.h>
int pangkat(int, int); /*prototipe fungsi */

main()
{
int x;
for (x=1; x <= 10; x++)
printf("%d ", pangkat(2,x));

printf("\n");
return 0;
}

/* --------------------------------
* Definisi fungsi pangkat :
* pokok dipangkatkan n, n >= 0
* --------------------------------*/

int pangkat(int pokok, int n)


{
int hasil, b;

hasil = 1;
for (b=1; b <= n; ++b)
hasil *= pokok;

return hasil;
}

OUTPUT :

2 4 8 16 32 64 128 256 512 1024

Konsep Pemrograman 35
 Function-prototype (prototipe fungsi) memberitahu kompilator mengenai :
1. tipe dari hasil yang dikembalikan fungsi kepada pemanggilnya.
2. jumlah parameter, tipe parameter, dan urutan parameter yang harus
diberikan kepada fungsi oleh pemanggilnya.
 Prototipe fungsi dipakai oleh kompilator untuk melakukan validasi terhadap function-
call (pemanggilan fungsi). Dengan demikian, kompilator dapat membantu
programmer dalam menangkap kesalahan-kesalahan dalam program.
 Prototipe fungsi seharusnya diletakkan sebelum fungsi itu digunakan (dipanggil)

 Nama fungsi harus berupa suatu identifier yang sahih. Nama fungsi sebaiknya
mencerminkan tugas yang dilakukan oleh fungsi tersebut.
 Return-type (tipe hasil) dari suatu fungsi menyatakan tipe hasil yang dikembalikan
fungsi kepada pemanggilnya.
Tipe hasil void menyatakan bahwa fungsi tidak mengembalikan apa-apa.
Tipe hasil yang tidak ditulis dianggap (default-nya) oleh kompilator sebagai
int.
 Deklarasi parameter void menyatakan bahwa fungsi itu tidak membutuhkan
parameter.
 Semua variabel yang dideklarasikan dalam fungsi adalah variabel lokal, artinya hanya
diketahui (bisa diakses) dalam fungsi tersebut.
- Semua parameter fungsi juga bersifat lokal
- Jadi, dua fungsi boleh mempunyai parameter / variabel lokal dengan
nama yang sama, tanpa terjadi konflik.

 Function-body merupakan suatu block (yaitu deklarasi dan statemen dalam sepasang
tanda kurung kurawal).

 Ada 2 cara untuk mengembalikan kontrol dari fungsi kepada pemanggilnya :

- Jika fungsi tidak mengembalikan suatu hasil, fungsi berakhir apabila


tanda kurung kurawal akhir } sudah tercapai atau dengan pelaksanaan
statemen return.

Konsep Pemrograman 36
- Jika fungsi mengembalikan suatu hasil, pelaksanaan statemen return
ekspresi; mengakhiri fungsi dan mengembalikan nilai dari ekspresi
kepada pemanggil.

 Motivasi-motivasi utama dalam membuat program sebagai sistem dari beberapa


fungsi :
- pendekatan divide-and-conquer mempermudah pengembangan program
- fungsi merupakan alat untuk melakukan abstraksi
- software reusability (penggunaan fungsi-fungsi yang telah ada untuk
membuat program baru).
- sekelompok statemen yang melakukan tugas tertentu dapat dieksekusi
pada beberapa tempat dalam program tanpa mengulangi penulisan
sekelompok statemen tersebut.

 Parameter-parameter fungsi yang tertera pada definisi fungsi juga disebut sebagai
argumen-argumen formal.
 Pada waktu fungsi dipanggil, argumen-argumen yang diberikan kepada fungsi disebut
argumen-argumen aktual.
 Dalam C, semua argumen fungsi disalurkan secara pindah nilai (by value) . Artinya,
fungsi yang dipanggil itu diberikan salinan dari nilai argumen aktualnya. Jadi
variabel dari pemanggil yang menjadi argumen aktual dari suatu fungsi tidak dapat
diubah oleh fungsi itu.
 Dalam contoh program tadi, variabel x yang menjadi argumen aktual dari fungsi
pangkat tidak dapat diubah oleh fungsi pangkat tersebut. Salinan dari nilai x
diberikan kepada argumen formal n (dapat dipikirkan seperti assignment n = x).
Meskipun n diubah dalam fungsi pangkat, perubahan ini tidak mempengaruhi x.

 Pemanggilan fungsi (function call) dengan mekanisme di atas disebut dengan call by
value.
 Definisi untuk fungsi pangkat itu dapat juga ditulis menjadi :

/* --------------------------------

Konsep Pemrograman 37
* Versi ringkas dari fungsi pangkat
* pokok dipangkatkan n, n >= 0
* --------------------------------*/

int pangkat(int pokok, int n)


{
int hasil = 1;
for (; n > 0; --n)
hasil *= pokok;
return hasil;
}

dimana n dipakai sebagai variabel sementara untuk mengontrol loop. Nilai n


diturunkan sampai dengan 0. Perubahan terhadap nilai n tidak mempengaruhi x pada
fungsi main.

 Pemanggilan fungsi dengan mekanisme lain, yaitu call by reference akan dibahas
nanti pada saat pembahsan tentang pointer. Dalam call by reference, variabel dari
pemanggil (caller) dapat diubah oleh fungsi.

/* Program ini memperlihatkan "call by value"


* --------------------------------------*/
#include <stdio.h>
int hitung_jumlah(int n);

main()
{
int n = 3, jumlah;
printf("%d\n", n); /* cetak 3 */
jumlah = hitung_jumlah(n);
printf("%d\n", n); /* cetak 3 */
printf("%d\n", jumlah); /* cetak 6 */
return 0;
}

/* -----------------------------------------
* Menjumlahkan integer 1 s/d n; n >=1
* ------------------------------------------*/

int hitung_jumlah(int n)
{
int hasil = 0;

for (; n > 0; --n)


hasil += n;

Konsep Pemrograman 38
return hasil;

4.2. Fungsi - Fungsi Matematik

 Fungsi - fungsi matematik yang umum diperlukan tersedia dalam standard-library


dengan header <math.h>
 Tabel berikut ini memperlihatkan beberapa fungsi matematik yang sering dipakai,
masing-masing mengembalikan nilai bertipe double, x dan y bertipe double.

Fungsi Keterangan Contoh Ekspresi Nilai


sqrt(x) akar kuadrat dari x sqrt(9.0) 3.0
exp(x) e pangkat x exp(1.0) 2.718282
log(x) logaritma natural dari x log(exp(1.0)) 1.0
(pokok e)
log10(x) logaritma dari x (pokok log10(100.0) 2.0
10)
fabs(x) nilai mutlak dari x fabs(-2.5) 2.5
ceil(x) nilai bulat terkecil yang ceil(9.3) 10.0
>=x
floor(x) nilai bulat terkecil yang floor(-9.7) -10.0
<=x
pow(x,y) x pangkat y pow(2,7) 128.0
sin(x) x dalam radian sin(0.0) 0.0
cos(x) x dalam radian cos(0.0) 1.0
tan(x) x dalam radian tan(0.0) 0.0

 ANSI C menyediakan tiga tipe untuk bilangan floating-point : float, double dan long
double
 Jumlah byte yang dibutuhkan untuk menyimpan suatu objek (misalnya variabel, tipe,
dsb) dalam memori dapat ditentukan dengan menggunakan operator unary sizeof.

sizeof(char) bernilai 1; ini berarti satu variabel bertipe char memerlukan memori
sebanyak 1 byte.

Jumlah byte untuk tipe-tipe dasar, meskipun bergantung pada mesin komputer /
kompilator ybs, dalam ANSI C memenuhi hubungan sbb :

sizeof(char) = 1
sizeof(short)  sizeof(int)  sizeof(long)

Konsep Pemrograman 39
sizeof(signed)  sizeof(unsigned)  sizeof(int)
sizeof(float)  sizeof(double)  sizeof(long double)

Pada mesin PC, biasanya :

sizeof(int) bernilai 2
sizeof(long) bernilai 4
sizeof(float) bernilai 4
sizeof(double) bernilai 8

/* Program ini memberikan ukuran dari tipe-tipe dasar *


* ---------------------------------------------------*/
#include <stdio.h>

main()
{
printf("Jumlah byte untuk tipe-tipe dasar.\n");
printf(" char :%3d\n", sizeof(char));
printf(" short :%3d\n", sizeof(short));
printf(" int :%3d\n", sizeof(int));
printf(" long :%3d\n", sizeof(long));
printf(" unsigned :%3d\n", sizeof(unsigned));
printf(" float :%3d\n", sizeof(float));
printf(" double :%3d\n", sizeof(double));
printf("long double :%3d\n", sizeof(long double));

return 0;
}

Ouput dari mesin PC (486) :

Jumlah byte untuk tipe-tipe dasar.


char :1
short :2
int :2
long :4
unsigned :2
float :4
double :8
long double :10

/* Contoh penggunaan fungsi matematik dari standard *


* library dengan header <math.h> */

Konsep Pemrograman 40
#include <stdio.h>
#include <math.h>

main()
{
double x;
printf("\n%s\n%s\n",
"Kalkulasi akar kuadrat dari x",
"-----");

printf("Input x : ");
scanf("%lf", &x);
if (x >= 0.0)
printf("\n%22s%21.15e\n%22s%21.15e\n",
"x = ",x,
"akar kuadrat dari x = ", sqrt(x));
else
printf("\nMaaf, input harus non negatif.\n");
return 0;
}

Outputnya :

Kalkulasi akar kuadrat dari x


-----
Input x : 2
x = 2.000000000000000e+00
akar kuadrat dari x = 1.414213562373095e+00

 Kompilasi di UNIX / Linux :

c89 -lm namafile.c -o namafile


 Untuk printf :

%s adalah penentu konversi untuk string.


%22s : tempat yang disediakan (field width) 22 karakter,
rapat ke kanan.
%s : tempat yang disediakan secukupnya.

%21.15e : cetak sebagai bilangan floating-point dalam


notasi eksponen seperti dalam contoh;
field-width 21 karakter dengan 15 karakter di
belakang titik desimal.

Konsep Pemrograman 41
 Untuk scanf :

%lf adalah penentu konversi untuk tipe double.


 Ketelitian (precision) untuk tipe float biasanya adalah 6 digit, sedangkan untuk tipe
double biasanya adalah 15 digit.

Konsep Pemrograman 42

Anda mungkin juga menyukai