Kerangka aplikasi yang tersusun atas sejumlah fungsiprosedur

  

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.

  

Kerangka aplikasi yang tersusun atas sejumlah fungsi/prosedur

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 void Luas(void)

  { K. Awal : nilai panjang dan lebar diberikan} { { K. Akhir : luas segi empat tercetak} int panjang, lebar, HitungLuas; DEKLARASI cin>>panjang; panjang : integer cin>>lebar; lebar : integer HitungLuas = panjang*lebar; HitungLuas : integer cout<<HitungLuas;

  DESKRIPSI: }

  HitungLuas  panjang * lebar write(HitungLuas)

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 #include <iostream.h> DEKLARASI void Luas(); procedure Luas void main() DESKRIPSI: {

  Luas Luas();

  } procedure Luas void Luas()

  DEKLARASI { panjang : integer int panjang, lebar, HitungLuas; lebar : integer cin>>panjang;

  HitungLuas : integer cin>>lebar; DESKRIPSI:

  HitungLuas = panjang*lebar; Read(panjang,lebar) cout<<HitungLuas; HitungLuas  panjang * lebar

  } write(HitungLuas)

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>

  Hasilnya :

  void prosX(void);//prototipe prosedur

  Sebelum memanggil prosedur

  void main(void)

  bilX = 50

  {

  Dalam prosedur

  int bilX=50;

  bilX = 100

  cout<<"Sebelum memanggil prosedur"<<endl; cout<<"bilX = "<<bilX<<endl; Setelah memanggil prosedur prosX();

  bilX = 50

  cout<<"Setelah memanggil prosedur"<<endl; cout<<"bilX = "<<bilX<<endl; } void prosX(void) { int bilX=100; cout<<"Dalam prosedur"<<endl; cout<<"bilX = "<<bilX<<endl;

  }

3.2. Variabel eksternal Didefinisikan diluar prosedur/fungsi, sehingga dikenal oleh seluruh prosedur/fungsi.

  #include<iostream.h>

  Hasilnya :

  void ubahBilX(void);//prototipe prosedur

  Sebelum memanggil prosedur

  int bilX;

  bilX = 50

  void main(void)

  Dalam prosedur

  {

  bilX = 50

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

  Setelah memanggil prosedur

  cout<<"bilX = "<<bilX<<endl;

  bilX = 100

  ubahBilX(); cout<<"Setelah memanggil prosedur"<<endl; cout<<"bilX = "<<bilX<<endl;

  } void ubahBilX(void) { cout<<"Dalam prosedur"<<endl; cout<<"bilX = "<<bilX<<endl; bilX=100;

  }

3.3. Variabel Statis

  Sifat :  Variabel hanya bisa diakses oleh prosedur/fungsi yang mendeklarasikannya  Variabel tidak hilang saat eksekusi prosedur/fungsi berakhir  Inisialisasi dalam deklarasi hanya dilakukan sekali selama aplikasi berjalan

  #include<iostream.h> Hasilnya : void Pencacah(void);//prototipe prosedur Prosedur telah dipanggil 1 kali void main(void)

  Prosedur telah dipanggil 2 kali {

  Prosedur telah dipanggil 3kali Pencacah(); Pencacah(); Pencacah();

  Coba kata static dihilangkan, bagaimana } hasilnya? void Pencacah(void)

  { static int jumlah=1; cout<<"Prosedur telah dipanggil = "<<jumlah<<" kali"<<endl; jumlah++;

  }

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
  • >Parameter aktual diekspresikan sesuai dengan jenis parameter formal(penjelasan lihat dibawah)
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 #include<iostream.h> DEKLARASI void Luas(int a,int b);//prototipe prosedur a,b : integer void main(void) procedure Luas(input panjang, lebar : integer) {

  DESKRIPSI: int panjang=5,lebar=3; read(a,b) Luas(panjang,lebar);

  Luas(a,b) } procedure Luas(input p,l:integer) void Luas(int p,int l)

  DEKLARASI { luas : integer int luas;

  DESKRIPSI: luas=p*l; luas  p * l cout<<"Luas = "<<luas<<endl; write(luas)

  }

  

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 #include<iostream.h>

  DEKLARASI void hitung(int ,int, int * ); a,b,L : integer void main(void) procedure Luas(input p,l : integer, output luas : integer) {

  DESKRIPSI: int panjang,lebar,luas; read(a,b) cout<<"Panjang = ";cin>>panjang;

  Luas(a,b,L) cout<<"Lebar = ";cin>>lebar;cout<<endl; write(L) hitung(panjang,lebar,&luas); cout<<"Luas = "<<luas<<endl; procedure Luas(input p,l : integer, output luas : integer) } DEKLARASI

  {tidak ada} void hitung(int A, int B, int *luas)

  DESKRIPSI: { luas  p * l

  • luas=A*B; }

  

Karena nama parameter merupakan suatu lokasi di memori maka bila didalam prosedur, parameter aktual diisi

suatu nilai, nilai ini akan tetap berada didalam parameter aktual meskipun prosedur selesai dilaksanakan. Jadi

setelah pemanggilan, parameter aktual berisi suatu nilai yang merupakan keluaran dari prosedur tersebut.

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 #include<iostream.h> DEKLARASI void Tukar(int *, int *);

  X,Y,Z : integer void main(void) procedure Tukar(input/output A,B : integer) {

  DESKRIPSI: int X,Y,Z; read(X,Y) cout<<"X = ";cin>>X; if X  Y then cout<<"Y = ";cin>>Y;

  Tukar(X,Y) if(X<Y) endif

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

  Z=X-Y; write(Z) cout<<Z<<endl;

  } procedure Tukar(input/output A,B : integer) DEKLARASI void Tukar(int *A, int *B) tmp : integer {

  DESKRIPSI: int tmp; tmp  A tmp=*A;

  A  B

  • A=*B; B  tmp
  • B=tmp; }

  

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 Seperti halnya prosedur, fungsi juga merupakan sub-program yang mempunyai tujuan spesifik.

  Definisi Fungsi Fungsi adalah sub-program yang memberikan/ Penulisan fungsi:

  function NamaFungsi(input parameter : tipe)  tipe mengembalikan ( return) sebuah nilai dari tipe tertentu.

  …………

  Contoh fungsi : 2 DELARASI

  ( )

  2

  5

  10

  f xxx

  ………… ( , )

  3

  2

  5 H x yxy  ALGORITMA

  Fungsi diakses dengan memanggil namanya

  ………… return ekspresi

  Contoh: Notasi Algoritmik Kode bahasa C++

  ALGORITMA F #include<iostream.h> DEKLARASI float F(float x,float y); x,y,Hasil : real void main(void)

  DESKRIPSI { read(x,y) float x,y,Hasil;

  HasilF(x,y) cout<<”x = “;cin>>x;cout<<”y = “;cin>>y; write(x,y,Hasil) Hasil=F(x,y); cout<<x<<endl;cout<<y<<endl;cout<<Hasil<<endl; function F(input x,y : real)  real } DEKLARASI

  H : real float F(float A, float B)

  DESKRIPSI: {

  H3*x + 2*y float H; return H H=3*A+2*B; return H;

  } 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;

  } void tukar(int A, int B) { int C;

  C=B; B=A; A=C;

  }

  #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; } void main(void) { int A[SIZE]={2,4,6,3,4,2,5,6,3,2}; 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> void Rubah_data(int array[][N_Kolom])

  #define N_Baris 5 {

  #define N_Kolom 2 int i,j; void cetak(int A[][N_Kolom]); for(i=0;i<N_Baris;i++) void Rubah_data(int array[][N_Kolom]); { void main(void) for(j=0;j<N_Kolom;j++)

  { array[i][j]=0; int data[N_Baris][N_Kolom]= }

  { {23,77},

  } {33,41}, {20,21}, void cetak(int A[][N_Kolom])

  {20,55}, {

  {67,78} int i,j;

  }; for(i=0;i<5;i++){ cetak(data); for(j=0;j<2;j++){ cout<<endl; cout<<A[i][j]<<" ";

  Rubah_data(data); } cetak(data); cout<<endl; cout<<endl;

  } }

  }

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 n! = 1 , jika n = 0 {basis} 1! = 1 n! = n x (n-1)! , jika n > 0 {rekurens} 2! = 1 x 2

  3! = 1 x 2 x 3 function Fak(input n : integer)  integer 4! = 1 x 2 x 3 x 4 DEKLARASI atau dapat ditulis : 0! = 1

  DESKRIPSI 1! = 1 x 0! if n = 0 then 2! = 2 x 1! return 1 {basis} 3! = 3 x 2! else Untuk n>0 : return n * Fak(n-1) {rekuren} n! = 1 X 2 x 3 x .. x (n-1) x n = n x (n-1)! endif 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.

  5. Tulislah algoritma dan program C++ untuk menentukan nilai terbesar dan terkecil dari 3 integer

  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 tan(x) Tangen dari x ( x dalam radian) tan(0.0) = 0.0

Dokumen yang terkait

Rancang bangun aplikasi sistem pendukung keputusan penentuan supplier obat terbaik menggunakan metode weighted product pada rumah sakit Ibu dan Anak Putri Surabaya

1 6 6

Dalam membangun sebuah sistem yang menggunakan SDLC terdiri atas empat tahapan dasar yaitu Planning, Analiysis, Design, dan Implementation menurut Dennis, Wixom

0 0 8

1. Kebijakan dan prosedur rumah sakit menegaskan asesmen informasi yang harus diperoleh dari pasien rawat inap. Pimpinan RS Kepala Unit Rawat Jalan Kepala Unit Rawat Inap Pelaksana keperawatan Pelaksanaan asesmen informasi dan informasi yang harus tersedi

1 6 43

1. Rumah sakit merencanakan pendidikan konsisten dengan misi, jenis pelayanan dan populasi pasien. Pimpinan RS Kepala/Ketua unit kerja yang mengelola edukasi kepada pasien dan keluarganya/PKRS Pelaksana edukasi (tenaga medis, keperawatan, farmasi, gizi ds

0 2 7

Meyer E.Sihotang, et al., Investigasi Faktor-Faktor yang Mempengaruhi Partisipasi Diskusi Online 9 quality, service quality, hedonic motivation,

0 0 12

Analisis PIECES Analisis yang digunakan dalam penelitian ini menggunakan metode PIECES (Performance,

0 1 14

19. Manakah indikator kompeteni pedagogik berikut paling tepat?: A. Mengenali peserta didik, menguasai teori belajar, memahami prinsip-prinsip pembelajaran, mengembangkan kurikulum, melakukan kegiatan yang mendidik, memahami dan mengembangkan potensi pese

0 1 12

Pertumbuhan Perseroan di masa lalu dimungkinkan oleh falsafah yang sederhana: “Komitmen untuk menghasilkan

0 0 200

Laporan Hasil Reviu atas Pelaksanaan Transparansi Fiskal Tahun 2015

0 0 108

Laporan Hasil Reviu atas Pelaksanaan Transparansi Fiskal Tahun 2014

0 1 87