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
teridentifikasi untuk menyelesaikan masalah.
1. Memahami perlunya analogi dalam mendefinisikan 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 terdefinisi dan mengerti serta
mampu untuk mengeksekusi aksi-aksi primitif yang terdefinisi untuk mesin
tersebut.
Aksi-aksi primitif disini dapat dianalogikan sebagai fungsi dan prosedur
yang terdefinisi 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 terdefinisi dengan baik fungsi-fungsinya
sehingga dapat menghasilkan sesuatu.
Mesin Abstrak
Mesin abstrak adalah mesin yang dianggap ada dan diasumsikan dapat
melakukan mekanisme yang didefinisikan 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 mendefinisikan mesin-mesin abstrak untuk memecahkan masalah secara
bertahap, sehingga pada akhirnya nanti seluruh primitif serta mekanisme
dapat terdefinisi dengan baik. Setelah mesin abstrak ini terdefinisi 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.
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.
Berikut ini adalah algoritma proses penghitungan huruf:
BAHASA C:
Contoh isi pita:
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
teridentifikasi untuk menyelesaikan masalah.
1. Memahami perlunya analogi dalam mendefinisikan 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 terdefinisi dan mengerti serta
mampu untuk mengeksekusi aksi-aksi primitif yang terdefinisi untuk mesin
tersebut.
Aksi-aksi primitif disini dapat dianalogikan sebagai fungsi dan prosedur
yang terdefinisi 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 terdefinisi dengan baik fungsi-fungsinya
sehingga dapat menghasilkan sesuatu.
Mesin Abstrak
Mesin abstrak adalah mesin yang dianggap ada dan diasumsikan dapat
melakukan mekanisme yang didefinisikan 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 mendefinisikan mesin-mesin abstrak untuk memecahkan masalah secara
bertahap, sehingga pada akhirnya nanti seluruh primitif serta mekanisme
dapat terdefinisi dengan baik. Setelah mesin abstrak ini terdefinisi 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.
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.
PROCEDURE RESET
{mengembalikan isi dari
pencacah CI menjadi nol
CI merupakan variabel
global
I.S.: sembarang
F.S.: CI = 0}
BEGIN
CI 0
ENDPROCEDURE
|
PROCEDURE INC
{menambahkan isi variabel
CI dengan satu
I.S.: CI = nilai saat ini
F.S.: CI = CI + 1}
BEGIN
CI CI + 1
ENDPROCEDURE
|
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.
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”
|
”O”
|
”L”
|
“I”
|
“T’
|
“E”
|
“K”
|
“N”
|
“I”
|
“K”
|
“.”
|
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
|
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
START
RESET
WHILE (cc ≠ '.') DO
INC
ADV
ENDWHILE
OUTPUT(CI)
END
|
#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();
}
|
Menghitung Jumlah Kata
Sekilas terbayang menghitung jumlah kata adalah sesuatu yang amat
sulit, padahal jumlah kata tidak lain adalah jumlah spasi ditambah I.
HARI
INI HARI SENIN
|
3
spasi = 4 kata
|
HARI
INI HUJAN TURUN LAGI
|
4
spasi = 5 kata
|
Namun persoalan akan makin rumit bila dimungkinkan antar kata lebih dari 1
spasi. Untuk ini dapat dibuat prosedur mengabaikan spasi yang berlebihan.
Contoh isi pita karakter
” HARI INI HUJAN TURUN LAGI .”
Algoritma berikut prosedurnya sbb:
Algoritma
|
PROCEDURE IGNORE_BLANK
{mengabaikan/membuang
spasi berlebihan}
BEGIN
while (cc==' ') do
ADV
endwhile
ENDPROCEDURE
Algoritma Hitung_Kata
{Menghitung banyaknya kata
dalam pita karakter}
Kamus data
CI : integer, CC : char,
EOP : boolean
BEGIN
RESET
START
WHILE (not EOP) DO
IF CC=' ' THEN
INC
IGNORE_BLANK
ELSE
ADV
ENDIF
ENDWHILE
INC
OUTPUT(CI)
END
|
BAHASA C
|
void IGNORE_BLANK() {
while (cc==' ') {
ADV();
}
}
int main() {
START();
RESET();
IGNORE_BLANK();
while (cc!='.') {
if (cc==' ') {
INC();
IGNORE_BLANK();
}
else {
ADV();
}
}
/* banyak kata = banyak
spasi + 1 */
INC();
printf("Banyak kata =
%d \n",ci);
getche();
}
|
Studi Kasus Mesin Karakter : Palindrom
Palindrom adalah istilah yang digunakan untuk kata atau kalimat yang
apabila dibaca dari depan ke belakang atau sebaliknya, memiliki arti yang sama.
Contoh palindrom:
KATAK
KASUR RUSAK
KASUR NABABAN RUSAK
Untuk memeriksa apakah kata yang dimasukkan merupakan palindrom maka,
dapat dibuat sebuah function yang memiliki tipe data boolean. Function ini akan
mengembalikan nilai TRUE jika kata termasuk palindrom, dan akan
mengembalikan nilai FALSE untuk kondisi
sebaliknya.
sebaliknya.
Algoritma
|
FUNCTION IsPalindrom (kt :
string) ➔ boolean
{akan mengembalikan nilai
TRUE jika k adalah
palindrom}
Kamus data
i,j : integer
temp : string
BEGIN
{mengisi temporer
disingkat temp dengan string
kosong}
temp ⟵ ””
{mengisi j dengan lebar
kata}
j ⟵ length(kt)
WHILE (j>0) DO
{operasi konkatenasi}
temp ⟵ temp + kt[j]
j ⟵ j – 1
ENDWHILE
{membandingkan isi
temporer, dengan kt}
IF temp = kt THEN
return TRUE
ELSE
return FALSE
ENDIF
ENDFUNCTION FUNCTION
IsPalindrom (kt : string) boolean
{akan mengembalikan nilai
TRUE jika k adalah
palindrom}
Kamus data
i,j : integer
temp : string
BEGIN
{mengisi temporer
disingkat temp dengan string
kosong}
temp ⟵ ””
{mengisi j dengan lebar
kata}
j ⟵ length(kt)
WHILE (j>0) DO
{operasi konkatenasi}
temp ⟵ temp + kt[j]
j ⟵ j – 1
ENDWHILE
{membandingkan isi
temporer, dengan kt}
IF temp = kt THEN
return TRUE
ELSE
return FALSE
ENDIF
ENDFUNCTION
|
Bahasa C
|
bool IsPalindrom(char
kt[]){
char ss[]={0,0};
int i,j;
char temp[30];
strcpy(temp,"");
j=strlen(kt)-1;
while (j>=0) {
*ss=kt[j];
strcat(temp,ss);
j=j-1;
}
if (strcmp(temp,kt)==0)
return true;
else {
return false;
}
|