Postingan lainnya
Kelas Premium!
Belajar Javascript untuk website
Gunakan kupon "mulaijs" untuk diskon 75 ribu!
Program Calculator sederhana
Hallo teman-teman, izin bertanya,
Saya ingin membuat program calculator sederhana yang diberikan string operator (), +, -, *, / dan angka yang dipisahkan oleh spasi, sebagai contoh:
calculate.evaluate('10 *5/2'), 25)
inputnya adalah '10 *5/2', output yang dihasilkan adalah 25.
Di kode saya ini sepertinya masih ada yang false, saya ingin true semua,
Adakah yang bisa bantu? Terima kasih.
// Calculator
// Exercise in Tech Interview Glints Academy
const Calculator = function() {
// do code here
this.evaluate = string => {
let n = string.split(' ')
let result = 0;
let counter = 0;
for(let i = counter ; i < n.length; i++) {
if(result == 0) {
result = Number(n[i])
} else {
if(n[i]=='+') result = result + Number(n[i+1])
else if(n[i]=='-') result = result - Number(n[i+1])
else if(n[i]=='/') result = result / Number(n[i+1])
else if (n[i]=='*') result = result * Number(n[i+1])
counter++
}
}
return result
}
};
// Test Function do not edit
function Test(fun, result) {
console.log(fun === result)
}
const calculate = new Calculator()
Test(calculate.evaluate('127'), 127)
Test(calculate.evaluate('2 + 3'), 5);
Test(calculate.evaluate('2 - 3 - 4'), -5);
Test(calculate.evaluate('10 * 5 / 2'), 25);
console.log("Bonus Test")
Test(calculate.evaluate('10 + 6 / 2'), 13);
// DONE
Tanggapan
bertanyaa dengan jelas ya. Apa yang kamu buat, apa yang kamu inginkan, ini program apa, dan seterusnya
baca aturan main juga, judul tidak perlu pakai [ask]
sudah diedit kembali ya, terima kasih masukannya.
2 Jawaban:
<div>Sepertinya logika yang digunakan mengasumsikan bahwa urutannya pasti angka->operator->angka->operator->dst...<br><br>Namun bagaimana jika misal operasi yang dimasukkan seperti ini?</div><pre>"10 + (50)" atau "(5) + 10" atau "7 - (-7-10)"</pre><div><br>Tapi meskipun memang benar logika yang digunakan seperti itu, kalau saya lihat sih sepertinya masih terdapat kekeliruan di dalam loopingnya.<br><br>Dan terakhir, bagaimana jika user memasukkan sesuatu yang tidak masuk akal seperti ini? :v</div><pre>+5 --**10</pre>
<div>Sebetulnya ini kesempatan buat 'memaksa' belajar lebih dalam.<br>'Calculator' terlihat seperti masalah yang sederhana, cara asal selesai (sesuai dengan list test-nya) atau cara yang reuse seperti menggunakan <a href="https://en.wikipedia.org/wiki/Abstract_syntax_tree">Abstract syntax tree</a>.<br>Jadi ini adalah membuat parser dalam hal ini math dan cara yang sama juga buat parser code -- ini perkenalan dengan pembuatan compiler.</div><div>Tentu ada orang yang membuat library untuk ini seperti <a href="https://mathjs.org/">MathJS</a>.</div><div><br>kalau melihat code-nya, kita asumsi input-nya hanya akan seperti itu.<br>Yang penting hasil test-nya true/sukses.<br>- maka yang pertama kita mesti membersihkan input dari multi-space lalu membuat filter inputnya hanya array-nya max 5 item.<br>- Serta memastikan bahwa inputnya, number-operator-number-operator selang-seling.<br>- mengenali kalau di expresi math-nya ada "/" dan "*" pada akhir hitungan dengan "+" atau "-" di-depan. <br>contoh: 10 + 6 / 2, maka harus di-hitung ( 6 / 2 ) + 10 bukan ( 10 + 6 ) / 2 .<br><br><figure data-trix-attachment="{"contentType":"image/png","filename":"sk_adninqasifa__math_parser_v2.png","filesize":277856,"height":1192,"url":"https://i.ibb.co/6RFtmMq/sk-adninqasifa-math-parser-v2.png","width":1888}" data-trix-content-type="image/png" data-trix-attributes="{"caption":"modifikasi code for pass test","presentation":"gallery"}" class="attachment attachment--preview attachment--png"><img src="https://i.ibb.co/6RFtmMq/sk-adninqasifa-math-parser-v2.png" width="1888" height="1192"><figcaption class="attachment__caption attachment__caption--edited">modifikasi code for pass test</figcaption></figure></div>
Tanggapan
Exercise yang bagus juga membuat AST :D