Menentukan Palindrome Dengan Bahasa C

Salah satu program yang sering dijadikan ujian atau latihan dalam mempelajari bahasa C adalah program untuk menentukan palindrome. Palindrome adalah suatu kata atau kalimat yang jika dibaca dari depan maupun dari belakang memberikan hasil yang sama. Misalnya kata “tamat”, “kakak”, “malam”, dan lain-lain. Dalam bentuk kalimat salah satu contoh yang bisa diberikan adalah “kasur ini rusak”. Nah, cobalah untuk mencari kata yang lain. Kalau ketemu, beritahu PCplus via email ya :).

Sekarang kita akan membuat program untuk memeriksa apakah sebuah kata atau kalimat termasuk ke dalam palindrome atau bukan. Program tersebut diberikan pada listing 1.

Listing 1. Menentukan Palindrome

#include <stdio.h>

#include <string.h>

main()

{

char *pal;

char *palbalik;

char *strbalik();

clrscr();

printf(“=====================\n”);

printf(“MENENTUKAN PALINDROME\n”);

printf(“=====================\n\n”);

printf(“Masukkan sebuah string : “);

gets(pal);

strlwr(pal);

palbalik = strbalik(pal);

printf(“Jika string dibalik akan menjadi : “);

puts(palbalik);

if (strcmp(palbalik,pal)==0)

{

printf(“String yang dimasukkan merupakan palindrome”);

} else {

printf(“String yang dimasukkan bukan merupakan palindrome”);

}

}

char *strbalik(in_str)

char *in_str;

{

char *out_str;

size_t p;

int i;

p = strlen(in_str);

for (i=0;i<p;i++)

{

*(out_str+(p-1-i))=*(in_str+i);

}

return(out_str);

}

Salah satu contoh hasil run program tersebut adalah sebagai berikut:

=====================

MENENTUKAN PALINDROME

=====================

Masukkan sebuah string : kasur ini rusak

Jika string dibalik akan menjadi : kasur ini rusak

String yang dimasukkan merupakan palindrome

Bandingkan dengan gambar 1.

Prinsip program tersebut sebenarnya cukup sederhana. Sebuah string dimasukkan ke dalam variabel (pada contoh di atas variabel tersebut diberi nama “pal”) kemudian string tersebut diubah menjadi huruf kecil semua. Setelah itu string tersebut dibalik dengan menggunakan fungsi strbalik(). Hasilnya disimpan pada variabel bernama palbalik. Variabel palbalik kemudian dibandingkan dengan variabel balik. Jika hasilnya sama, berarti keduanya merupakan palindrome.

Bagian yang agak rumit mungkin adalah pendefinisian fungsi strbalik(). Pada fungsi tersebut terdapat variabel pointer in_str dan out_str. Variabel in_str menerima string yang diinputkan sebagai parameter fungsi strbalik(). Kemudian karakter pertama variabel in_str diberikan sebagai karakter terakhir variabel out_str, karakter kedua in_str diberikan sebagai karakter kedua dari belakang out_str, demikian seterusnya. Langkah ini merupakan perwujudan dari baris berikut:

p = strlen(in_str);

for (i=0;i<p;i++)

{

*(out_str+(p-1-i))=*(in_str+i);

}

Setelah itu variabel out_str dikembalikan ke fungsi main() sebagai return value.

Jika listing 1 di atas digunakan untuk memeriksa sebuah palindrome murni, maka sekarang program tersebut akan sedikit dimodifikasi agar dapat digunakan untuk memeriksa palindrome yang “tidak murni”. Disebut tidak murni karena penggunaan tanda baca tertentu serta spasi diabaikan. Misalnya ada kata “I prefer pi”. Jika spasi pada kata tersebut dihilangkan, maka kata tersebut akan menjadi “ipreferpi” dan kata tersebut merupakan sebuah palindrome.

Contoh lain yang dapat diberikan adalah “Madam! I’m Adam”. Jika tanda baca dan spasi pada kata tersebut dihilangkan, maka kata tersebut akan menjadi “madamimadam” dan kata tersebut merupakan palindrome.

Dengan demikian, modifikasi tersebut adalah pada penghilangan tanda baca tertentu atau penghilangan karakter yang bukan merupakan alphanumeric. Modifikasi tersebut diberikan pada listing 2.

Listing 2. Menentukan palindrome dengan mengabaikan tanda baca

#include <stdio.h>

#include <string.h>

#include <ctype.h>

main()

{

char *pal;

char *palbaru = “”;

char *palbalik;

char *strbalik();

int i=0,j=0;

size_t pj;

clrscr();

printf(“=====================\n”);

printf(“MENENTUKAN PALINDROME\n”);

printf(“=====================\n\n”);

printf(“Masukkan sebuah string : “);

gets(pal);

strlwr(pal);

pj = strlen(pal);

for (i=0;i<pj;i++)

{

if (isalnum(*(pal+i)))

{

*(palbaru+j)=*(pal+i);

j++;

}

}

*(palbaru+j)=”;

printf(“String disederhanakan menjadi : “);

puts(palbaru);

palbalik = strbalik(palbaru);

printf(“Jika string dibalik akan menjadi : “);

puts(palbalik);

if (strcmp(palbalik,palbaru)==0)

{

printf(“String yang dimasukkan merupakan palindrome”);

} else {

printf(“String yang dimasukkan bukan merupakan palindrome”);

}

}

char *strbalik(in_str)

char *in_str;

{

char *out_str;

size_t p;

int i;

p = strlen(in_str);

for (i=0;i<p;i++)

{

*(out_str+(p-1-i))=*(in_str+i);

}

return(out_str);

}

Jika program dijalankan, hasilnya adalah sebagai berikut:

=====================

MENENTUKAN PALINDROME

=====================

Masukkan sebuah string : a man, a plan, a canal: Panama!

String disederhanakan menjadi : amanaplanacanalpanama

Jika string dibalik akan menjadi : amanaplanacanalpanama

String yang dimasukkan merupakan palindrome

Bandingkan dengan gambar 2.

Berikan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Logout / Ubah )

Twitter picture

You are commenting using your Twitter account. Logout / Ubah )

Facebook photo

You are commenting using your Facebook account. Logout / Ubah )

Google+ photo

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

Ikuti

Get every new post delivered to your Inbox.

%d blogger menyukai ini: