30 April 2011

Home » » Pascal Gue : Mengecek Kata Palindrom (Mengabaikan karakter non-huruf + incasesensitive)

Pascal Gue : Mengecek Kata Palindrom (Mengabaikan karakter non-huruf + incasesensitive)

Pada postingan kemarin gue udah memaparkan coding dari program Pascal tentang mengecek sebuah string berupa Palindrom atau bukan. Nah, kelemahan dari program kemarin adalah program tersebut case-Sensitive, artinya jika kita mengetikkan MAlam (tulisan alay) maka akan dibaca BUKAN PALINDROM, padahal kata tersebut adalah palindrom karena palindrom tidak mengenal jenis kelamin huruf besar ataupun kecil.

Nah, berhubung gue orangnya baik hati dan tidak sombong serta rajin menabung dan juga tampan, maka gue akan share codingan "versi gue" gimana cara supaya kata yang akan dicek palindrom merupakan incasesensitive PLUS program ini akan mengabaikan karakter non-huruf (Jadi program hanya akan mengecek karakter yang HURUF SAJA). Kenapa gue bilang "versi gue"?? Karena cara untuk mengecek kata palindrom menggunakan bahasa Pascal TIDAK HANYA INI,,, masih banyak janda-janda cara-cara lain yang mungkin lebih baik dan lebih simpel dibandingkan punya gue. But at least, tidak ada salahnya untuk share. :D

Algoritma yang gue gunakan seperti ini :

  1. Inputkan kata.

  2. Hapus karakter non-huruf yang ada pada kata.

  3. Ubah kata menjadi HURUF BESAR SEMUA. Ini penting karena pada bahasa Pascal huruf 'M' dan 'm' itu berbeda. Sehingga untuk membandingkan palindrom kita harus mengkonversi terlebih dahulu menjadi huruf besar semua. Hasil konversi gue simpan pada variabel temp. Sehingga string yang terdapat pada kata tidak berubah (untuk digunakan selanjutnya nanti).

  4. Setelah TEMP menjadi huruf besar semua, variabel yang ada pada TEMP itu dibalik karakter-karakternya. Gue simpan hasil pembalikan tadi pada variabel BK1.

  5. Setelah itu BK1 gue balik kembali. Gue simpan pada variabel BK2.

  6. Selanjutnya tinggal membandingkan antara BK1 dan BK2, jika BK1=BK2 maka katanya PALINDROM, jika tidak maka BUKAN PALINDROM. Simpel kan.

  7. Kan tadi string kata tidak berubah huruf besar/kecil, tetapi hanya dihapus yang non-huruf saja. So, gue balik string kata ini dan gue sebagai hasil. Padahal itu cuman kamuflase belaka. Hahaha.


Oke langsung aja kita ke listing programnya.

Berikut adalah program utama nya :

program palindrom;

uses crt;

var kata,konv,bk1,bk2,hasil,temp:string;
123begin
123clrscr;
123hasil:='';
123write('Masukkan kata yang diinginkan : '); readln(kata);

123// fungsi menghapus selain karakter huruf
123kata:=karakter(kata);
123// fungsi konversi kata menjadi huruf besar semua
123temp:=konversi(kata);
123// membalik kata
123 hasil:=balik(kata);

123// setelah itu kata yang telah dibalik dibandingkan
123bk1:=balik(temp);
123bk2:=balik(bk1);

123writeln('Hasilnya : ',kata);
123if bk1=bk2 then
123123writeln('Katanya palindrom') else
123123writeln('BUKAN PALINDROM');

123readkey;
end.


Nah,, itu untuk program utamanya. Program di atas itu kalo kamu teliti ada fungsi-fungsi untuk menghapus karakter selain huruf , fungsi untuk membalikkan kata, serta fungsi untuk mengkonversi huruf.

Di bawah ini fungsi untuk menghapus karakter selain huruf , cekidot!!

function karakter(kata:string):string;
var i:integer;
begin
123i:=1;
123repeat
123123if NOT ((kata[i]>='a') AND (kata[i]<='z')) OR ((kata[i]>='A') AND (kata[i] <='Z')) then
123123123delete(kata,i,1) else
123123123i:=i+1;
123until i>length(kata);
123karakter:=kata;
end;




Penjelasan : Karakter pada indeks ke-i jika tidak berupa 'a..z' (huruf kecil) atau 'A..Z' (huruf besar), maka karakter tersebut akan dihapus.


Ni fungsi untuk mengkonversi huruf kecil menjadi huruf besar. Menggunakan fungsi "upcase" :

function konversi(kata:string):string;
var i:integer;
begin
123for i:=1 to length(kata) do
123begin
123if kata[i]<>upcase(kata[i]) then
123123kata[i]:=upcase(kata[i]) 123else
123123if kata[i]='' then kata[i]:=kata[i];
123end;
konversi:=kata;
end;


Sudah merasa pusing dan mual? Belum belum selesai. Hehe,,,

Naah,, ini function untuk membalik kata nya :

function balik(kata:string):string;
var hasil,ks:string;
i:integer;
begin
123for i:=length(kata) downto 1 do
123begin
123123ks:=kata;
123123if i=length(kata) then
123123begin
123123123delete(ks,1,length(kata)-1);
123123123hasil:=ks;
123123end else
123123begin
123123123delete(ks,1,i-1);
123123123delete(ks,2,length(kata));
123123123hasil:=hasil+ks;
123123end;
123end;
balik:=hasil;
end;


Penjelasan : Gue menggunakan teknik delete-copy. Jadi, variabel kata gue hapus dari indeks awal sampai indeks akhir-1, sehingga hanya tersisa 1 karakter (yaitu karakter paling belakang). Kemudian karakter paling belakang itu gue masukkan ke string hasil. Ini terus gue ulang sebanyak length(kata) kali. Jadi hasil akan ditambahkan karakter2 dari kata tetapi dimulai dari karakter yang di belakang.

Dan hasilnya adalah seperti ini :

Preview

Gimana. Sudah bisa meraba-raba gimana jalan program nya?

INGAT. Yang penting adalah bagaimana jalan alur program kita. Dari mana, hingga mau kemana program akan kita jalankan itu tergantung logika kita. So, banyak-banyak latihan soal/kasus untuk mengasah logika pemrograman kita.
Pesan terakhir dari gue : "ternyata copas itu tidak gampang" :D

0 komentar: