Postingan lainnya
Buku Ini Koding!
Baru!
Buku ini akan jadi teman perjalanan kamu belajar sampai dapat kerjaan di dunia programming!
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