Upload presentasi
Presentasi sedang didownload. Silahkan tunggu
1
CS1023 Pemrograman Komputer
Lecture 15 Mesin Abstrak [1]
2
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.
3
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
4
Mesin Abstrak Sebenarnya, bahasa tingkat tinggi adalah "mesin abstrak" bagi assembler, dan lebih abstrak bagi mesin riil yaitu komputer.
5
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
6
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)
7
Mesin Karakter Lampu EOP menyala jika CC = ‘.’
Tombol START dan ADV digunakan untuk mengubah state mesin Mesin hanya dapat dioperasikan jika EOP tidak menyala
8
Mesin Karakter
9
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) }
10
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) }
11
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
12
MESIN INTEGER (PENCACAH)
Ilustrasi Setelah Tombol Reset ditekan Setelah 5 kali menekan tombol INC
13
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 }
14
Primitif untuk mengubah keadaan mesin
procedure INC {Pencacah dimajukan satu I.S. : CI = Harga F.S : CI = Harga+ 1 }
15
STUDI KASUS
16
Studi Kasus [1] Diberikan pita sebagai berikut :
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} I L O V E Y U
17
Studi Kasus [1] ADV;INC {CC=‘V’;CI=4} ADV;INC {CC=‘E’;CI=5}
ADV;INC {CC=‘ ‘;CI=6} ADV;INC {CC=‘Y’;CI=7} ADV;INC {CC=‘O’;CI=8} ADV;INC {CC=‘U’;CI=9} Bagaimana jika urutan penekanan tombol dirubah menjadi INC dulu, baru ADV ?
18
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.
19
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}
20
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}
21
{SKEMA PEMROSESAN dengan penanganan kasus kosong} Kamus : Algoritma :
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}
22
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.
23
Studi Kasus [3] Program FREKA-1
{SKEMA PEMROSESAN DENGAN MARK, tanpa penanganan kasus kosong} Kamus : Algoritma : CPT_KAR ← 0 {Inisialisasi} CPTA ← {Inisialisasi} START {First_Elmt}
24
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’)
25
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.
26
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’)
27
else {CC ≠ ‘.’) CPT_KAR ← 0 {Inisialisasi} CPTA ← {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)
28
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
Presentasi serupa
© 2024 SlidePlayer.info Inc.
All rights reserved.