Anda di halaman 1dari 8

Nama : NIM: Kelas :

Prosedur dan Fungsi Dalam C


a. Prosedur : pengelompokan instruksi yang merupakan bagian dari program.
b. Fungsi : sekelompok instruksi yang mengolah satu atau sejumlah nilai dan menghasilkan
nilai baru.

Persamaan : sekumpulan instruksi


Bedanya :
a. Prosedur :
a. secara konsep berupa pengelompokan instruksi, sehingga tidak selalu memerlukan
parameter.
b. Parameter ada 3 jenis: input, output atau input/output. Parameter input digunakan
untuk proses, dan parameter output untuk menyimpan hasil proses yang akan
digunakan pada program utama. Sehingga, parameter input dapat berupa nilai,
sedangkan parameter output harus berupa variabel.
c. Pemanggilan dengan menyebut nama prosedur dan parameternya. Jumlah dan tipe
parameter pemanggilan ( disebut parameter aktual) harus sama dengan jumlah dan
tipe parameter saat deklarasi ( disebut parameter formal).

b. Fungsi :
a. secara konsep digunakan untuk mengolah suatu nilai, sehingga hampir selalu
memerlukan parameter berupa nilai yang diolah.
b. Menghasilkan nilai baru, sehingga ketika dipanggil harus diperlakukan seperti
sebuah nilai, bukan variabel.
c. Karena dikhususkan untuk memproses nilai pada parameter, maka tidak ada
instruksi input output pada fungsi.

Dalam C, parameter terbagi dalam 2 jenis, yaitu input dan output. Parameter input
merupakan parameter yang bisa digunakan untuk proses, misalkan digunakan sebagai operasi
penjumlahan atau perkalian. Karena digunakan dalam proses, maka dalam pemanggilan
prosedur parameter ini harus berisi sebuah nilai, bukan variabel kosong. Dalam definisi
fungsi, parameter ini ditulis seperti variabel biasa.

1
Nama : NIM: Kelas :

Jenis parameter output merupakan parameter yang akan menyimpan hasil prosedur.
Parameter ini ditulis dengan menggunakan asterisk (*). Maknanya, jenis parameter output
akan memiliki nilai yang berubah jika parameter dalam prosedur juga berubah. Dalam
pemanggilan prosedur, jenis parameter ini harus merupakan sebuah variabel yang dikenal di
program utama, dengan tipe yang sama dengan parameter yang dideklarasikan pada
prosedur.
Sebagai contoh, sebuah soal dengan permasalahan sebagai berikut :

Sebuah program memiliki sebuah prosedur Baca untuk membaca 2 bilangan A dan B, dan
memiliki sebuah fungsi Tambah untuk menjumlahkan dua bilangan a dan b (keduanya
integer). Buat program C untuk prosedur dan fungsi tersebut, kemudian memanggil
prosedur Baca,memanggil fungsi Tambah dan metampilkan hasilnya ke layar monitor.

Dalam algoritma, persoalan tersebut dapat ditulis sebagai berikut :


Program Jumlah
Deklarasi
int A,B.C
void Baca(int *A; int *B)
int Tambah (int a; int b)
Algoritma
Baca (&A,&B)
C=Tambah(A,B)
Output(C)

void Baca(int *A;int *B)


Deklarasi
Algoritma
input(&A)
input(&B)

int Tambah (int a;int b)


Deklarasi
Algoritma
return (a+b)

Dalam bahasa C, program tersebut ditulis :


#include <stdio.h>
#include <stdlib.h>

void Baca(int *A, int *B){


printf("masukkan bilangan pertama :");
scanf("%d",&*A);
printf("masukkan bilangan kedua :");
scanf("%d",&*B);
}

int Tambah (int a, int b){


return a+b;
}

2
Nama : NIM: Kelas :

int main()
{
int A,B,C;
Baca(&A,&B);
C=Tambah(A,B);
printf("%d + %d = %d", A,B,C);
return 0;
}

Perhatikan bahwa dalam parameter A dan B dalam fungsi Baca memiliki asterisk (*) di depannya, yang
memandakan bahwa parameter tersebut adalah poarameter jenis output. Dalam pemanggilan fungsi,
parameter yang menempati A dan B juga diberi tanda amperstand (&).

Pada fungsi Tambah, nama parameter adalah a dan b, bukan A dan B, sesuai dengan soal. Perhatikan
bahwa dalam pemanggilan fungsi Tambah, nilai yang dijumlahkan adalah variabel A dan B, sehingga
dalam pemanggilan menggunakan bentuk “Tambah(A,B);” bukan :Tambah(a,b); “ karena dalam program
utama tidak dikenal variabel a dan b.

Bandingkan jika kita menulis prosedur Baca sebegai berikut :


void Baca(){
int A, B; // Perhatikan bahwa variabel A dan B dideklarasikan pada fungsi, dan menjadi variabel LOKAL
printf("masukkan bilangan pertama :");
scanf("%d",&A);
printf("masukkan bilangan kedua :");
scanf("%d",&B);
}
 Pada fungsi Baca, akan dibaca 2 nilai dan disimpan pada variabel A dan B. Nilai ini
disimpan pada variabel A dan B, namun tidak dikenal pada program utama.
 Dengan demikian, jika dipanggil pada program utama dengan instruksi:
Baca()
C=Tambah(A,B);
printf(“%d+%d=%d”,A,B,C);

dan diinputkan nilai 10 dan 20, maka tidak akan menghasilkan nilai 30.

Sekali lagi, hal ini karena variabel A dan B dalam prosedur Baca hanya dikenal pada prosedur
Baca saja, tidak di program utama.

3
Nama : NIM: Kelas :

Jika kita ubah prosedur Baca menjadi seperti ini :


void Baca(){
// Perhatikan bahwa TIDAK ADA variabel A dan B, dan memakai variabel A dan B milik program utama
printf("masukkan bilangan pertama :");
scanf("%d",&A);
printf("masukkan bilangan kedua :");
scanf("%d",&B);
}

Sebagai catatan, variabel A dan B HARUS DIKLARASIKAN sebelum prosedur Baca() !

Sebagai contoh permasalahan kedua, perhatikan algortima berikut :


Program Utama
Deklarasi
int satu,dua,tiga,empat
void Pro1 (int one, int *two, int *three);
Algoritma
satu =5; dua = 15; tiga = 10
Pro1 (satu,dua,tiga)

void Pro1 (int one, int *two, int *three);


Kamus Lokal
Algoritma
one = 2 * one + two
*two = one + *two * 2
*three = one + *two

Pada program C, bentuk algortima di atas ditulis sebagai berikut :

void Pro1(int one, int *two, int *three)


{
one=2* one + *two;
*two=one+ *two*2;
*three=one+ *two;
printf("Nilai di dalam prosedur defined"); // hanya sebagai penjelas
printf("one=%d two=%d three=%d \n",one,*two,*three); // hanya sebagai penjelas
}

int main()
{
int satu,dua,tiga,empat;
satu=5; dua=15; tiga=10;
printf("Sebelum dipanggil prosedur Pro1"); // hanya sebagai penjelas
printf("satu=%d dua=%d tiga=%d \n",satu,dua,tiga); // hanya sebagai penjelas
Pro1(satu,&dua,&tiga);

4
Nama : NIM: Kelas :

printf("Setelah dipanggil prosedur Pro1"); // hanya sebagai penjelas


printf("satu=%d dua=%d tiga=%d",satu,dua,tiga); // hanya sebagai penjelas
}
Pada program utama, prosedur dipanggil dengan sesuai dengan deklarasi parameternya. Untuk jenis
output, maka harus menggunakan variabel yang dikenal pada program utama, dengan memberikan
amperstand (&). Sedangkan parameter input dapat dipanggil dengan menuliskan nilai atau sebuah
variabel yang berisi nilai. Dalam program utama, pemanggilan prosedur "Pro1" dapat ditulis sebagai
berikut :

Pro1( satu, &dua, &tiga);

Pro1( 25, &dua, &tiga);

Pro1( dua, &satu, &empat); // nama variabel sebagai parameter tidak harus sama dengan

parameter, yang penting jumlah dan jenis sesuai

Pemanggilan yang tidak diijinkan ( karena akan menimbulkan kesalahan )

Pro1( empat, &dua, &tiga); // karena variabel "empat" belum ada nilai

Pro1(satu,10,&tiga); // karena parameter kedua bukan sebuah variabel

Pro1( satu, dua, &tiga); // karena parameter kedua bukan jenis output, kurang "&"

Pro1( satu, &empat, &tiga); // "empat" belum ada nilai ( jenis input, dipakai dalam proses )

Dalam pemanggilan keempat, perhatikan bahwa parameter "*two" merupakan jenis output sehingga
harus dipanggil sebagai sebuah variabel, namun juga digunakan dalam proses ("one=2* one + *two;").
Karena itu, maka variabel yang menempati parameer tersebut harus merupakan sebuah variabel yang
memiliki nilai. Jadi, jenis parameter seperti ini adalah jenis input sekaligus output, yang harus diisi
dengan sebuah variiabel bernilai. Perhatikan sekali lagi, bahwa parameter dengan jenis output atau
input/output, ketika dipanggil harus diberi tanda "&" sebelum variabel yang terkait.

Jika program pada contoh di atas dijalankan, maka akan menghaslkan output :

Nilai "satu","dua","tiga" sebelum dipanggil prosedur "Pro1", sesuai dengan pengisian nilai masing-
masing variabel pada program utama adalah: 5,15 dan 10.

Di dalam prosedur "Pro1", variabel "satu" menempati parameter "one", "dua" menempati "two" dan
"tiga" menempati "three". Dengan demikian, masing-masing akan berubah :

one=2* one + *two; → one=2x5 15 =25


*two=one+ *two*2; → *two=25 + 15x2 = 25+30=55

5
Nama : NIM: Kelas :

*three=one+ *two; → *three=25 + 55= 80


Sehingga di dalam prosedur "Pro1", nilai masing-masing variabel adalah 25,55 dan 80.

Perhatikan karena one berjenis input, maka ketika kembali ke program utama, nilai variabel yang
menempatinya ( yaitu "satu" ) TIDAK BERUBAH, yaitu 5. Sedangkan variabel yang menempati "*two"
dan "*three" berubah sesuai dengan nilai di dalam prosdur "Pro1", yaitu "dua" menjadi 55 dan "tiga"
menjadi 80.

Jika instruksi " Pro1(satu,&dua,&tiga);" diubah menjadi "Pro1(tiga,&satu,&dua);", maka output akan
menjadi :

Di dalam prosedur "Pro1", variabel "tiga" menempati parameter "one"(10), "satu" menempati "two" (5)
dan "dua" menempati "three"(15). Dengan demikian, masing-masing akan berubah :

one=2* one + *two; → one=2x10+5 =25


*two=one+ *two*2; → *two=25 + 5x2 = 25+10=35
*three=one+ *two; → *three=25 + 35= 60
Sehingga di dalam prosedur "Pro1", nilai masing-masing variabel adalah 25,35 dan 60.
Karena one berjenis input, maka ketika kembali ke program utama, nilai variabel yang menempatinya (
yaitu "tiga" ) TIDAK BERUBAH, yaitu 10. Sedangkan variabel yang menempati "*two" dan "*three"
berubah sesuai dengan nilai di dalam prosdur "Pro1", yaitu "satu" menjadi 35 dan "dua" menjadi 60.
Sehingga nilai "satu","dua" dan "tiga" masing-masing adalah 35,60 dan 10.

Contoh ketiga :

void swap(int *x, int *y) {


int temp;
temp = *x; /* save the value at address x */
*x = *y; /* put y into x */
*y = temp; /* put temp into y */
}

int main()
{
int a = 100;
int b = 200;

printf("Before swap, value of a : %d\n", a );

6
Nama : NIM: Kelas :

printf("Before swap, value of b : %d\n", b );


swap(&a, &b);
printf("After swap, value of a : %d\n", a );
printf("After swap, value of b : %d\n", b );
return 0;

Jika program tersebut dijalankan, maka akan didapatkan tampilan sebagai berikut :

Latihan

1. Buat program C untuk mencari nilai maksimal dengan algoritma berikut. Tampilkan juga nilai tersebut
di program utama, dengan bentuk : “Nilai maksimal adalah xx dan berada pada indeks yy “. Misal, jika
data adalah { 3,10,4,8,93,12,23}, maka outputnya : “Nilai maksimal adalah 93, dan berada pada indeks
4”, jika indeks dimulai dari 0.

2. Buat program C untuk prosedur yang digunakan untuk membaca N buah array bertipe buah ( dengan
struktur nama(string,20), harga ( integer) jumlah (integer), dan total ( integer). Prosedur tersebut
membaca data nama, harga dan jumlah, dan kemudian mengisi komponen total, yaitu jumlah dikalikan
harga. Prosedur juga mentotal jumlah harga dari semua buah. Parameter prosedur adalah N ( jenis
input) dan jmlharga ( jenis output). Buat juga program utama yang membaca N, memanggil prosedur,
dan menampilkan jumlah harga.

Tahapan program :

a. Prosedur Proses: Mengulang sebanyak N kali : membaca data buah, mengisi komponen total, dan
menjumlahkan semua total harga buah buah

b. Program utama :

7
Nama : NIM: Kelas :

i. Deklarasi struktur buah dan variabelnya.

ii. Deklarasi variabel yang perlu

iii. Memanggil prosedur untuk membaca data, mengisi dan menjumlah semua total harga buah.

iv. Menampilkan total jumlah semua harga buah

3. Tuliskanlah algoritma dan program dalam bentuk prosedur untuk membaca dua buah besaran bertipe
Jam yang mewakili awal dan akhir suatu percakapan telpon dan menuliskan durasi waktu dalam detik
yang dihitung dari kedua jam yang dibaca. Buat juga program utamanya.

Type Jam terdiri dari Jam, menit dan detik dan dipakai sistem jam dengan jam 00:00:00 sampai dengan
23:59:59. Misal : durasi dari jam 01.50.50 sampai 02.10.20 adalah 0 jam 19 menit 30 detik.

Tulis dalam bentuk fungsi !

Anda mungkin juga menyukai