PDA

View Full Version : کمک برای نوشتن ماشین حساب



sAsAn.K
پنج شنبه 14 آذر 1387, 15:20 عصر
سلام دوستان .
میخوام ماشین حسابی بنویسم که اگه عددی وارد شد ، سپس Operator ای زده شد و دوباره عددی وارد شد ، با زدن دوباره ی هر Operator نتیجه ی عملیات قبلی نشون داده بشه .
همچنین با زدن دکمه ی مساوی .

راهنماییم کنید که چجوری میتونم این کار رو بکنم .
ممنون .

milade
پنج شنبه 14 آذر 1387, 16:06 عصر
الان کجا گیر هستید؟
تا کجا کد نوشتید؟(اصلا کد نوشتید؟)

sAsAn.K
پنج شنبه 14 آذر 1387, 19:37 عصر
ظاهر ماشین حسابو درست کردم اینهاش :


<html>
<head>
<script language="javascript">

</script>
</head>
<body>
<form name="form1">
<input Type="text" name="txt1"><br>
<input Type="button" name="btn1" value=" 1 " onclick="document.form1.txt1.value=document.form1.txt1.valu e + '1'">
<input Type="button" name="btn2" value=" 2 " onclick="document.form1.txt1.value=document.form1.txt1.valu e + '2'">
<input Type="button" name="btn3" value=" 3 " onclick="document.form1.txt1.value=document.form1.txt1.valu e + '3'">
<input Type="button" name="btn+" value=" + "<br>
<input Type="button" name="btn4" value=" 4 " onclick="document.form1.txt1.value=document.form1.txt1.valu e + '4'">
<input Type="button" name="btn4" value=" 5 " onclick="document.form1.txt1.value=document.form1.txt1.valu e + '5'">
<input Type="button" name="btn6" value=" 6 " onclick="document.form1.txt1.value=document.form1.txt1.valu e + '6'">
<input Type="button" name="btn-" value=" - "><br>
<input Type="button" name="btn7" value=" 7 " onclick="document.form1.txt1.value=document.form1.txt1.valu e + '7'">
<input Type="button" name="btn8" value=" 8 " onclick="document.form1.txt1.value=document.form1.txt1.valu e + '8'">
<input Type="button" name="btn9" value=" 9 " onclick="document.form1.txt1.value=document.form1.txt1.valu e + '9'">
<input Type="button" name="btnX" value=" X "><br>
<input Type="button" name="btn=" value=" = ">
<input Type="button" name="btn0" value=" 0 " onclick="document.form1.txt1.value=document.form1.txt1.valu e + '0'">
<input Type="button" name="btn/" value=" / "><br>
<input Type="reset" name="btnC" value=" c "><br>
</form>
</body>
</html>
ببینید ، فقط عملیات روی عدد صحیح میخوام انجام شه ، اعشاری لازم نیست ، الان اینی که نوشتم ، ظاهرشه و اینکه عدد ها رو میزاره توی اون TextBox .

اگر بتونید جمع رو برام درست کنید و توضیح بدید ، بقیشم فکر نکنم کاری داشته باشه .
روی مساوی هم یه توضیحی بدید .
اگه بشه برای هر عمل یه تابع توی head نوشته شه بهتر نیست ؟

امید امرایی
جمعه 15 آذر 1387, 13:40 عصر
<html>
<head>
<script language="javascript">
var action;
var preValue;

function LogAction(act){
action = act;
preValue = new Number(document.form1.txt1.value);
document.form1.txt1.value = '';
}

function compute(){
var Result = document.form1.txt1;
var currentVal = new Number(document.form1.txt1.value);
switch(action){
case 'add': Result.value = preValue + currentVal ; break;
case 'deduce': Result.value = preValue - currentVal; break;
case 'multiple': Result.value = preValue * currentVal; break;
case 'divide': Result.value = preValue / currentVal; break;
default: break;
}
}

</script>
</head>
<body>
<form name="form1">
<input Type="text" name="txt1"><br>
<input Type="button" name="btn1" value=" 1 " onclick="document.form1.txt1.value=document.form1.txt1.valu e + '1'">
<input Type="button" name="btn2" value=" 2 " onclick="document.form1.txt1.value=document.form1.txt1.valu e + '2'">
<input Type="button" name="btn3" value=" 3 " onclick="document.form1.txt1.value=document.form1.txt1.valu e + '3'">
<input Type="button" name="btn+" value=" + " onclick="LogAction('add');"><br>
<input Type="button" name="btn4" value=" 4 " onclick="document.form1.txt1.value=document.form1.txt1.valu e + '4'">
<input Type="button" name="btn4" value=" 5 " onclick="document.form1.txt1.value=document.form1.txt1.valu e + '5'">
<input Type="button" name="btn6" value=" 6 " onclick="document.form1.txt1.value=document.form1.txt1.valu e + '6'">
<input Type="button" name="btn-" value=" - " onclick="LogAction('deduce');"><br>
<input Type="button" name="btn7" value=" 7 " onclick="document.form1.txt1.value=document.form1.txt1.valu e + '7'">
<input Type="button" name="btn8" value=" 8 " onclick="document.form1.txt1.value=document.form1.txt1.valu e + '8'">
<input Type="button" name="btn9" value=" 9 " onclick="document.form1.txt1.value=document.form1.txt1.valu e + '9'">
<input Type="button" name="btnX" value=" * " onclick="LogAction('multiple');"><br>
<input Type="button" name="btn=" value=" = " onclick="compute();">
<input Type="button" name="btn0" value=" 0 " onclick="document.form1.txt1.value=document.form1.txt1.valu e + '0'">
<input Type="button" name="btn/" value=" / " onclick="LogAction('divide');"><br>
<input Type="reset" name="btnC" value=" c "><br>
</form>
</body>
</html>

sAsAn.K
شنبه 16 آذر 1387, 13:08 عصر
دوستان بیشتر راهنمایی کنید ( حتی الامکان جمع رو برام بنویسید ) .
kassit جان اونی که شما نوشتی ، اون کاری که گفتم رو نمی کنه ، یعنی همونی که توی پست اول گفتم .

sAsAn.K
شنبه 16 آذر 1387, 13:36 عصر
نمونه ها رو میشه بدید ؟
من چیز به درد بخوری پیدا نکردم .

امید امرایی
شنبه 16 آذر 1387, 22:27 عصر
دوستان بیشتر راهنمایی کنید ( حتی الامکان جمع رو برام بنویسید ) .
kassit جان اونی که شما نوشتی ، اون کاری که گفتم رو نمی کنه ، یعنی همونی که توی پست اول گفتم .

بنده کلیت کار رو خدمتتون گفتم
کمی دقت کنید خودتون هر کاری می تونید باهاش بکنید

sAsAn.K
یک شنبه 17 آذر 1387, 10:58 صبح
شما اون تغییری که من گفتم رو روی برنامه بدی برای من ، من ممنون میشم .
"میخوام ماشین حسابی بنویسم که اگه عددی وارد شد ، سپس Operator ای زده شد و دوباره عددی وارد شد ، با زدن دوباره ی هر Operator نتیجه ی عملیات قبلی نشون داده بشه ."

raravaice
یک شنبه 17 آذر 1387, 12:27 عصر
sAsAn.K (http://barnamenevis.org/forum/member.php?u=16300) عزیز این سایت محلی هست برای راهنمایی در نحوه کلیات کار نه محلی برای اعطای سورس کد این نکته رو هم من و هم خیلی از دوستان به شما تاکید کرده اند.

صورت مسئله شما رو دوست عزیزمون kassit (http://barnamenevis.org/forum/member.php?u=56730) تا حد اجرای کار حل کرده اند و جا داره از ایشون تشکر بشه! انعطاف دادن به این سورس با خودتون هست.

این مسئله باعث میشه که دوستان در سئوالات بعدی شما هیچ کمکی به شما نکنند.

موفق باشید

sAsAn.K
یک شنبه 17 آذر 1387, 13:08 عصر
این روشی که ایشون گفتند رو خود منم بلد بودم بنویسم .
من گفتم الگوریتم اون کاری که توی پست اول گفتم رو به من بدید .
من کد درخواست ندادم که بگم بگردید پیدا کنید بدید بهم !
منظور منو اشتباه متوجه شدید شما .
حالا هم اگر مقدوره کمک کنید ، اگر نه که هیچی .

Ali100
یک شنبه 17 آذر 1387, 19:56 عصر
فکر می کنم 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 ساعت وقت می گیره بدیش اینه که کسی هم چیزی دستگیرش
نمی شه

================================================== ====

sAsAn.K
دوشنبه 18 آذر 1387, 16:12 عصر
نمی دونی چقدر کارمو راه انداختی آقا ، دستت درد نکنه ، ممنون .

دوستان دیگه هم بهتره به جای ... مثل ایشون و kassit باشن !
:چشمک:

hossin.esm
چهارشنبه 15 دی 1389, 08:50 صبح
<html>
<body>
<form name="myform">
<table width="210" border="1" cellspacing="1" cellpadding="1" bgcolor="#003366">
<tr>
<td align="center">
<table width="173" border="0" cellspacing="0" cellpadding="0" height="130">
<tr>

</tr>
<tr>
<td colspan="3">
<input type="text" name="display" size="20">
</td>
<td width="53" height="0"> <font color="#FFFFFF">
<input type="button" name="clear" value=" c "
onClick="myform.display.value=''" onMouseover="window.status='Clear numbers'" onMouseout="window.status=''">
</font></td>
</tr>
<tr>
<td width="53" height="0">
<input type="button" name="seven" value=" 7 "
onClick="myform.display.value+='7'">
</td>
<td width="53" height="0">
<input type="button" name="eight" value=" 8 "
onClick="myform.display.value+='8'">
</td>
<td width="53" height="0">
<input type="button" name="nine" value=" 9 "
onClick="myform.display.value+='9'">
</td>
<td width="53" height="0"> <font color="#FFFFFF">
<input type="button" name="divide" value=" / "
onClick="myform.display.value+='/'">
</font></td>
</tr>
<tr>
<td width="53" height="0">
<input type="button" name="four" value=" 4 "
onClick="myform.display.value+='4'">
</td>
<td width="53" height="0">
<input type="button" name="five" value=" 5 "
onClick="myform.display.value+='5'">
</td>
<td width="53" height="0">
<input type="button" name="six" value=" 6 "
onClick="myform.display.value+='6'">
</td>
<td width="53" height="0"> <font color="#FFFFFF">
<input type="button" name="times" value=" x "
onClick="myform.display.value+='*'">
</font></td>
</tr>
<tr>
<td width="53" height="0">
<input type="button" name="one" value=" 1 "
onClick="myform.display.value +='1'">
</td>
<td width="53" height="0">
<input type="button" name="two" value=" 2 "
onClick="myform.display.value +='2'">
</td>
<td width="54" height="0">
<input type="button" name="three" value=" 3 "
onClick="myform.display.value +='3'">
</td>
<td width="72" height="0"> <font color="#FFFFFF">
<input type="button" name="minus" value=" - "
onClick="myform.display.value+='-'">
</font></td>
</tr>
<tr>
<td width="53" height="0">
<input type="button" name="zero" value=" 0 "
onClick="myform.display.value+='0'">
</td>
<td width="53" height="0"> </td>
<td width="54" height="0">
<input type="button" name="plus" value=" + "
onClick="myform.display.value +='+'">
</td>
<td width="72" height="0"> <font color="#FFFFFF">
<input type="button" name="calculate" value=" = "
onClick="myform.display.value=eval(myform.display.value)">
</font></td>
</tr>
</table>
</td>
</tr>
</table>
</form>
</body>
</html>

Mr FTHEL
چهارشنبه 15 دی 1389, 11:27 صبح
لطفا به قوانین احترام بگذارید برای سریعتر رسیدن به جواب هم باید سوال رو توی بخش خودش پرسید:چشمک: