יום רביעי, 25 במאי 2011

מחשבון - זה הפתרון

10:36 - חבר שלי מספר שיש להם פרוייקט לעשות מחשבון בג'אווה סקריפט.
12:36 - הקוד גמור :)


<html>
<head>
<title>מחשבון - זה הפתרון!</title>
<script>
var oper;
var memo=0;
var disp=0;
function updateDisplay(){
  str=disp.toString();
  if(Math.floor(disp)==disp) str+=".";
  document.getElementById('display').innerHTML=str;
}
function pressed(s){
//    alert(s);
  if(isNaN(parseInt(s)))
    switch(s){
      case 'C': disp=0; break;
      case '&lt;': disp=Math.floor(disp/10); break;
      case '+':case '-':case '*':case '/': memo=disp; disp=0; oper=s; break;
      case '=': 
        switch(oper){
          case '+': disp+=memo; break;
          case '-': disp-=memo; break;
          case '*': disp*=memo; break;
          case '/': disp/=memo; break;
        }
      break;
    }
  else
     if(disp<=99999999) disp=(parseInt(disp)*10+parseInt(s));
  updateDisplay();
  
}
function init(){
  updateDisplay();
  var rows=document.getElementById('megacalc').rows;
    for (var j=1;j<6;j++){
        cells=rows[j].cells;
        for(i in cells){
          if(!isNaN(i)){cells[i].onclick=function(){pressed(this.innerHTML)};}
    }
  }
  document.getElementById
}
</script>
<style>
body{text-align:center}
#megecalc{margin-left:auto;margin-right:auto;}
#megacalc td{text-align:center}
#display{font-size:2em}
</style>
</head>
<body onload="init();">
<center>
<h1>מחשבון - זה הפתרון!</h1>
<table id="megacalc" width="200" height="350" border="2" cellpadding="5" cellspacing="5">
  <tr>
    <td style="text-align:right" id="display" colspan="4"></td>
  </tr>
  <tr>
    <td>7</td><td>8</td><td>9</td><td>/</td>
  </tr>
  <tr>
    <td>4</td><td>5</td><td>6</td><td>*</td>
  </tr>
  <tr>
    <td>1</td><td>2</td><td>3</td><td>-</td>
  </tr>
  <tr>
    <td colspan="2">0</td><td>.</td><td>+</td>
  </tr>
  <tr>
    <td>C</td><td><</td><td colspan="2">=</td>
  </tr>
</table>
</center>
</body>
</html>

12:40 - אני מגלה שיש באגים, אבל באמת שאין לי זמן. ביי!

14:30 - תיקון: סדר הפעולות מבוצע הפוך ולכן במקרה של חילוק וחיסור התוצאה המתקבלת אינה נכונה. כמו כן, צריך לטפל בהגבלת הספרות באופן הגיוני יותר (דרך הפונקציה updateDisplay עצמה) כדי שגם כאשר התוצאה המקבלת ארוכה - היא תוגבל לגודל המחשבון.. :)

אין תגובות:

הוסף רשומת תגובה