About Me

Hai, saya Rosihan Ari Yuana. Saya sehari-hari adalah mengajar di Universitas Sebelas Maret.

Bidang riset saya tentang adaptive learning, computer aided learning, dan datascience

Selain itu, saya juga seorang penulis buku dan blogger.

More about me...

  • Home
  • /
  • PHP
  • /
  • Membuat Kalkulator Berbasis String dengan PHP
PHP

Membuat Kalkulator Berbasis String dengan PHP

Mmm… script kalkulator yang telah dibahas sebelumnya, tentu Anda sering menjumpai dan mudah membuatnya. Namun bagaimana dengan kalkulator yang inputnya berupa suatu string, misalkan seperti ini:

3+5-2*4+1

kemudian muncul hasilnya adalah 25? dengan asumsi tingkat presedensi operator diabaikan, serta operator aritmatik yang digunakan adalah +, -, *, /.

Ide membuat kalkulator jenis ini didasari oleh mas Husein (member rosihanari.net) yang menemui kendala dalam pengimplementasiannya.

Nah… dalam artikel ini akan dibahas tuntas mengenai ide bagaimana membuat kalkulator berbasis string di atas serta membuat scriptnya dalam PHP. Thanks mas Husein atas pertanyaannya, semoga penjelasan ini nanti bisa mencerahkan Anda, dan menjadi sumber referensi ide dan inspirasi bagi visitor setia blog ini.

Bismillah… saya akan mulai bahas mulai dari ide penyelesaiannya dahulu. Tapi ingat… ide yang saya paparkan berikut ini bukan satu-satunya. Masih banyak ide atau cara untuk menyelesaikan kasus di atas.

Baik, idenya adalah sebagai berikut:

Langkah Pertama adalah ambil operator aritmatik dan masukkan ke dalam daftar operator. Pengambilan operator ini mulai dari kiri. Daftar operator di sini dapat berupa suatu array. Dalam contoh input di atas, akan diperoleh daftar operator yang berisi {+, -, *, +}.

Langkah kedua adalah memecah bilangan yang menjadi operand (bilangan yang dioperasikan) dan masukkan ke dalam daftar operand. Daftar operand ini bisa juga berupa array. Trus… bagaimana caranya memecah operand-operand itu? Mudah saja, dalam PHP kita bisa menggunakan function explode() dengan tanda operator sebagai pemecahnya. Namun… bukankah function ini hanya bisa memecah suatu string menjadi substring berdasarkan sebuah karakter pemecah saja? Sedangkan dalam string input bisa jadi terdiri lebih dari satu karakter operatornya? Hmmm…. gampang saja, sebelum memecah operand, kita lakukan replace substring dahulu untuk setiap operatornya. So… kita bisa gunakan str_replace(). Direplace dengan apa operatornya? Anda bisa mereplace dengan spasi atau karakter yang lain. Hasil dari proses replace operator ini akan dihasilkan suatu string berbentuk 3 5 2 4 1 (dengan asumsi karakter pengganti operator adalah karakter spasi). Nah… berikutnya sudah bisa deh dipecah para operand nya, menggunakan explode(). Hasil dari explode ini akan diperoleh daftar operand {3, 5, 2, 4, 1}.

Langkah ketiga adalah mulai menghitung. Untuk proses perhitungan kita gunakan perulangan/looping sejumlah operatornya. Adapun nilai awal hasil perhitungan adalah sama dengan operand pertama, dalam contoh ini adalah 3. Untuk perulangan ke-1, kita ambil operator ke-1 dari daftar operator. Kebetulan operator pertama ini adalah penjumlahan (+), maka akan dihitung nilai hasil perhitungan yang lama (3) ditambah dengan operand ke-2 yaitu 5 dan dihasilkan 8. Untuk perulangan ke-2, kita ambil operator ke-2 dari daftar operator yaitu pengurangan (-). Selanjutnya hitung hasil perhitungan sebelumnya, yaitu 8 dikurangi operand ke-3 (dalam contoh ini adalah 2) dan dihasilkan 6. Proses ini dilakukan terus hingga pada operator terakhir. Setelah perulangan selesai, akhirnya bisa diperoleh hasil terakhir perhitungan.

Implementasi dari ide di atas ke dalam bentuk script PHP adalah sebagai berikut:

<?php

$formula = "3+5-2*4+1";

// step 1 - memasukkan operator ke dalam daftar operator

$operator = array();

for($i=0; $i<=strlen($formula)-1; $i++)
{
	if (($formula[$i] == "+") || ($formula[$i] == "-") || ($formula[$i] == "*") || ($formula[$i] == "/"))
	{
		$operator[] = $formula[$i];
	}
}

// step 2 - proses memecah operand dan dimasukkan ke daftar operand

// mengganti operator dengan spasi

$formula = str_replace("+"," ",$formula);
$formula = str_replace("-"," ",$formula);
$formula = str_replace("*"," ",$formula);
$formula = str_replace("/"," ",$formula);

// memecah operand berdasarkan spasi dan hasilnya berupa array berisi daftar operand
$operand = explode(" ",$formula);

// step 3 - proses menghitung

// nilai awal hasil perhitungan
$hasil = $operand[0];

// looping sejumlah operator untuk proses perhitungan
for($i=0; $i<=count($operator)-1; $i++)
{
	if ($operator[$i] == "+") $hasil = $hasil + $operand[$i+1];
	else if ($operator[$i] == "-") $hasil = $hasil - $operand[$i+1];
	else if ($operator[$i] == "*") $hasil = $hasil * $operand[$i+1];
	else if ($operator[$i] == "/") $hasil = $hasil / $operand[$i+1];
}

// tampilkan hasil perhitungan
echo "Hasil perhitungannya adalah : ".$hasil;

?>

OK.. simple bukan? Ide dan script di atas dapat menghandle input string yang di dalamnya terdapat spasi, misalnya 3+5 – 2 * 4+1. Dan hasilnya akan tetap sama seperti apabila tidak ada spasi. Selain itu, script di atas juga mampu menghandle input yang di dalamnya terdapat bilangan riil, misalnya 3.3+5-2.56*4+1. Silakan cek sendiri ya!!

Mudah bukan?? Alhamdulillah… bisa selesai juga akhirnya. Yang jelas… Nothing is impossible in programming!!

Dalam kasus ini, ada hikmah yang bisa kita ambil terkait dengan operasi aritmatik yang melibatkan string dengan PHP. Hikmah apa gerangan? Coba perhatikan inputnya. Inputnya adalah suatu string, yang berisi operand dan operator aritmatiknya. Nah… coba perhatikan lagi pada daftar operand. Dari proses pemecahan string input menjadi daftar operand, setiap operandnya masih berupa string (karena inputnya juga string). Dalam script di atas, tidak ada proses konversi tipe data dari string ke bilangan. Selanjutnya perhatikan lagi ketika proses perhitungan. Dalam proses perhitungan juga tidak terdapat konversi tipe data lagi dari string ke bilangan. Dari hal ini bisa disimpulkan bahwa dalam PHP, angka yang bertipe data (string) dapat dioperasikan seperti layaknya angka yang bertipe data bilangan. Sebagai contoh “4” + “56” akan menghasilkan 60, seperti halnya 4 + 56.

Trus… bagaimana dengan bahasa pemrograman yang lain? Apakah angka dalam bentuk string bisa dioperasikan juga seperti layaknya angka dalam tipe bilangan? Belum tentu… sebagai contoh dalam bahasa Pascal, bila Anda operasikan “1” + “2” akan dihasilkan “12” :-). So.. bagaimana cara menghandlenya? Caranya adalah dengan mengkonversi angka bertipe data string ke bilangan. Proses konversi tipe data ini dalam pemrograman diistilahkan dengan “casting”.

Sudah selesaikah pembahasan di atas? Eit tunggu dulu, bagaimana bila inputnya seperti ini? -3+5-2*4+1? Kira-kira bisa tidak ya? Coba Anda cek sendiri. Bila tidak bisa, tolong donk pikirkan bagaimana menghandlenya dan solusinya? Bila ketemu jawabannya harap kirim via komentar di bawah ini ya 🙂 I’ll wait…

 


Article by Request

Anda belum memahami konsep pemrograman PHP Native, Python, Java, atau SQL? atau Anda belum punya ide penyelesaian dari studi kasus yang dihadapi sampai saat ini.

Silakan manfaatkan layanan Article by Request di blog ini.


Bagikan artikel ini jika bermanfaat !

Assalaamu'alaikum.. aktivitas keseharian saya mengajar di Universitas Sebelas Maret, dengan matakuliah pemrograman dan basis data. Adapun bidang penelitian saya tentang computational thinking dan computer-aided learning.

Leave a Reply