program sebagai logika instruksi1

TOPIK 4
PROGRAM SEBAGAI
LOGIKA INSTRUKSI

Instruksi Dasar (1)
 Tiga

jenis instruksi di bawah ini akan
dipakai untuk merencanakan
program kita:
– p*  mencetak satu * dan membuat
kursor maju satu langkah.
– pb  mencetak satu space kosong dan
maju satu langkah.
– NL  return ke baris berikutnya

Instruksi Dasar (2)


Contoh
NL; p*;p*;p*

***
*
*
NL;
p*;p*;p*
(
Program
1)
***
**
**
*** p*;p*;p*
***
***
NL;
(a)



(b)


(c)

****
* *
****

(d)

***
**
*
(e)

Disederhanakan:
*
** p*;p*;p* (Program 2)
NL;
***
Program

2; Program 2; Program 2 (Program
***
3)***
***
***
**

***
**
*

(f)

Prosedur sebagai Instruksi
yang Ditemukan (1)




Kesulitan dalam mengingat urutan sekumpulan

instruksi menghasilkan pemikiran untuk
memberi nama (label) kepada kumpulan
instruksi tersebut. Cara seperti ini disebut
membuat prosedur. Dengan prosedur tidak
perlu lagi menyebutkan sekuens dari kumpulan
instruksi tersebut tetapi cukup dengan
menyebutkan nama (label) prosedurnya saja.
Prosedur adalah suatu program yang digunakan
oleh program lain sama seperti suatu instruksi.

Prosedur sebagai Instruksi
yang Ditemukan (2)
Didefinisikan
Program 4: NL;p*;pb;pb;pb;p*
Program 5: NL; p*;p*;p*;p*;p*
 Bagaimana cara membuat bentuk di bawah
ini?
***** *
*
*

* *
*
*
* *****
*
* *
*
***** *
*


Prosedur sebagai Instruksi
yang Ditemukan (3)
 Jawab:

– Program 6:
Program 5; Program 4; Program 4;
Program 4; Program 5
– Program 7:
Program 4; Program 4; Program 5;

Program 4; Program 4

Prosedur sebagai Instruksi
yang Ditemukan (Latihan 1)
 Buatlah

program untuk mencetak
huruf HELLO dalam posisi vertikal.
Ukuran tiap huruf 5x5.

Notasi Definisi dan
Pemanggilan Prosedur (1)





Suatu prosedur akan selalu dimulai dengan
kata “def” dan berakhir dengan enddef.
Contoh:

def tiga*() = NL;p*;p*;p* enddef
Di sini nama prosedur adalah tiga*. Arti
prosedur diberikan oleh NL;p*;p*;p*. Tanda
() menunjukkan bahwa bilamana prosedur
ini dipanggil, tak ada parameter yang
dibutuhkan untuk mengeksekusinya.

Notasi Definisi dan
Pemanggilan Prosedur (2)


Contoh
– untuk Program 3. dapat ditulis
tiga*();tiga*();tiga*()
(Program 8)
– def H() = t1();t1();t2();t1();t1() enddef
def O() = t2();t1();t1();t1();t2() enddef;
def t1() = NL;p*;pb;pb;pb;p* enddef (Program
9)
def t2() = NL;p*;p*;p*;p*;p* enddef

O(); NL; H() akan menghasilkan huruf O di atas
H.

Definisi dalam Definisi (1)





Suatu prosedur dapat berisi definisi
dari suatu prosedur lain.
Contoh: untuk mencetak pola OH tiga
kali dengan blank memisahkan tiap
pola
Program dapat dibuat dengan:
Program 9;NL;Program 9;NL;Program 9
(Program 10)

Definisi dalam Definisi (2)



Tapi Program 10 belum merupakan suatu program
yang lengkap karena Program 9 belum
didefinisikan.
Program 11:
def polan() =
def H() = t1();t1();t2();t1() enddef
def O() = t2();t1();t1();t2() enddef;
def t1() = NL;p*;pb;pb;pb; p* enddef
def t2() = NL;p*;p*;p*;p*;p* enddef
O(); NL; H()
enddef
polan();NL;polan();NL;polan()

Definisi dalam Definisi (2)


Cara lain:
def H() = t1();t1();t2();t1() enddef
def O() = t2();t1();t1();t2() enddef

def t1() = NL;p*;pb;pb;pb;p* enddef
def t2() = NL;p*;p*;p*;p*;p*
enddef
(Program 12)
def polan()= O(); NL; H() enddef
polan();NL;polan();NL;polan()

Prosedur dengan Parameter
(1)





def p() = p* enddef
p(); p(); p() (Program 13)
Arti dari Program 13 adalah tercetaknya tiga *.
Tetapi dengan nama yang sama dapat
didefinisikan p() sbb:
def p() = NL;p*;p*;p* enddef

p();p();p()
(Program 14)
di mana arti dari Program 14 adalah mencetak
sembilan *.

Prosedur dengan Parameter
(1)


Namun p() dalam Program 13 dan 14 selalu
mempunyai arti yang tetap. Sekali
didefinisikan akan selalu seperti itu. Ini
disebabkan p() tidak mempunyai parameter.
Pemberian parameter memungkinkan
mengubah arti p() setiap saat.
def r3(p) = p();p();p() enddef
def satu() = p* enddef
def dua() = NL enddef
def tiga() = NL; p*;p*;p* enddef
r3(satu); r3(dua); r3(tiga)
(Program 15)

Prosedur dengan Parameter
(2)




Dalam Program 3, urutan instruksi p();p();p() adalah
batang tubuh dari prosedur r3. Setiap prosedur
r3(satu), r3(dua); r3(tiga) meminta eksekusi dari
p();p();p(). Arti p() itu sendiri tergantung pada
parameter yang disuplai.
Sebagai contoh:
instruksi
eksekusi
hasil
r3(satu) satu(), satu(), satu() ***
r3(dua)
dua(), dua(), dua()
r3(tiga) tiga(),tiga(),tiga()
***
***

***

Latihan Soal (2)






Definisikan prosedur x, y, dan z sehingga urutan instruksi
BB; r3(x); BB; r3(y); BB; r3(z) mencetak pola di bawah ini
*
*
*
**
** **
*** *** ***
Definisikan prosedur r4 sehingga bila diberikan definisi x, y,
dan z, urutan instruksi BB; r4(x); BB; r4(y); BB; r4(z) akan
mencetak pola
*
*
*
*
** **
**
**
*** *** *** ***
Kalau r3(satu) seperti yang didefinisikan di atas yaitu
mencetak tiga *. Bila diberikan definisi
def A() = r3(satu); r3(satu); r3(satu) enddef
Berapa * yang dicetak?

Tambahan Instruksi






Instruksi dengan satu argumen karakter: pc(‘ ‘):
print karakter. Akan mencetak karakter yang
diberikan di dalam tanda kurung.
Contoh:
pc(‘*’)  *
pc(‘ ‘)  satu space
pc(‘+’)  +
def tiga(c) = pc(c); pc(c); pc(c) enddef
Maka tiga (‘9’) akan mencetak 999 sebab
parameter c disubstitusi menjadi 9 ke dalam
batang tubuh dari prosedur tiga menjadi urutan
instruksi:
pc(‘9’); pc(‘9’); pc(‘9’)

Tambahan Instruksi (Latihan
3)
 Tulis

definisi dari prosedur segiempat
agar supaya setiap pemanggilan
segiempat(‘*’) akan mencetak suatu
segiempat berukuran 3x3 *, suatu
segiempat(‘+’) akan menghasilkan
segiempat 3x3 +.

Nilai Prosedur yang
Mengambil Argumen (1)






def kedua(x) = x(‘*’); x(‘+’) enddef
Bila diberikan definisi satu() dalam Program
3, maka kedua(satu) tidak akan masuk akal
sebab satu(‘*’) dan satu(‘+’) tidak masuk
akal.
Tetapi kedua(pc) masuk akal dan akan
mencetak * dan +.
Begitu juga dengan kedua(segiempat)
masuk akal dan akan mencetak segiempat *
dan +.

Nilai Prosedur yang
Mengambil Argumen (2)


Jadi dengan melihat pada definisi prosedur
kedua, terlihat bahwa parameter prosedur
ini adalah suatu prosedur. Prosedur yang
disuplai haruslah prosedur yang menerima
karakter sebagai argumennya. Bila
diberikan kedua(r3) di mana r3 telah
didefinisikan, maka tidak masuk akal karena
meskipun r3 menerima suatu argumen, r3
membutuhkan suatu prosedur dan bukan
suatu nilai karakter sebagai argumennya.

Nilai Prosedur yang
Mengambil Argumen (3)
 Diberikan

definisi
def quote(c) = NL; pc(‘’’) pc(c); pc(‘’’)
enddef
def x() = p* enddef
 Prosedur quote adalah suatu
prosedur yang membutuhkan
argumen karakter yang dipakai pada
urutan instruksi ketiga yaitu pc(c)
 c bukan nama prosedur.

Nilai Prosedur yang
Mengambil Argumen (4)
 Mana

yang masuk akal?

– quote(‘x’); masuk akal karena ‘x’ adalah
nilai bukan prosedur.
– quote(‘*’); idem
– quote(‘c’); idem
– quote(c); tidak masuk akal karena c
bukan nilai dan tidak didefinisikan.
– quote(x); tidak masuk akal karena x
adalah prosedur

Prosedur Berparameter
Banyak
def sandwich(selei,roti)=roti();selei();roti()
enddef
 Prosedur membutuhkan dua nilai argumen
yang masing-masing adalah suatu prosedur.
 Bila diberikan definisi sbb:
def pO()=pc(‘O’) enddef
def pX() = pc(‘X’) enddef
maka:
sandwich(pX,pO) mencetak OXO
sandwich(pO,pX) mencetak XOX
sandwich(pO,pO) mencetak OOO


Prosedur Berparameter Banyak
(Latihan 4)


Diberikan definisi
prosedur sandwich:
def sandwich(selei,roti)=roti();selei();roti() enddef

dan prosedur bigmac:
def bigmac(f1,f2,bread)=bread();f1();bread();f2();bread()
enddef


Cari arti dari program di bawah ini:
def a() = pc(‘a’) enddef
def b() = pc(‘b’) enddef
def c() = pc(‘c’) enddef
def satu() = sandwich(a,b) enddef
def dua() = bigmac(c,a,b) enddef
sandwich(satu, dua) (Program 16)

Latihan (5)


Buat programnya dengan sandwich (tengah, luar)
*
**
I
***
*
**
II
***
*
**
I
***

procedure call(x:integer);
begin
if x0 then begin
write(‘*’);
x := x – 1;
call(x);
x := x + 1;
end;
end;
Apakah output dari pemanggilan call(3) ?

procedure lagi(a: integer; b: integer);
var t: integer;
begin
t := (a+b) div 2;
if (a