Subprogram
(dalam Bahasa C++)
Tim Penyusun Materi PTI-B
KU1072/Pengenalan Teknologi Informasi B
Tahap Tahun Pertama Bersama
Institut Teknologi Bandung
Tujuan
• Mahasiswa memahami makna dan kegunaan
subprogram dalam bentuk fungsi dan prosedur
• Mahasiswa dapat menggunakan notasi fungsi dan
prosedur dengan benar dan menggunakannya dlam
program
• Mahasiswa dapat membuat program dengan
menggunakan fungsi dan prosedur
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 2
Contoh-1
#include <iostream>
using namespace std;
int main() {
string str1, str2;
str1 = "Maya";
cout << "Hello " << str1 << endl;
cout << "Hello " << "Joko" << endl;
cin >> str2;
cout << "Hello " << str2 << endl;
return 0;
}
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 3
Contoh-1
#include <iostream>
using namespace std;
DIGANTI DENGAN SUBPROGRAM
int main() { (PROSEDUR)
string str1, str2;
str1 = "Maya";
cout << "Hello " << str1 << endl;
CetakHello(str1);
CetakHello("Joko");
cout << "Hello " << "Joko" << endl;
cin >> str2;
cout << "Hello " << str2 << endl;
CetakHello(str2);
return 0;
}
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 4
Contoh-2
#include <iostream>
using namespace std;
int main() {
const float PI = 3.14;
float L, r, fx, x;
r1 = 10;
L = PI * r1 * r1;
x = 10;
fx = x * x;
return 0;
}
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 5
Contoh-2
#include <iostream>
using namespace std;
DIGANTI DENGAN SUBPROGRAM
int main() { (FUNGSI)
const float PI = 3.14;
float L, r, fx, x;
r1 = 10;
FxKuadrat(r1);
L = PI * r1 * r1;
x = 10;
fx = FxKuadrat(x);
x * x;
return 0;
}
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 6
APA GUNANYA??
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 7
ATM-SS
• Sebuah mesin ATM Super Sederhana (ATM-SS) milik
BSSJ (Bank Super Sederhana Juga) memiliki cash
dispenser yang digunakan untuk menampung uang
• ATM-SS hanya dapat digunakan untuk memasukkan
uang ke dalam cash dispenser, menarik uang dari
cash dispenser tersebut, dan menampilkan sisa uang
yang ada di cash dispenser
• Untuk mengakses ATM-SS, pengguna harus
memasukkan pin. Pin yang valid adalah nilai integer
di antara 101 dan 1000. Jika pin tidak valid, maka
program langsung selesai.
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 8
ATM-SS
• Jika pin valid, pengguna dapat memilih beberapa
menu sbb:
– Jika memasukkan menu huruf ‘A’ atau ‘a’ : memasukkan
sejumlah uang ke cash dispenser
– Jika memasukkan menu huruf ‘B’ atau ‘b’ : menarik
sejumlah uang dari cash dispenser
– Jika memasukkan menu huruf ‘C’ atau ‘c’ : menampilkan
jumlah uang yang ada di cash dispenser
– Jika memasukkan menu huruf ‘X’ atau ‘x’ : keluar dari
program
– Jika memasukkan huruf lain, program akan menampilkan
pesan “Bukan pilihan menu yang benar”
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 9
Start
Ada banyak bagian
Amati kode
yang berulang
programnya!!
Input pin bukan???
tidak valid Pin
valid? ‘A’
valid Entri uang
Tampil menu ‘a’
Entri uang
Tampil menu
Tampil Input menu ‘B’
pesan Tarik uang Input menu
akses ‘b’
Cek Tarik uang
tidak valid
menu
‘C’
‘X’ atau ‘x’ Cek Sisa
‘c’
Cek Sisa
lainnya Tampil pesan
End menu salah
10
Kode yang berulang
• Semakin besar program, akan semakin banyak bagian
kode yang berulang
• Sangat tidak efisien jika bagian kode yang sama/serupa
diketik berulang-ulang atau bahkan termasuk kalau di-
copy paste
• Di samping itu, dalam banyak persoalan, ada berbagai
rumus/formula yang berulang-ulang dipakai dalam satu
program
• Bagaimana jika ada cara supaya bagian kode tersebut
tidak perlu diketik berulang-ulang, tapi tetap dapat
digunakan berkali-kali dalam program yang sama
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 11
Subprogram
• A set of instructions designed to perform a
frequently used operation within a program
• 2 (dua) jenis subprogram:
– Fungsi
– Prosedur
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 12
FUNGSI
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 13
Definisi Fungsi
• Fungsi adalah sebuah transformasi akibat pemetaan
suatu nilai (dari domain) ke nilai lain (dalam range)
sama seperti di matematika
• Fungsi mempunyai nama dan sekelompok parameter
formal (harga masukan yang diberi nama dan
dijelaskan type-nya) serta memiliki hasil (dalam
suatu type tertentu pula)
• Fungsi harus didefinisikan terlebih dahulu supaya
dapat digunakan dalam bagian ALGORITMA program
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 14
Tahapan Memanfaatkan Fungsi
1. Mendefinisikan fungsi
– Memberikan nama
– Mendefinisikan parameter formal (parameter input)
– Mendefinisikan type hasil
2. Merealisasikan fungsi
– Membuat algoritma fungsi: memroses input hasil
3. Menggunakan fungsi dalam program utama
– Memanggil fungsi dengan menggunakan parameter aktual
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 15
Contoh Fungsi
• Fungsi bernama f(x) memiliki satu parameter x
didefinisikan sebagai f(x) = x2 + 3x -5
– jika diberi harga x = 4 maka f(x) akan menghasilkan 23
– jika diberi harga x = 1 maka f(x) akan menghasilkan -1
• Fungsi f(x,y) memiliki dua parameter x dan y,
didefinisikan sebagai f(x,y) = x2 + 3xy – 5y – 1
– jika diberi harga x = 0 dan y = 0 maka f(x,y) akan
menghasilkan -1
– jika diberi harga x = 1 dan y = 0 maka f(x,y) akan
menghasilkan 0
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 16
Mendefinisikan fungsi (1)
List parameter input /
Parameter input boleh
parameter formal
ada, boleh kosong
type_hasil nama_fungsi ( [type_parameter1 nm_parameter1,
type_parameter2 nm_parameter2,
...
type_parametern nm_parametern]);
//Jelaskan spesifikasi fungsi
int fxkuadrat (int x);
//Menghasilkan x * x + 3 * x - 5
Nama fungsi : fxkuadrat
Parameter masukan : 1 buah, yaitu x dengan type int
Hasil : bertype int
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 17
Mendefinisikan Fungsi (2)
• Parameter input boleh tidak ada (kosong)
– Fungsi tidak membutuhkan apa-apa dari pemakainya
untuk menghasilkan harga
• Jika list parameter input (parameter FORMAL) ada
(tidak kosong, minimal satu nama), maka merupakan
satu atau beberapa nama beserta type-nya
• Fungsi harus menghasilkan suatu harga
– Harga yang dihasilkan oleh fungsi harus memiliki suatu
type tertentu
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 18
Merealisasikan Fungsi
type-hasil nama_fungsi ( [type-parameter1 nm-parameter1,
type-parameter2 nm-parameter2,
...
type-parametern nm-parametern] );
// Jelaskan spesifikasi fungsi
{
// KAMUS LOKAL
// Deklarasikan semua NAMA yang dipakai dalam algoritma
// fungsi
// ALGORITMA
// Deretan teks algoritma :
// pemberian harga, analisa kasus, pengulangan, dll.
// Pengiriman harga di akhir fungsi, harus sesuai dengan
// type hasil, caranya adalah:
return (hasil);
} 30/09/2013 KU1072/Pengenalan Teknologi Informasi B 19
Contoh Realisasi Fungsi
int fxkuadrat (int x)
//Menghasilkan x * x + 3 * x – 5
{
//KAMUS LOKAL
//tidak ada nama lokal yang perlu dideklarasikan
//ALGORITMA
return (x * x + 3 * x - 5);
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 20
Contoh Realisasi Fungsi - Alternatif
int fxkuadrat (int x)
//Menghasilkan x * x + 3 * x – 5
{
//KAMUS LOKAL Variable hasil hanya dikenal di
int hasil; dalam fungsi fxkuadrat, tidak
di bagian program yang lain
//ALGORITMA
hasil = x * x + 3 * x – 5;
return (hasil);
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 21
Kode fungsi dalam program
//Judul dan spesifikasi program
#include <iostream>
using namespace std;
DEKLARASI FUNGSI
// PROGRAM UTAMA
int main () {
PEMAKAIAN FUNGSI
return 0;
}
Dalam REALISASI FUNGSI
REALISASI FUNGSI bisa terdapat pemakaian
fungsi lan
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 22
//Judul dan spesifikasi program
#include <iostream>
using namespace std;
// DEKLARASI FUNGSI
CONTOH
int fxkuadrat (int x);
//Menghasilkan x * x + 3 * x - 5
OUTPUT:
// PROGRAM UTAMA 13 45 125
int main () {
// KAMUS
int x, p, hasil;
// ALGORITMA
x = 3;
hasil = fxkuadrat(x);
p = 10 + fxkuadrat(5);
cout << hasil << " " << p << " " << fxkuadrat(10) << endl;
return 0;
}
//REALISASI FUNGSI
int fxkuadrat (int x)
//Menghasilkan x * x + 3 * x – 5
{ //KAMUS LOKAL
//ALGORITMA
return (x * x + 3 * x - 5);
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 23
}
//Judul dan spesifikasi program
#include <iostream> Fungsi selalu dipanggil pada
using namespace std; ruas kanan dari suatu
// DEKLARASI FUNGSI ekspresi
int fxkuadrat (int x);
//Menghasilkan x * x + 3 * x - 5
Semua nilai (termasuk variable) yang
// int
PROGRAM
mainUTAMA
() { digunakan dlam pemanggilan fungsi
int main () {
// KAMUS disebut sebagai parameter AKTUAL
// KAMUS
int x, p, hasil;
int x, p, hasil;
// // ALGORITMA
ALGORITMA
x =x 3;= 3;
hasil
hasil = fxkuadrat(x);
= fxkuadrat(x);
p =p 10= +10fxkuadrat(5);
+ fxkuadrat(hasil);
cout << hasil
cout << p <<
<< hasil << fxkuadrat(10)
p << fxkuadrat(10) << endl; << endl;
return 0;
}
return 0;
}
//REALISASI FUNGSI
int fxkuadrat (int x) Pemanggilan fungsi dapat menjadi
//Menghasilkan x * x + 3 * x – 5 bagian dari ekspresi dengan hasil
{ //KAMUS LOKAL yang harus sesuai dengan type hasil
//ALGORITMA fungsi
return (x * x + 3 * x - 5);
} 30/09/2013 KU1072/Pengenalan Teknologi Informasi B 24
Pemanggilan Fungsi
• Fungsi hanya dapat dipakai sebagai bagian ekspresi bukan
merupakan suatu instruksi yang dipanggil independen
• Dalam ekspresi, fungsi hanya dapat diletakkan di ruas kanan
• Saat pemanggilan terjadi korespondensi antara parameter
input (formal) dengan parameter aktual sesuai dengan urutan
penulisan dalam list-nama parameter input
• List parameter aktual harus sama jumlah, urutan, dan type-
nya dengan list parameter input pada pendefinisian fungsinya
• Harga yang dihasilkan oleh fungsi dapat didefinisikan
domainnya dengan lebih rinci
• Pada akhir dari eksekusi fungsi, harga yang dihasilkan oleh
fungsi dikirimkan ke pemakainya
• Fungsi boleh dipakai oleh program utama, prosedur, atau
fungsi lain
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 25
Contoh 1: Fungsi Konversi
• Persoalan:
– Tuliskanlah sebuah fungsi, yang mengkonversikan harga
karakter angka (nol sampai dengan 9) menjadi harga
numerik sesuai dengan karakter yang tertulis. Contoh :
• '0' → 0
• '8' → 8
– Berikan contoh pemakaian
• Spesifikasi :
– Fungsi KarakterToInteger :
– Domain : x : character ['0'..'9'] )
– Range : integer [0..9]
– Proses : analisis kasus terhadap x, untuk setiap harga x
diasosiasikan integer yang sesuai.
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 26
int KarakterToInteger (char x) {
// diberikan x berupa karakter, menghasilkan harga integer yang
// sesuai dengan penulisan pada karakter
//Algoritma
switch(x) {
case '0' : return 0;
case '1' : return 1;
case '2' : return 2;
case '3' : return 3;
case '4' : return 4;
case '5' : return 5;
case '6' : return 6;
case '7' : return 7;
case '8' : return 8;
case '9' : return 9;
}
}
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 27
#include <iostream>
using namespace std;
int KarakterToInteger (char x);
// diberikan x berupa karakter, menghasilkan harga integer yang
// sesuai dengan penulisan pada karakter
int main () {
//KAMUS
char x;
int y;
//ALGORITMA
cin >> x;
y = KarakterToInteger(x);
cout << y+1 << endl;
return 0;
}
// Realisasi KarakterToInteger
...
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 28
Contoh 2: MAX2 dan MAX3
• Tuliskan fungsi MAX2, yang menerima masukan dua
buah bilangan integer dan menghasilkan bilangan
terbesar
– Contoh: MAX2(1,2) 2
• Tuliskan fungsi MAX3 yang memanfaatkan fungsi
MAX2. Fungsi MAX3 menerima input 3 bilangan
integer dan menghasilkan bilangan terbesar
– Contoh: MAX3(10,2,3) 10
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 29
int Max2 (int a1, int b1) {
// diberikan a1 dan b1, menghasilkan a1 jika a1 >= b1,
// dan b1 jika b1 > a1
//Algoritma
if (a1 >= b1) {
return a1;
} else { // a1 < b1
return b1;
}
}
int Max3 (int a, int b, int c) {
// diberikan a, b, dan c, menghasilkan a jika a>=b dan a>=c,
// menghasilkan b jika b>=a dan b>=c, menghasilkan c jika c>=a dan
// c>=b
//Algoritma
return Max2(Max2(a,b),c);
}
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 30
PROSEDUR
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 31
Prosedur vs. Fungsi
Menghitung Tegangan (V) dengan rumus R * A
int HITUNG_V (int R1, int A1) {
FUNGSI
// menghasilkan tegangan sebagai hasil kali R dan A
// Algoritma
return (R1 * A1);
}
void HITUNG_V (int R1, int A1, int * V1) {
// Prosedur untuk memproses tahanan & arus menjadi tegangan
// I.S: R1 dan A1 telah terdefinisi
// F.S: V1 terdefinisi dengan rumus V1=R1*A1
// Algoritma
*V1 = R1 * A1; PROSEDUR
}
AP/KU1071 32
Definisi Prosedur
• Prosedur adalah sederetan instruksi algoritmik yang
diberi nama, dan akan menghasilkan efek netto yang
terdefinisi
• Mendefinisikan prosedur berarti:
– menentukan nama prosedur serta parameternya (jika ada)
– Mendefinisikan keadaan awal (initial state/IS) dan
keadaan akhir (final state/FS)
• Cara penulisan spesifikasi
– prosedur diberi nama dan
– parameter formal (jika ada), yang diberi nama dan
dijelaskan typenya
AP/KU1071 33
Tahapan Memanfaatkan Prosedur
1. Mendefinisikan prosedur
– Memberikan nama
– Mendefinisikan parameter formal (parameter input,
output, input/output)
– Mendefinisikan initial state (I.S.) dan final state (F.S.)
2. Merealisasikan prosedur
– Membuat algoritma prosedur memroses agar I.S. dapat
berubah menjadi F.S.
3. Menggunakan prosedur dalam program utama
– Memanggil prosedur dengan menggunakan parameter
aktual
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 34
Mendefinisikan Prosedur (1)
Pada dasarnya adalah
fungsi yang menghasilkan parameter formal
void
void nama_procedure ( [type_parameter1 nm_parameter1,
type_parameter2 nm_parameter2,
...
type_parametern nm_parametern]);
//Jelaskan spesifikasi prosedur
CONTOH DEFINISI
void HITUNG_V (int R1, int A1, int * V1);
// Prosedur untuk memproses tahanan & arus menjadi
// tegangan
// I.S: R1 dan A1 telah terdefinisi
// F.S: V1 terdefinisi dengan rumus V1=R1*A1
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 35
Merealisasikan Prosedur
void nama_prosedur ( [type-parameter1 nm-parameter1,
type-parameter2 nm-parameter2,
...
type-parametern nm-parametern] );
// Jelaskan spesifikasi prosedur
{
// KAMUS LOKAL
// Deklarasikan semua NAMA yang dipakai dalam algoritma
// prosedur
// ALGORITMA
// deretan instruksi pemberian harga, input, output,
// analisa kasus, pengulangan, pemanggilan fungsi dan
// prosedur
TIDAK ADA RETURN DALAM PROSEDUR
}
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 36
Contoh Realisasi Prosedur
void HITUNG_V (int R1, int A1, int * V1) {
// Prosedur untuk memproses tahanan & arus menjadi tegangan
// I.S: R1 dan A1 telah terdefinisi
// F.S: V1 terdefinisi dengan rumus V1=R1*A1
// Algoritma
*V1 = R1 * A1;
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 37
Pemanggilan Prosedur
• Sebuah prosedur yang terdefinisi “disimpan” di
tempat lain, dan ketika “dipanggil” dengan
menyebutkan namanya “seakan-akan” teks yang
tersimpan di tempat lain itu menggantikan teks
pemanggilan
• Dengan konsep ini, maka I.S. dan F.S. dari
prosedurlah yang menjamin bahwa eksekusi program
akan menghasilkan efek netto yang diharapkan
AP/KU1071 38
Kode prosedur dalam program
//Judul dan spesifikasi program
#include <iostream>
using namespace std;
DEKLARASI PROSEDUR
// PROGRAM UTAMA
int main () {
PEMAKAIAN PROSEDUR
return 0;
}
REALISASI PROSEDUR
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 39
//Judul dan spesifikasi program
#include <iostream>
using namespace std;
// DEKLARASI PROSEDUR
CONTOH
void HITUNG_V (int R1, int A1, int * V1);
// Prosedur untuk memproses tahanan & arus menjadi tegangan
// I.S: R1 dan A1 telah terdefinisi
// F.S: V1 terdefinisi dengan rumus V1=R1*A1
// PROGRAM UTAMA
int main () {
// KAMUS
int r, a, vhasil;
// ALGORITMA
cin >> r; cin >> a;
HITUNG_V(r, a, &vhasil);
cout << vhasil << endl;
return 0;
}
// REALISASI PROSEDUR
void HITUNG_V (int R1, int A1, int * V1) {
// Algoritma
*V1 = R1 * A1;
} 30/09/2013 KU1072/Pengenalan Teknologi Informasi B 40
//Judul dan spesifikasi program
#include <iostream>
using namespace std;
// DEKLARASI PROSEDUR Semua nilai (termasuk variable) yang
void HITUNG_V (int R1, int A1, int * V1); digunakan dlam pemanggilan fungsi
// Prosedur untuk memproses tahanan & arus menjadi
disebut sebagaitegangan
parameter AKTUAL
// I.S: R1 dan A1 telah terdefinisi
// F.S: V1 terdefinisi dengan rumus V1=R1*A1
// PROGRAM UTAMA
int main()(){ {
int main
// KAMUS
// KAMUS Prosedur selalu dipanggil
int sebagai sebuah instruksi
int r,
r,a,a,vhasil;
vhasil;
// ALGORITMA tersendiri
// ALGORITMA
cin >> r; cin >> a;
cin >> r; a,
HITUNG_V(r, cin >> a;
&vhasil);
HITUNG_V(r,
cout << vhasil a,
<< &vhasil);
endl;
cout
return<<0; vhasil << endl;
} return 0;
//
} REALISASI PROSEDUR
void HITUNG_V (int R1, int A1, int * V1) {
// Algoritma
*V1 = R1 * A1;
} 30/09/2013 KU1072/Pengenalan Teknologi Informasi B 41
Parameter Formal
• Nama parameter yang dituliskan pada Daftar
definisi/spesifikasi prosedur parameter
formal
void HITUNG_V (int R1, int A1, int * V1);
// Prosedur untuk memproses tahanan & arus menjadi
// tegangan
// I.S: R1 dan A1 telah terdefinisi
// F.S: V1 terdefinisi dengan rumus V1=R1*A1
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 42
Parameter formal
• Jenis-jenis parameter formal:
– Parameter Input: parameter yang diperlukan prosedur
sebagai masukan untuk melakukan aksi yang efektif
passing parameter by value
– Parameter Output: parameter yang nilainya akan
dihasilkan oleh prosedur passing parameter by
reference
– Parameter Input/Output: parameter yang nilainya
diperlukan prosedur sebagai masukan untuk melakukan
aksi, dan pada akhir prosedur akan dihasilkan nilai yang
baru passing parameter by reference
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 43
Parameter Aktual
• Parameter Aktual: nama-nama informasi yang
dipakai ketika prosedur itu dipakai (“dipanggil”).
• Parameter aktual dapat berupa nama atau harga, tetapi
harus berupa nama jika parameter tersebut adalah
parameter output (karena hasilnya akan disimpan dalam
nama tersebut)
• Pada saat pemanggilan prosedur terjadi asosiasi antara
parameter formal dengan parameter aktual
• Asosiasi dilakukan dengan cara “by position”, urutan
nama parameter aktual akan diasosiasikan sesuai dengan
urutan parameter formal. Karena itu, type harus
kompatibel.
AP/KU1071 44
Parameter input
Passing parameter by value
R1 dan A1 adalah Nilai R1 dan A1
parameter input; di- sebelum dan sesudah
pass by value prosedur dijalankan
adalah tetap
void HITUNG_V (int R1, int A1, int * V1) {
// Prosedur untuk memproses tahanan & arus menjadi tegangan
// I.S: R1 dan A1 telah terdefinisi
// F.S: V1 terdefinisi dengan rumus V1=R1*A1
// Algoritma
*V1 = R1 * A1;
Penanda parameter yang di-pass by
} value: antara type dan nama parameter
tidak ada simbol yang lain
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 45
Parameter input
Passing parameter by value
• Parameter yang di-pass by value:
– Parameter formal: antara type dan nama parameter diberi
tidak ada simbol apa pun
– Parameter aktual:
• Harus sudah terdefinisi nilainya, sebelum dipanggil dengan
prosedur
• Nilainya tidak berubah sebelum dan sesudah digunakan dalam
prosedur
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 46
//Judul dan spesifikasi program
#include <iostream> CONTOH
using namespace std;
// DEKLARASI PROSEDUR
void HITUNG_V (int R1, int A1, int * V1);
// ...
Nilai r dan a sebelum dan
// PROGRAM UTAMA sesudah pemanggilan
int main () { prosedur adalah sama
// KAMUS
int r, a, vhasil;
// ALGORITMA
cin >> r; cin >> a;
cout << r << “ “ << a << endl; // 1. sebelum pemanggilan
HITUNG_V(r, a, &vhasil);
cout << r << “ “ << a << endl; // 2. sesudah pemanggilan
cout << hasil << endl;
return 0;
}
// REALISASI PROSEDUR
void HITUNG_V (int R1, int A1, int * V1) {
...
}
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 47
Parameter output atau input/output
Passing parameter by reference
V1 adalah parameter Nilai V1 sebelum dan
output; di-pass by sesudah prosedur
reference dijalankan dapat
berubah
void HITUNG_V (int R1, int A1, int * V1) {
// Prosedur untuk memproses tahanan & arus menjadi tegangan
// I.S: R1 dan A1 telah terdefinisi
// F.S: V1 terdefinisi dengan rumus V1=R1*A1
// Algoritma
*V1 = R1 * A1; Penanda parameter yang di-pass by
reference: antara type dan nama
} parameter ada simbol asterisk *; dalam
algoritma tetap dipakai
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 48
Parameter output atau input/output
Passing parameter by reference
• Parameter yang di-pass by reference:
– Parameter formal: antara type dan nama parameter diberi
tanda asterisk * digunakan pada algoritma
– Parameter aktual:
• Jika dipakai hanya sebagai output: nilai parameter aktual tidak
harus terdefinisi
• Jika dipakai sebagai input dan sekaligus output: nilai parameter
aktual harus didefinisikan terlebih dahulu
– Pemanggilan parameter aktual : menggunakan tanda &
sebelum nama parameter
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 49
//Judul dan spesifikasi program
#include <iostream> CONTOH
using namespace std;
// DEKLARASI PROSEDUR
void HITUNG_V (int R1, int A1, int * V1);
// ... Sebelum pemanggilan
prosedur, vhasil tidak
// PROGRAM UTAMA terdefinisi. Sesudah
int main () { pemanggilan prosedur,
// KAMUS vhasil terdefinisi nilainya.
int r, a, vhasil;
// ALGORITMA
cin >> r; cin >> a;
// cout << vhasil << endl; // 1. sebelum pemanggilan, illegal!!
HITUNG_V(r, a, &vhasil);
cout << hasil << endl; // 2. sesudah pemanggilan
return 0;
}
// REALISASI PROSEDUR
void HITUNG_V (int R1, int A1, int * V1) {
...
} 30/09/2013 KU1072/Pengenalan Teknologi Informasi B 50
Contoh 1: Hello, X
• Buatlah sebuah prosedur yang menerima sebuah
string, misalnya str, dan menghasilkan tampilan:
Hello, str
• Buatlah contoh pemakaiannya di program utama
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 51
#include <iostream>
using namespace std;
void CetakHello(string s) { void CetakHello(string s);
//Menerima s dan ...
//mencetak "Hello, s" ke layar
//I.S.: s terdefinisi int main() {
//F.S.: tercetak "Hello, s" di string str1, str2, str3;
//layar
str1 = "Maya";
//Algoritma CetakHello(str1);
cout << "Hello " << s << endl; CetakHello("Joko");
} cin >> str3;
CetakHello(str3);
return 0;
}
//Realisasi Prosedur
void CetakHello(string s) {
...
s adalah parameter input, passed by value }
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 52
Contoh 2: Prosedur TUKAR
Buatlah prosedur untuk menukar dua harga yang
disimpan dalam dua nama a dan b
Initial State (I.S.) :
diberikan nilai integer a = A dan b = B
Final State (F.S.) :
a = B dan b = A
AP/KU1071 53
void Tukar(int * a, int * b) {
//I.S.: a, b terdefinisi a dan b adalah contoh
//F.S.: nilai a dan b ditukar parameter input / output; di-
pass by reference
//Kamus Lokal Nilai a dan b harus terdefinisi
int temp; terlebih dahulu, tetapi diubah
dalam program
//Algoritma
temp = *a;
*a = *b;
*b = temp; Contoh pemakaian nama-
} nama secara lokal
temp hanya dikenal di
prosedur Tukar
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 54
Contoh 3: Putar 3 Bilangan
• Dengan memanfaatkan prosedur Tukar di contoh 2,
buatlah sebuah program utama yang digunakan
untuk memutar 3 buah bilangan, misalnya A=a, B=b,
C=c sehingga A=c, B=a, C=b
Ketiga bilangan dibaca dari keyboard
• Contoh:
A = 3; B = 2; C = 1
ditukar menjadi :
A = 1; B = 3; C = 2
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 55
#include <iostream>
using namespace std;
void Tukar(int * a, int * b);
...
int main () {
//Kamus
int a1, b1, c1;
//Algoritma
cin >> a1 >> b1 >> c1;
cout << "Sebelum ditukar : " << endl;
cout << "a = " << a1 << "; b = " << b1 << "; c = " << c1 << endl;
Tukar(&a1, &b1);
Tukar(&a1, &c1);
cout << "Sesudah ditukar : " << endl;
cout << "a = " << a1 << "; b = " << b1 << "; c = " << c1 << endl;
return 0;
}
// Realisasi Prosedur ...
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 56
LATIHAN SOAL
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 57
Soal-1a:
int CiriBilangan(int bil) {
• Diketahui fungsi // Menghasilkan:
// 0 : jika bil adalah 0
CiriBilangan seperti di // 1 : jika bil adalah positif
// -1 : jika bil adalah negatif
samping: //Kamus Lokal
int hasil;
//Algoritma
if (a == 0) {
hasil = 0;
} else if (bil > 0) {
hasil = 1;
} else { // bil < 0
hasil = -1;
}
return hasil;
}
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 58
Soal-1b:
• Apakah hasil dari potongan program berikut?
int X = 0;
cout << CiriBilangan(X) << endl; 0
cout << CiriBilangan(1000) << endl;
1
int bil, c;
bil = -222;
c = CiriBilangan(bil); -1
cout << c << endl;
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 59
Soal 2
• Buatlah sebuah fungsi yang digunakan untuk
menerima sebuah bilangan riil (float) yang
merupakan jari-jari sebuah lingkaran dan
menghasilkan luas lingkaran berdasarkan jari-jari
tersebut
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 60
Alternatif Solusi Soal-2:
float LuasLingkaran (float r) {
// Menghasilkan luas lingkaran berdasarkan r (radius)
//Kamus Lokal
const float PI = 3.14;
Konstanta PI hanya dikenal di
//Algoritma dalam prosedur LuasLingkaran
return PI * r * r;
}
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 61
Soal-3
• Bagaimana jika Anda harus membuat 2 buah fungsi
dari masukan jari-jari:
– Menghitung keliling lingkaran
– Menghitung luas lingkaran
• Bagaimana agar konstanta PI tidak perlu didefinisikan
berulang-ulang di setiap fungsi?
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 62
#include <iostream>
using namespace std; Konstanta dideklarasikan global,
sehingga bisa digunakan oleh blok
//Konstanta Global program manapun termasuk
const float PI = 3.14; fungsi/prosedur
//Spesifikasi Fungsi dan Prosedur
float KelLingkaran(float r); //Menghitung keliling lingkaran
float LuasLingkaran(float r); //Menghitung luas lingkaran
//PROGRAM UTAMA
int main () {
//Kamus
...
//Algoritma
...
return 0;
}
// Realisasi Fungsi dan Prosedur
float KelLingkaran(float r) { ... }
float LuasLingkaran(float r) { ... }
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 63
Soal-4
• Implementasikan sebuah prosedur yang digunakan
untuk:
– Membaca sejumlah N bilangan integer dari keyboard N
merupakan parameter input untuk prosedur diasumsikan N > 0
– Menghasilkan penjumlahan seluruh bilangan yang dimasukkan
menjadi parameter output
• Definisi dari prosedur tersebut adalah sebagai berikut:
void BacaDanJumlahBil (int N, int * Sum);
// Membaca N bilangan integer dari keyboard dan menghasilkan
// Sum yang merupakan jumlah dari seluruh bilangan yang
// dimasukkan
// I.S. : N terdefinisi, N > 0
// F.S. : Sum merupakan jumlah N bilangan
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 64
Alternatif Solusi Soal 4
void BacaDanJumlahBil (int N, int * Sum) {
// Membaca N bilangan integer dari keyboard dan menghasilkan Sum
// yang merupakan jumlah dari seluruh bilangan yang dimasukkan
// I.S. : N terdefinisi, N > 0
// F.S. : Sum merupakan jumlah N bilangan
// KAMUS LOKAL
int x, i;
// ALGORITMA
*Sum = 0;
for (i = 1; i <= N; i++) {
cin >> x;
*Sum = *Sum + x;
}
}
30/09/2013 KU1072/Pengenalan Teknologi Informasi B 65