Anda di halaman 1dari 28

CS1023 Pemrograman Komputer

Lecture 15 Mesin Abstrak [1]

Mesin Abstrak
Mesin : mekanisme yang terdefinisi dan mengerti serta mampu untuk mengeksekusi aksi-aksi primitif yang terdefinisi untuk mesin tersebut Mesin Abstrak : mesin yang dianggap ada, dan diasumsikan mampu melakukan mekanisme yang didefinisikan untuk mesin tersebut.

Mesin Abstrak
Dalam pemrograman, seringkali pemrogram harus mendefinisikan mesin-mesin abstrak sebelum menuliskan kode program karena mesin abstrak memungkinkan pemrogram untuk melakukan pemecahan masalah secara bertahap. Mendefinisikan mesin abstrak berarti mendefinisikan: sekumpulan state yang mungkin sekumpulan aksi primitif

Mesin Abstrak

Sebenarnya, bahasa tingkat tinggi adalah "mesin abstrak" bagi assembler, dan lebih abstrak bagi mesin riil yaitu komputer.

Mesin Abstrak
Macam mesin abstrak :
mesin gambar mesin karakter mesin integer mesin rekam

Dalam kuliah ini akan dibahas mesin karakter Selain mesin karakter akan dibahas pula mesin couple dan mesin kata, yang juga merupakan mesin abstrak yang memanfaatkan primitif-primitif dari mesin karakter

Mesin Karakter
Mesin karakter adalah mesin abstrak yang terdiri dari:
Pita berisi deret karakter, yang diakhiri dengan . (titik), pita yang hanya berisi . disebut sebagai pita kosong Tombol START, ADV Sebuah lampu EOP (End Of Pita) Jendela yang ukurannya sebesar satu karakter. karakter yang sedang pada jendela dinamakan CC (Current Character)

Mesin Karakter
Lampu EOP menyala jika CC = . Tombol START dan ADV digunakan untuk mengubah state mesin Mesin hanya dapat dioperasikan jika EOP tidak menyala

Mesin Karakter

PRIMITIF UNTUK MENGUBAH POSISI PITA


Procedure START {Mesin siap dioperasikan. Pita disiapkan untuk dibaca. Karakter pertama yang ada pada pita posisinya adalah pada jendela I.S. : Sembarang F.S. : CC adalah karakter pertama pada pita, Jika CC . maka EOP akan padam (false) Jika CC = . maka EOP akan menyala (true) }

PRIMITIF UNTUK MENGUBAH POSISI PITA


Procedure ADV {Pita dimajukan satu karakter I.S. : karakter pada jendela = CC, CC . F.S. : CC adalah karakter berikutnya dari CC yang lama, CC mungkin = . jika CC = . maka EOP akan menyala (true) }

MESIN INTEGER (PENCACAH)


Mesin integer adalah mesin abstrak yang terdiri dari : tombol RESET dan INC. Seperti halnya mesin karakter, mesin ini sebuah jendela yang menunjukkan sebuah angka integer yang diingatnya, yang disebut CI (Current Integer) Mesin ini berfungsi sebagai pencacah bilangan integer

MESIN INTEGER (PENCACAH)


Ilustrasi

Setelah Tombol Reset ditekan

Setelah 5 kali menekan tombol INC

Primitif untuk mengubah keadaan mesin


procedure RESET {Pencacah disiapkan untuk dipakai, Harga bilangan bulat yang disimpan adalah Nol I.S. : sembarang F.S : CI = 0 }

Primitif untuk mengubah keadaan mesin


procedure INC {Pencacah dimajukan satu I.S. : CI = Harga F.S : CI = Harga+ 1 }

STUDI KASUS

Studi Kasus [1]


Diberikan pita sebagai berikut :
I L O V E Y O U

Deretan aksi (penekanan tombol) pada mesin karakter dan mesin integer untuk menghitung banyaknya huruf pada pita : START;RESET {CC=I;CI=0} ADV;INC {CC= ;CI=1} ADV;INC {CC=L;CI=2} ADV;INC {CC=O;CI=3}

Studi Kasus [1]


ADV;INC ADV;INC ADV;INC ADV;INC ADV;INC ADV;INC {CC=V;CI=4} {CC=E;CI=5} {CC= ;CI=6} {CC=Y;CI=7} {CC=O;CI=8} {CC=U;CI=9}

Bagaimana jika urutan penekanan tombol dirubah menjadi INC dulu, baru ADV ?

Studi Kasus [2]


Count Huruf Diberikan sebuah mesin karakter dengan pita berisi karakter (mungkin kosong). Buatlah algoritma untuk menghitung banyaknya huruf yang ada pada pita tersebut dengan mesin integer. Banyaknya karakter pada pita kosong adalah nol.

Studi Kasus [2]


Program COUNTHURUF {SKEMA PEMROSESAN DENGAN MARK}

Kamus :
Algoritma : RESET {Inisialisasi, CI = 0} START {First_Elmt} while (CC .} do {not EOP} INC {Proses : CI=CI+1} ADV {Next_Elmt} {CC = .} Output (CI) {Terminasi}

Program COUNT_A {SKEMA PEMROSESAN DENGAN MARK : Menghitung banyaknya huruf A pada pita karakter} Kamus : Algoritma : RESET {Inisialisasi, CI = 0} START {First_Elmt} while (CC .} do {not EOP} depend on CC {Proses} CC = A : INC CC A : ADV {Next_Elmt} {CC = .} Output (CI) {Terminasi}

Program COUNT_A-2 {SKEMA PEMROSESAN dengan penanganan kasus kosong}

Kamus :
Algoritma :
START {First_Elmt} depend on CC CC = . : Output (Pita kosong} CC . : RESET {Inisialisasi, CI = 0} repeat depend on CC {Proses} CC = A : INC CC A : ADV {Next_Elmt} until CC =. Output (CI) {Terminasi}

Studi Kasus [3]


Frekuensi Huruf A Diberikan sebuah mesin karakter dengan pita berisi karakter (mungkin kosong). Buatlah algoritma untuk menghitung frekuensi relatif huruf A yang ada pada pita tersebut. Frekuensi relatif huruf A dibandingkan banyaknya seluruh karakter yang ada pada pita karakter.

Studi Kasus [3]


Program FREKA-1 {SKEMA PEMROSESAN DENGAN MARK, tanpa penanganan kasus kosong} Kamus : Algoritma : CPT_KAR 0 {Inisialisasi} CPTA 0 {Inisialisasi} START {First_Elmt}

while (CC .) do CPT_KAR CPT_KAR + 1 depend on CC CC = A : CPTA CPTA + 1 CC A : ADV {Next_Elmt} {CC = . : semua karakter pada pita sudah dibaca, mungkin CPT_KAR = 0} {Terminasi} depend on CPT_KAR CPT_KAR 0 : Output (CPT_A/CPT_KAR) CPT_KAR = 0 : Output (Frekuensi tidak terdefinisi)

Studi Kasus [3]


Penjelasan : - Banyaknya karakter A pada pita kosong tdk terdefinisi - Banyaknya karakter pada pita kosong adalah nol - Perhatikan invarian CC,CPTA dan CPT_KAR yang selalu benar - Pembagian dengan nol dihindarkan dengan analisa kasus pita kosong atau tidak pada bagian terminasi - Program benar, tapi pemilihan skema kurang tepat.

Program FREKA-2 {SKEMA PEMROSESAN DENGAN MARK, dengan penanganan kasus kosong Kamus : CPT-KAR : Integer {banyaknya karakter pada pita yang sudah dibaca} CPTA : Integer {banyaknya huruf A yang muncul pada bagian pita yang sudah dibaca} Algoritma : START {First_Elmt} if CC = . then output (Pita kosong)

else

{CC .) CPT_KAR 0 {Inisialisasi} CPTA 0 {Inisialisasi} repeat CPT_KAR CPT_KAR + 1 if (CC = A) then CPTA CPTA + 1 {else (CC .) do nothing} ADV {Next_Elmt} until (CC = .) output (CPTA/CPT_KAR) {Terminasi, CPT_KAR pasti tidak nol)

Studi Kasus [3]


Penjelasan : - Banyaknya karakter A pada pita kosong tidak terdefinisi - Banyaknya karakter pada pita kosong adalah nol - Jika kasus kosong tidak ditangani secara khusus, maka akan terjadi pembagian dengan nol - Pemilihan skema lebih baik dari pada versi pertama

Anda mungkin juga menyukai