فکر می کنم kassit خودش اون کد رو نوشته باشه .
واسه همین با اجازه خودش من همون کد رو کامل تر کردمو یه دستی هم به ظاهرش
کشیدم . بقیه اش با خودت . بچه های دیگه هم می تونن این کد رو تغییر بدن و کامل ترش کنن .
1-من واقعا وقت واسه اینکه کد رو کامل آزمایش کنم ندارم پس لطفا خودت زحمت آزمایش کردنو بکش اگر مشکلی بود یا تغییری لازم داشت بگو تا درستش کنم .
2-ولی منطق یا الگوی برنامه نویسی مفهوم اونجوری که تو می خوای نداره . چرا ؟
مثلا اگر به 10 نفر بگیم یک برنامه ساده بنویسید که از 1 تا 10 بشمره و رو صفحه نشون بده
هر کدوم از این 10 نفر ممکنه همین برنامه ساده رو یک جور بنویسه .
مثلا الان که می خوام کد رو اینجا قرار بدم واسه آخرین بار که نگاه کردم در همین کد currentVal
رو در واقع 2 بار می گیرم که از نظر الگوی برنامه نویسی درست نیست . یا خودت درستش کن
یا بعدا خودم فرصت کردم درستش می کنم .
<html>
<head>
<style type="text/css">
input.test {position:relative;width:38px;height:22px;}
input.test2 {position:relative;width:28px;height:22px;margin-top:2px;}
input.test3 {position:relative;width:80px;height:22px;}
input.test4 {position:relative;width:155px;height:22px;margin-top:2px;}
</style>
<script language="javascript">
var action;
var preValue;
var NewAction;
Clearing = "ON";
function LogAction(act) {
if (Clearing == "ON") {
document.form1.txt1.value = "";
Clearing = "OFF";
}
document.form1.txt1.value += act
}
function compute(action) {
var currentVal = Number(document.form1.txt1.value);
switch (NewAction) {
case 'add':
currentVal = preValue + currentVal;
break;
case 'deduce':
currentVal = preValue - currentVal;
break;
case 'multiple':
currentVal = preValue * currentVal;
break;
case 'divide':
currentVal = preValue / currentVal;
break;
default:
break;
}
preValue = currentVal
NewAction = action
Clearing = "ON"
document.form1.txt1.value = currentVal
}
</script>
</head>
<body>
<table border=1 align=center style="width:200px;height:200px;">
<tr><td align=center>
<form name="form1"><br />
<input Type="text" name="txt1" value="0" size="18" style="text-align:right;font-weight:bold;"><br /><br />
<input class="test" Type="button" name="btn1" value="1" onclick="LogAction(1);">
<input class="test" Type="button" name="btn2" value="2" onclick="LogAction(2);">
<input class="test" Type="button" name="btn3" value="3" onclick="LogAction(3);">
<input class="test2" Type="button" name="btn+" value=" + " onclick="compute('add');"><br>
<input class="test" Type="button" name="btn4" value="4" onclick="LogAction(4);">
<input class="test" Type="button" name="btn4" value="5" onclick="LogAction(5);">
<input class="test" Type="button" name="btn6" value="6" onclick="LogAction(6);">
<input class="test2" Type="button" name="btn-" value=" - " onclick="compute('deduce');"><br>
<input class="test" Type="button" name="btn7" value="7" onclick="LogAction(7);">
<input class="test" Type="button" name="btn8" value="8" onclick="LogAction(8);">
<input class="test" Type="button" name="btn9" value="9" onclick="LogAction(9);">
<input class="test2" Type="button" name="btnX" value=" * " onclick="compute('multiple');"><br>
<input class="test3" Type="button" name="btn=" value=" = " onclick="compute();">
<input class="test" Type="button" name="btn0" value=" 0 " onclick="LogAction(0);">
<input class="test2" Type="button" name="btn/" value=" / " onclick="compute('divide');"><br>
<input class="test4" Type="reset" name="btnC" value=" c " onclick="Clearing='ON';NewAction='';"><br>
</form>
</td>
</tr>
</table>
</body>
</html>
توضیح:
وقتی رو اعداد ( input button ) کلیک میکنی یک پرش داریم به LogAction Function
که اینجا اعداد در input txt1 نوشته می شه .
ولی Clearing چیه ؟ برای پاک کردن input txt1 هست هر وقت لازم باشه صفحه پاک بشه
برابر با ON و هر وقت لازم نباشه OFF . این فقط برای وقتییه که میخوایم عدد دوم رو وارد کنیم
یا اولین بار عدد و وارد کنیم تا 0 پاک بشه
================================================== ==
برای اجرای عملیات ریاضی احتیاج به 2 تا عدد و علامتها داریم .
مثلا اگر با این مثال بخوایم نشون بدیم برنامه چجوری کار می کنه . 1+2=3
در این برنامه هر بار که روی علایم کلیک می کنیم یعنی اینا (+ - / * = ) یک پرش
به compute انجام میشه
دفعه اول که به compute پرش می کنیم عدد اول یعنی 1 و علامت یعنی + گرفته میشه
ولی هیچ عمل ریاضی انجام نمیشه .
برنامه منتظر می مونه تا عدد دوم وارد بشه و دوباره روی یکی از (+ - / * ) یا = کلیک کنه
تا عملیات قبلی اجرا بشه .
واقعا توضیح دادن سخته .
================================================== =
باز 1+2=3 رو در نظر بگیر .
کسی که از ماشین حساب استفاده می کنه رو 1 کلیک میکنه . 1 در input txt1 نوشته
میشه.
حالا رو + کلیک می کنه . برنامه به compute پرش میکنه action برابر با add میشه
یعنی جمع و currentVal عدد 1 رو میکیره .
در خطهای بعدی ( دفعه اول ) هیچ عملیات ریاضی انجام نمی شه چون برای switch
متغیر NewAction رو قرار دادیم که فعلا خالییه پس هیچ عملیاتی انجام نمیشه
در آخر preValue برابر با currentVal میشه یعنی 1 در اصل عدد اول ما همین currentVal
هست و NewAction هم برابر با action میشه یعنی add در اصل NewAction عملیات + رو مشخص می کنه
حالا عدد 3 وارد میشه و وقتی روی (+ - / * ) یا = کلیک بشه تازه عملیات جمع انجام میشه
فرض کن *
از اینجا به بعد هم که معلومه
برنامه دوباره به compute پرش می کنه action برابر با multiple یا ضرب میشه این عملیات بعدییه .
currentVal برابر با 3 میشه قبلا preValue برابر با 1 بود و NewAction برابر بود با add
برای همین وقتی به case 'add' میرسه 3 با 1 جمع میشه .
================================================== ===
اگر از همه اینا چیزی نگرفتی
اینو گوش کن .. شما 1 رو می گیری + رو می گیری 2 رو هم می گیری بعد 1+2=3
در حالی که اینجا 1 رو می گیری + رو می گیری ولی هیچ عملیاتی انجام نمی دی
بعد که 2 وارد شد کسی که از ماشین حساب استفاده می کنه هیچ راهی نداره
جز اینکه رو (+ - / * ) یا = کلیک کنه مثلا * اینجاست که عدد دوم گرفته میشه و عمل +
انجام میشه 1+2=3 حالا عمل بعدی ما * هست دوباره برنامه منتظر می شه
تا عدد دوم برای ضرب وارد و روی (+ - / * ) یا = کلیک بشه ....
================================================== ====
حالا فهمیدم چرا کسی توضیح نمی ده چون 1 ساعت وقت می گیره بدیش اینه که کسی هم چیزی دستگیرش
نمی شه
================================================== ====