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

avatar adninqasifa
@adninqasifa

19 Kontribusi 2 Poin

Diperbarui 3 tahun yang lalu

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-&gt;operator-&gt;angka-&gt;operator-&gt;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>

avatar kodergan
@kodergan

51 Kontribusi 58 Poin

Dipost 3 tahun yang lalu

<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="{&quot;contentType&quot;:&quot;image/png&quot;,&quot;filename&quot;:&quot;sk_adninqasifa__math_parser_v2.png&quot;,&quot;filesize&quot;:277856,&quot;height&quot;:1192,&quot;url&quot;:&quot;https://i.ibb.co/6RFtmMq/sk-adninqasifa-math-parser-v2.png&quot;,&quot;width&quot;:1888}" data-trix-content-type="image/png" data-trix-attributes="{&quot;caption&quot;:&quot;modifikasi code for pass test&quot;,&quot;presentation&quot;:&quot;gallery&quot;}" 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>

avatar soeleman
@soeleman

120 Kontribusi 147 Poin

Dipost 3 tahun yang lalu

Tanggapan

Exercise yang bagus juga membuat AST :D

Login untuk ikut Jawaban