• Tidak ada hasil yang ditemukan

Kerangka aplikasi yang tersusun atas sejumlah fungsiprosedur

N/A
N/A
Protected

Academic year: 2019

Membagikan "Kerangka aplikasi yang tersusun atas sejumlah fungsiprosedur"

Copied!
18
0
0

Teks penuh

(1)
(2)

PROSEDUR dan FUNGSI

Baik prosedur maupun fungsi merupakan suatu modul sub program yang mengerjakan tugas/aktivitas yang spesifik. Perbedaan diantara keduanya adalah sebuah fungsi akan mengembalikan suatu nilai tertentu ke modul/atau fungsi lain/prosedur lain yang memanggilnya.

Tujuan utama dari prosedur atau fungsi adalah untuk membuat suatu aplikasi agar dapat dipecah menjadi sebuah bagian yang dapat dikelola dengan lebih mudah.

(3)

1. Pendefinisian prosedur

- menuliskan nama prosedur

- mendeklarasikan nama-nama konstanta, variable dan tipe

- menjabarkan rangkaian aksi yang dilakukan

Setiap prosedur mempunyai nama yang unik Prosedur terdiri dari:

- bagian judul(header) , terdiri atas nama prosedur dan deklarasi parameter (jika ada) - bagian deklarasi, untuk mengumumkan nama-nama

- bagian algoritma/deskripsi, disebut badan prosedur

Parameter adalah nama-nama variabel yang dideklarasikan pada bagian header. Parameter :

- aktual (argumen) : parameter yang disertakan pada saat pemanggilan prosedur

- formal : parameter yang dideklarasikan pada bagian header prosedur

Contoh notasi algoritmik sebuah prosedur:

Notasi algoritmik Kode bahasa C++ procedure Luas

{ K. Awal : nilai panjang dan lebar diberikan} { K. Akhir : luas segi empat tercetak}

DEKLARASI

panjang : integer lebar : integer HitungLuas : integer DESKRIPSI:

HitungLuas panjang * lebar write(HitungLuas)

void Luas(void) {

int panjang, lebar, HitungLuas; cin>>panjang;

cin>>lebar;

HitungLuas = panjang*lebar; cout<<HitungLuas;

(4)

2. Pemanggilan Prosedur

Prosedur bukan program yang berdiri sendiri, jadi tidak dapat dieksekusi secara langsung. Prosedur diakses dengan cara memanggil namanya dari program pemanggil. Prosedur bisa memiliki parameter atau tidak. Jika tidak memiliki parameter cukup dengan menuliskan namanya.

Ketika sebuah prosedur dipanggil, kendali program secara otomatis pindah ke prosedur tersebut. Seluruh instruksi dalam badan prosedur tersebut akan dilaksanakan. Setelah semua instruksi selesai dilaksanakan, kendali program berpindah secara otomatis kembali ke instruksi sesudah pemanggilan prosedur dalam program pemanggil.

Agar nama prosedur dikenal oleh program pemanggil, maka dalam program pemanggil harus dideklarasikan prototipe prosedur tersebut. Contoh pemanggilan prosedur dari contoh sebelumnya:

Notasi algoritmik Kode bahasa C++ ALGORITMA HitungLuas

DEKLARASI

procedure Luas DESKRIPSI:

Luas

procedure Luas DEKLARASI

panjang : integer lebar : integer HitungLuas : integer DESKRIPSI:

Read(panjang,lebar)

HitungLuas panjang * lebar write(HitungLuas)

#include <iostream.h> void Luas();

void main() {

Luas(); }

void Luas() {

int panjang, lebar, HitungLuas; cin>>panjang;

cin>>lebar;

HitungLuas = panjang*lebar; cout<<HitungLuas;

(5)

3. Lingkup variabel

Lingkup variabel menjelaskan bagaimana sifat suatu variabel didalam suatu prosedur/fungsi.

 Variabel otomatis/lokal

 Variabel eksternal/global

 Variabel statis

3.1. Variabel otomatis/lokal

Variabel otomatis bersifat lokal terhadap sebuah prosedur/fungsi. Variabel seperti ini tidak dikenal diluar prosedur/fungsi yang mendeklarasikannya.

#include<iostream.h>

void prosX(void);//prototipe prosedur void main(void)

{

int bilX=50;

cout<<"Sebelum memanggil prosedur"<<endl; cout<<"bilX = "<<bilX<<endl;

prosX();

cout<<"Setelah memanggil prosedur"<<endl; cout<<"bilX = "<<bilX<<endl;

}

void prosX(void) {

int bilX=100;

cout<<"Dalam prosedur"<<endl; cout<<"bilX = "<<bilX<<endl; }

Hasilnya :

Sebelum memanggil prosedur bilX = 50

Dalam prosedur bilX = 100

(6)

3.2. Variabel eksternal

Didefinisikan diluar prosedur/fungsi, sehingga dikenal oleh seluruh prosedur/fungsi.

#include<iostream.h>

void ubahBilX(void);//prototipe prosedur int bilX;

void main(void) {

bilX=50;

cout<<"Sebelum memanggil prosedur"<<endl; cout<<"bilX = "<<bilX<<endl;

ubahBilX();

cout<<"Setelah memanggil prosedur"<<endl; cout<<"bilX = "<<bilX<<endl;

}

void ubahBilX(void) {

cout<<"Dalam prosedur"<<endl; cout<<"bilX = "<<bilX<<endl; bilX=100;

}

Hasilnya :

Sebelum memanggil prosedur bilX = 50

Dalam prosedur bilX = 50

Setelah memanggil prosedur bilX = 100

3.3. Variabel Statis

Sifat :

 Variabel hanya bisa diakses oleh prosedur/fungsi yang mendeklarasikannya

 Variabel tidak hilang saat eksekusi prosedur/fungsi berakhir

(7)

#include<iostream.h>

void Pencacah(void);//prototipe prosedur void main(void)

{

Pencacah(); Pencacah(); Pencacah(); }

void Pencacah(void) {

static int jumlah=1;

cout<<"Prosedur telah dipanggil = "<<jumlah<<" kali"<<endl; jumlah++;

}

Hasilnya :

Prosedur telah dipanggil 1 kali Prosedur telah dipanggil 2 kali Prosedur telah dipanggil 3kali

Coba kata static dihilangkan, bagaimana hasilnya?

4. Parameter/Argumen

Kebanyakan program memerlukan pertukaran informasi antara prosedur dan pemanggilnya. Penggunaan parameter menawarkan mekanisme pertukaran tersebut. Prosedur dengan parameter diakses dengan cara memanggil prosedur tersebut beserta parameternya.

Aturan yang harus diperhatikan dalam korespondensi satu-satu antara parameter formal dan parameter aktual adalah:

- Jumlah parameter aktual pada pemanggilan prosedur harus sama dengan jumlah parameter formal pada

deklarasi prosedurnya

- Tiap parameter aktual harus bertipe sama dengan tipe parameter formal yang bersesuaian

(8)

Berdasarkan maksud penggunaannya, terdapat tiga jenis parameter formal: a. parameter masukan (input parameter)

b. parameter keluaran (output parameter)

c. parameter masukan/keluaran (input/output parameter)

4.1. Parameter masukan

Parameter masukan : parameter yang nilainya berlaku sebagai masukan untuk prosedur. Sering disebut juga sebagai parameter nilai(value parameter atau parameter by value

Contoh:

ALGORITMA HitungLuas DEKLARASI

a,b : integer

procedure Luas(input panjang, lebar : integer) DESKRIPSI:

read(a,b) Luas(a,b)

procedure Luas(input p,l:integer) DEKLARASI

luas : integer DESKRIPSI:

luas p * l write(luas)

#include<iostream.h>

void Luas(int a,int b);//prototipe prosedur void main(void)

{

int panjang=5,lebar=3; Luas(panjang,lebar); }

void Luas(int p,int l) {

int luas; luas=p*l;

(9)

Nilai parameter aktual diisikan kedalam parameter formal yang bersesuaian. Perubahan nilai dalam badan prosedur tidak mengubah nilai parameter aktual. Karena yang dipentingkan adalah nilainya, maka nama parameter aktual boleh berbeda dengan nama parameter formal yang bersesuaian.

4.2. Parameter Keluaran

Parameter keluaran : parameter yang menampung keluaran yang dihasilkan oleh prosedur yang akan digunakan oleh program pemanggil.

Contoh :

ALGORITMA HitungLuas DEKLARASI

a,b,L : integer

procedure Luas(input p,l : integer, output luas : integer) DESKRIPSI:

read(a,b) Luas(a,b,L) write(L)

procedure Luas(input p,l : integer, output luas : integer) DEKLARASI

{tidak ada} DESKRIPSI:

luas p * l

#include<iostream.h> void hitung(int ,int, int * ); void main(void)

{

int panjang,lebar,luas;

cout<<"Panjang = ";cin>>panjang;

cout<<"Lebar = ";cin>>lebar;cout<<endl; hitung(panjang,lebar,&luas);

cout<<"Luas = "<<luas<<endl; }

void hitung(int A, int B, int *luas) {

*luas=A*B; }

(10)

4.3. Parameter Masukan/Keluaran

Parameter masukan/keluaran : parameter yang berfungsi sebagai masukan sekaligus keluaran bagi prosedur tersebut.

Pada kebanyakan aplikasi kadang informasi harus dikirim dalam dua arah sehingga prosedur harus dapat mengakomodasi baik masukan dari dan keluaran ke blok program pemanggil.

Contoh:

ALGORITMA SelisihXY DEKLARASI

X,Y,Z : integer

procedure Tukar(input/output A,B : integer) DESKRIPSI:

procedure Tukar(input/output A,B : integer) DEKLARASI

tmp : integer DESKRIPSI:

tmp  A A B B tmp

#include<iostream.h> void Tukar(int *, int *); void main(void)

{

int X,Y,Z;

cout<<"X = ";cin>>X; cout<<"Y = ";cin>>Y; if(X<Y)

Tukar(&X,&Y); Z=X-Y;

cout<<Z<<endl; }

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

(11)

Akibat penggunaan parameter masukan/keluaran, bila parameter aktual diubah nilainya dalam badan prosedur maka sesudah pemanggilan prosedur, nilai parameter aktual di titik pemanggilan juga berubah.

5. Translasi notasi algoritmik Prosedur kedalam notasi bahasa C

Aturan dalam translasi :

 Pendefinisian prosedur ditulis diluar blok program utama, kecuali jika direalisasikan sebagai file include. Prosedur umumnya diletakan setelah blok main(), sedangkan deklarasi prosedur ditulis sebelum blok main() sebagai prototipe. Jika pendefinisian prosedur ditulis sebelum blok main() maka pendeklarasian prototipe tidak diperlukan lagi.

 Dalam bahasa C tidak dikenal istilah prosedur. Semua modul program adalah fungsi. Prosedur adalah fungsi yang tidak mengembalikan nilai apapun. Karena itu nilai kembali untuk prosedur adalah void (artinya kosong).

 Bila prosedur tidak memiliki parameter maka tanda kurung “(“ dan “)” tetap ditulis setelah nama prosedur tersebut.

 Semua parameter dalam bahasa C adalah parameter masukan. Oleh karena itu, semua argumen parameter aktual dilewatkan sebagai “by value” , artinya nilai parameter aktual disalin ke parameter formal yang bersesuaian. Suatu cara untuk memperoleh efek parameter keluaran maupun efek parameter masukan/keluaran adalah melewatkan pointer kedalam parameter aktual dengan menambahkan karakter “&” di awal nama parameter aktual yang berjenis parameter masukan atau masukan/keluaran. Sedangkan parameter formal yang berjenis masukan atau masukan/keluaran ditambahkan karakter “*” didepannya.

6. Fungsi

(12)

Definisi Fungsi

Fungsi adalah sub-program yang memberikan/

mengembalikan (return) sebuah nilai dari tipe tertentu. Contoh fungsi :

5

Fungsi diakses dengan memanggil namanya

Penulisan fungsi:

functionNamaFungsi(input parameter : tipe)tipe …………

DELARASI …………

ALGORITMA …………

returnekspresi

Contoh:

Notasi Algoritmik Kode bahasa C++

ALGORITMA F DEKLARASI

x,y,Hasil : real DESKRIPSI

read(x,y) HasilF(x,y) write(x,y,Hasil)

function F(input x,y : real) real DEKLARASI

H : real DESKRIPSI:

H3*x + 2*y return H

#include<iostream.h> float F(float x,float y); void main(void)

{

float x,y,Hasil;

cout<<”x = “;cin>>x;cout<<”y = “;cin>>y; Hasil=F(x,y);

cout<<x<<endl;cout<<y<<endl;cout<<Hasil<<endl; }

float F(float A, float B) {

(13)

Fungsi dapat mengandung parameter formal. Parameter dalam fungsi selalu merupakan parameter masukan.

Prototipe fungsi yang disediakan oleh C/C++ biasa diletakan dalam berkas judul (berkas .h). Itulah sebabnya jika akan mengunakan fungsi-fungsi tertentu harus menyertakan #include.

Tentukan output dari program berikut

#include<iostream.h> void rubah(void); void main(void) {

int A=10,B=20;

cout<<"Nilai Awal A dan B"<<endl; cout<<"A = "<<A<<endl;

cout<<"B = "<<B<<endl<<endl; rubah();

cout<<"Nilai A dan B setelah "; cout<<"pemanggilan fungsi"<<endl; cout<<"A = "<<A<<endl;

cout<<"B = "<<B<<endl<<endl; }

void rubah(void) {

int A=100,B=200;

cout<<"Nilai A dan B dlm fungsi"<<endl; cout<<"A = "<<A<<endl;

cout<<"B = "<<B<<endl<<endl; }

#include<iostream.h> void tukar(int,int); void main(void) {

int A,B;

cout<<"A = ";cin>>A;

cout<<"B = ";cin>>B;cout<<endl; cout<<"Sebelum ditukar"<<endl; cout<<"A = "<<A<<endl;

cout<<"B = "<<B<<endl<<endl; tukar(A,B);

cout<<"Setelah ditukar"<<endl; cout<<"A = "<<A<<endl;

cout<<"B = "<<B<<endl; }

(14)

#include<iostream.h> #include<iomanip.h> #define SIZE 10 void cetak(int *A) {

for(int i=0;i<=SIZE-1;i++) cout<<setw(3)<<A[i]; }

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

int C[SIZE];

for(int i=0;i<=SIZE-1;i++) C[i]=A[i]+B[i]; cetak(C);

}

void main(void) {

int A[SIZE]={2,4,6,3,4,2,5,6,3,2}; int B[SIZE]={1,3,5,7,2,2,4,6,3,1};

//cetak matrik A cetak(A);cout<<endl; //cetak matrik B cetak(B);cout<<endl; //Jumlahkan matrik jumlah(A,B);cout<<endl;

#include<iostream.h> #include<iomanip.h> #define SIZE 10

void cetak(int *A) //atau cetak(int A[]) {

for(int i=0;i<=SIZE-1;i++) cout<<setw(3)<<A[i]; }

void cetak_elemen(int el) {

cout<<"Elemen = "<<el; }

void kali_elemen(int *A,int el,int a)//Elemen A[el]*a {

A[el]*=a; }

void rubah_array(int A[]) {

for(int i=0;i<=SIZE-1;i++) A[i]=A[i]+2;

}

(15)

cetak(A);cout<<endl;

cetak_elemen(A[2]);cout<<endl;

kali_elemen(A,2,10);//Elemen A[2]*10 cetak(A);cout<<endl;

rubah_array(A); cetak(A);cout<<endl; }

#include<iostream.h> #define N_Baris 5 #define N_Kolom 2

void cetak(int A[][N_Kolom]);

void Rubah_data(int array[][N_Kolom]); void main(void)

{

int data[N_Baris][N_Kolom]= {

void Rubah_data(int array[][N_Kolom]) {

void cetak(int A[][N_Kolom]) {

int i,j;

for(i=0;i<5;i++){

for(j=0;j<2;j++){

cout<<A[i][j]<<" "; }

cout<<endl; }

(16)

7. Fungsi Rekursif

Algoritma rekursif adalah algoritma yang memanggil dirinya sendiri. Oleh karena itu, algoritma rekursif harus dinyatakan dalam prosedur atau fungsi karena hanya prosedur atau fungsi yang dapat dipanggil dalam sebuah program. Fungsi rekursif adalah fungsi yang memanggil dirinya sendiri. Proses pemanggilan fungsi itu sendiri disebut rekursi.

Definisi rekursif disusun oleh dua bagian :

1) Basis : bagian yang berisi kasus yang terdefinisi secara eksplisit. Bagian ini menghentikan rekursif dan memberikan sebuah nilai yang terdefinisi pada fungsi rekursif.

2) Rekurens : bagian yang mendefinisikan obyek dalam terminologi dirinya sendiri

Contoh : masalah faktorial. 0! = 1

1! = 1 2! = 1 x 2 3! = 1 x 2 x 3 4! = 1 x 2 x 3 x 4 atau dapat ditulis : 0! = 1

1! = 1 x 0! 2! = 2 x 1! 3! = 3 x 2! Untuk n>0 :

n! = 1 X 2 x 3 x .. x (n-1) x n = n x (n-1)!

n! = 1 , jika n = 0 {basis}

n! = n x (n-1)! , jika n > 0 {rekurens}

function Fak(input n : integer)  integer DEKLARASI

DESKRIPSI if n = 0 then

return 1 {basis}

else

return n * Fak(n-1) {rekuren}

(17)

Proses pemanggilan rekursif Nilai yg dikembalikan dari tiap-tiap pemanggilan rekursif

Tugas :

1. Tulislah kode program C++ untuk menghitung faktorial

2. Tulislah program untuk menghitung nilai rata-rata dari sekumpulan data bilangan bulat yang dibaca berulang-ulang dari papan ketik (algoritma dan program C++).

3. Tulislah kode program C++ untuk mengalikan dua buah matrik. Perkalian dilakukan dalam suatu prosedur yang memiliki parameter masukan dan keluaran. Parameter masukan berupa dua matrik yang diperkalikan, sedangkan parameter keluaran berupa matrik hasil perkalian.

4.Tulislah program C++ untuk menghitung deret Fibonacci.

(18)

Fungsi pustaka math.h

Fingsi Penjelasan Contoh

sqrt(x) Akar dua dari x sqrt(900.0) = 30.0

exp(x) Fungsi eksponensial x

e exp(1.0) = 2.718282

log(x) Logaritma natural dari x (basis e) log(2.718282) = 1

log10(x) Logaritma dari x (basis 10) log10(100.0) = 2.0

fabs(x) Nilai absolut dari x fabs(-5.0) = 5.0

ceil(x) Membulatkan x ke integer terkecil tidak kurang

dari x

ceil(9.2) = 10.0 ceil(-9.8) = -9.0

floor(x) Membulatkan x ke integer terbesar tidak lebih

besar dari x

floor(9.2) = 9.0 floor(-9.8) = -10.0

pow(x,y) y

x pow(9,0.5) = 3.0

fmod(x,y) Sisa pembagian dari x/y, floating point fmod(13.657,2.33) = 1.992

sin(x) Sinus dari x ( x dalam radian) sin(0.0) = 0.0

cos(x) Cosinus dari x ( x dalam radian) cos(0.0) = 1.0

Referensi

Dokumen terkait

sangat penting dalam pembangunan ekonomi suatu negara Indonesia. Jasa perbankan pada umumnya terbagi atas dua tujuan. Pertama, sebagai penyedia mekanisme dan alat pembayaran

Dari pertimbangan-pertimbangan mengenai deskripsi proses, kelebihan dan kekurangan, serta kondisi proses, dipilih metode pulpikasi kraft (sulfat) sebagai

Surge pada Centrifugal Gas Compressor adalah merupakan suatu kondisi dimana terjadi perubahan flow minimum suatu gas sesuai dengan yang dibutuhkan oleh

Pelaksanaan deskripsi suatu jenis tanah dan batuan yang langsung diperoleh di lapangan akan didasarkan pada hasil identifikasi dan klasifikasi tanah dan batuan

Penelitian ini bertujuan untuk mengetahui perbedaan signifikan pada rasio ROA, ROE, NPM dan BOPO terhadap kinerja keuangan PT. Bank Rakyat Indonesia Syariah tahun 2012-2013

Mesin Inferensi adalah program komputer yang menyediakan cara-cara atau langkah-langkah untuk melakukan penalaran mengenai informasi yang terdapat pada basis pengetahuan dan memori

Sektor ini menjadi sangat penting dalam SDGs karena Sidang Umum Perserikatan Bangsa-Bangsa (SU PBB) tanggal 16 Januari 2012 telah menetapkan tahun 2012 sebagai tahun energi

Penelitian ini bertujuan untuk mengetahui apakah kualitas pelayanan kesehatan yang diberikan oleh Puskesmas Rajabasa Indah dapat memenuhi kebutuhan, harapan, serta