• Tidak ada hasil yang ditemukan

8 Mesin Karakter

Dalam dokumen Kata Pengantar - Algoritma Dan Pemrograman (Halaman 192-200)

Overview

Dalam menyelesaikan masalah yang relatif kompleks perlu dilakukan penggambaran atau analogi dengan suatu hal yang bersifat nyata. Tujuan penggambaran ini agar mempermudah menentukan kebutuhan proses atau mekanisme tertentu, sehingga pada akhirnya seluruh mekanisme dapat teridentifkasi untuk menyelesaikan masalah.

Tujuan

1. Memahami perlunya analogi dalam mendefnisikan suatu permasalahan

2. Mempelajari mekanisme mesin abstrak

3. Mempelajari mekanisme mesin pencacah (mesin integer) 4. Mempelajari mekanisme mesin karakter

5. Mempelajari penggunaan mesin integer dan mesin karakter dalam menyelesaikan suatu kasus

Mesin

Mesin merupakan mekanisme yang terdefnisi dan mengerti serta mampu untuk mengeksekusi aksi-aksi primitif yang terdefnisi untuk mesin tersebut.

Aksi-aksi primitif disini dapat dianalogikan sebagai fungsi dan prosedur yang terdefnisi dari segi input, proses dan output. Sebagai contoh sederhana adalah mesin kendaran bermotor. Pada mesin tersebut terdapat karburator, busi, blok mesin, dan katup mesin sebagai jalur masuk bahan bakar atau sebagai jalur keluar gas sisa pembakaran.

Jika karburator bekerja dengan baik maka, karburator dapat dengan lancar mengalirkan bahan bakar menuju ke blok mesin. Jika katup mesin dapat bekerja dengan baik maka, jalur masuk bahan bakar dan jalur keluar gas sisa pembakaran dapat dialirkan dengan lancar. Jika busi dapat bekerja dengan baik maka, busi dapat menghasilkan percikan api yang berguna untuk meletupkan bahan bakar yang ada dalam blok mesin, sehingga gerigi-gerigi yang ada dalam blok mesin akan bekerja.

Oleh karena itu, sebuah mesin dapat dikatakan sebagai mekanisme karena memiliki primitif-primitif yang terdefnisi dengan baik fungsi-fungsinya sehingga dapat menghasilkan sesuatu.

Mesin Abstrak

Mesin abstrak adalah mesin yang dianggap ada dan diasumsikan dapat melakukan mekanisme yang didefnisikan untuk mesin tersebut. Mesin abstrak ini digunakan untuk memodelkan suatu mekanisme tertentu supaya dapat lebih mudah dipelajari. Dengan menggunakan mesin abstrak, perancang program dapat dengan mudah membuat suatu mekanisme dari mesin yang akan dibuat.

Dalam pemrograman, mesin abstrak ini diciptakan pada tahap konseptual dan belum menjadi sesuatu yang riil. Perancang program seringkali harus mendefnisikan mesin- mesin abstrak untuk memecahkan masalah secara bertahap,

sehingga pada akhirnya nanti seluruh primitif serta mekanisme dapat terdefnisi dengan baik. Setelah mesin abstrak ini terdefnisi dengan baik (termasuk fungsi dan prosedur yang terlibat), barulah kode-kode program dituliskan untuk menerapkan sesuatu yang abstrak menjadi produk yang nyata (riil) yaitu yang disebut sebagai mesin riil.

Dalam buku ini akan dibahas mengenai suatu bentuk mesin yang umum digunakan, yakni mesin integer dan mesin karakter.

Mesin Integer (Pencacah)

Mesin integer merupakan sebuah mesin yang terdiri dari :

1. Satu buah tombol RESET

2. Satu buah tombol INC (singkatan dari increment yang berarti menambahkan)

3. Sebuah jendela yang menunjukkan angka integer yang sedang diingat, oleh karena itu angka yang sedang muncul di jendela disebut sebagai Current Integer (CI). Masing-masing tombol merupakan analogi dari

procedure, jika tombol RESET ditekan artinya procedure

RESET dipanggil, demikian juga untuk tombol INC.

Tombol RESET berguna untuk mengembalikan CI pada angka nol. Sedangkan tombol INC berguna untuk menambahkan angka 1 pada CI, jika CI bernilai 0 maka setelah tombol INC ditekan maka, CI akan bernilai satu. Nilai pada CI akan terus bertambah jika tombol INC selalu ditekan.

Gambar 8.1 Mesin Pencacah

Berikut adalah prosedur untuk kedua tombol tersebut:

Mesin Karakter

Mesin karakter merupakan mesin abstrak yang di dalamnya terdiri dari beberapa komponen, yaitu:

1. Pita yang berisi deretan karakter dan diakhiri dengan tanda titik ’.’. Pita yang hanya berisi tanda titik ’.’ akan disebut sebagai pita kosong. Pita dalam mesin ini sebagai penggambaran dari array dengan tipe data char (karakter). Dalam lingkungan pemrograman dengan bahasa Pascal, tipe data ’string’ dapat diperlakukan sama dengan array dengan tipe data karakter.

2. Dua buah tombol yakni tombol START dan ADV (singkatan dari kata advance yang berarti memajukan) 3. Sebuah lampu EOP (End Of Position). Lampu ini akan

menyala jika tanda titik ’.’ sudah terbaca, artinya sudah berada pada posisi terakhir. Penggambaran lampu menyala adalah kondisi dimana status padaa saat itu bernilai TRUE dan lampu padam adalah FALSE. 4. Sebuah ”jendela” yang ukurannya sebesar satu

karakter saja. Hanya karakter yang sedang berada di jendela disebut sebagai Current Character (CC) dan dapat dibaca sedangkan karakter lain tidak terlihat.

Gambar 8.2 Mesin Karakter

Mesin karakter ini memiliki skenario mekanisme atau cara kerja mesin saat digunakan untuk mengamati suatu pita karakter. Skenarionya adalah sebagai berikut :

A

START ADV

EO

1. Kondisi (state) awal mesin adalah pada jendela akan tampak CC. Jika CC merupakan titik, maka EOP akan menyala yang berarti isi pita adalah kosong. Jika CC tidak sama dengan titik, maka lampu EOP akan padam 2. Tombol ADV digunakan untuk memajukan pita

karakter sebanyak satu karakter. Pada kondisi ini tetap akan diperiksa apakah CC merupakan tanda titik atau bukan.

Berikut adalah procedure untuk tombol START dan ADV: PROCEDURE START

{Mesin siap digunakan. Pita disiapkan untuk dibaca. Karakter pertama pada pita berada di jendela

I.S.: sembarang

F.S.: CC = karakter pertama pada pita Jika CC='.' maka EOP padam (FALSE) Jika CC≠'.' maka EOP menyala (TRUE)} PROCEDURE ADV

{Pita dimajukan satu karakter

I.S.: CC = karakter pada jendela, CC≠'.'

F.S.: CC adalah karakter berikutnya, kemungkinan CC='.' Jika CC='.' Maka EOP menyala (TRUE)} Catatan:

Jika EOP menyala, maka mesin tidak dapat digunakan lagi (sudah sampai akhir pita).

Penggunaan Mesin

Menghitung Jumlah Karakter

Kedua mesin ini (mesin integer dan mesin karakter) dapat digunakan secara bersama-sama untuk menyelesaikan beberapa kasus. Sebagai contoh jika terdapat sebuah pita karakter yang berisi data sebagai berikut:

”P

Jika jumlah karakter dalam pita tersebut akan dihitung, maka dalam pengoperasian kedua mesin ini adalah:

Tombol yang ditekan

CC CI

START, RESET ”P” 0

ADV, INC ”O” 1

ADV, INC ”L” 2

ADV, INC ”I” 3

ADV, INC ”T” 4

ADV, INC ”E” 5

ADV, INC ”K” 6

ADV, INC ”N” 7

ADV, INC ”I” 8

ADV, INC ”K” 9

ADV, INC ”.” 10

Atau dapat juga dilakukan dengan cara menekan tombol INC terlebih dahulu:

Tombol yang ditekan

CC CI

START, RESET ”P” 0

INC, ADV ”O” 1

INC, ADV ”L” 2

INC, ADV ”I” 3

INC, ADV ”T” 4

INC, ADV ”E” 5

INC, ADV ”K” 6

INC, ADV ”N” 7

INC, ADV ”I” 8

INC, ADV ”K” 9

INC, ADV ”.” 10

Berikut ini adalah algoritma proses penghitungan huruf: Algoritma Hitung_Huruf

{Menghitung banyaknya huruf dalam pita karakter} Kamus data

CI : integer, CC : char, EOP : boolean BEGIN

RESET WHILE (cc ≠ '.') DO INC ADV ENDWHILE OUTPUT(CI) END Bahasa C #include <stdio.h> #include <conio.h> #include "mesinkar.inc"

/*Menghitung banyaknya huruf dalam pita karakter*/ void main() { START(); RESET(); while (!EOP) { INC(); ADV(); }

printf("Banyak huruf dalam pita = %d \n",ci); getche();

}

Catatan:

Jika CC=’.’, maka EOP menyala, karena itu CC=’.’ bisa diganti EOP saja dan CC≠’.’ dapat diganti not EOP, demikian juga sebaliknya .

Menghitung Jumlah Karakter Tertentu

Kombinasi penggunaan mesin karakter dan mesin integer dapat juga dimanfaatkan untuk menghitung jumlah karakter tertentu, misalnya untuk menghitung jumlah huruf ’A’ dalam suatu pita karakter.

Cara menangani kasus ini yaitu dengan mengkombinasikannya dengan operasi if..then..else. Jika CC menunjukkan huruf ’A’, maka tombol INC pada mesin integer

akan ditekan, jika bukan huruf ’A’, maka akan memajukan pita karakter menggunakan tombol ADV.

Berikut adalah algoritma dan program untuk menghitung banyaknya huruf ’A’:

Algoritma

Algoritma Hitung_Huruf_A

{Menghitung banyaknya huruf A dalam pita karakter} Kamus data

CI : integer, CC : char, EOP : boolean BEGIN RESET START WHILE (CC≠”.”) DO IF CC = “A” THEN INC ENDIF ADV ENDWHILE OUTPUT(CI) END Bahasa C #include <conio.h> #include <stdio.h> #include "mesinkar.inc"

/*Menghitung banyaknya huruf A dlam pita karakter*/ void main() { START(); RESET(); while (cc!='.') { if (cc=='A') { INC(); } ADV(); }

printf("Banyak huruf A = %d \n",ci); getche();

Dalam dokumen Kata Pengantar - Algoritma Dan Pemrograman (Halaman 192-200)