در این مقاله از سری مقالات بخش آموزش جاوا اسکریپت ، سعی بر آن داریم تا بتوانیم آموزش ساخت ماشین حساب با javascript را از صفر تا صد با منطق الگوریتمی توضیح دهیم. تا پایان مقاله همراه ما باشید.
مقدمه ماشین حساب
از قدیم به یاد دارم که در هر زبانی، مخصوصا c++ و basic یکی از تمرین های اصلی و سخت برای بچه ها ، ساختن ماشین حساب بود. بطوری که برخی از استادان به ما میگفتن که هر کسی در هر زبانی، یک ماشین حساب قدرتمند بنویسد، آن زبان را فرا گرفته است!
البته امروزه تعریف و کاربرد زبان های برنامه نویسی بسیار تغییر کرده و پیچیدگی های فراتری از ماشین حساب پیدا کرده اند، اما باز هم از ارزش نوشتن منطق ماشین حساب کم نمیکند.
شروع به ساخت ماشین حساب
ابتدا با کد های زیر، قسمت html و css کار را ایجاد کنید. بعید بدونم این قسمت نیاز به توضیح داشته باشد، اما اگر سوالی بود در رابطه با اچ تی ام ال ، در کامنت بپرسید.
کد های زیر، قسمت اچ تی ام ال هست. کلا 4 دسته فانکشن جاوا اسکریپتی داریم که به دکمه های مربوطه داده شده است. اعداد ، فانکشن _Number را دارند. اپریشن ها یا عملگر ها فانکشن _op را دارند. به همین ترتیب دکمه clear فانکشن _clear و دکمه مساوی فانکشن _result را در خود با ایونت onclick دارد.
در قسمت بعدی این استایل ها را به پروژه خود اضافه کنید.
اما برویم سراغ قسمت اصلی یا همان مغز کد، جاوا اسکریپت!
ابتدا نیاز به تعریف چهار متغیر اصلی و سراسری برای نگهداری :
سلکت المان اینپوت
نگهداری عدد اول
نگهداری عدد دوم
نگهداری مقدار عملگر
پس کد زیر را مینویسیم:
let inputCalc = document.getElementById(`input`);
let num1
let num2
let op
اصلی ترین فانکشن ساخت ماشین حساب
در این قسمت اصلی ترین بخش کد را داریم. ابتدا ببینید:
function _Number(self) {
inputCalc.value += self.innerText
if (
(inputCalc.getAttribute(`data-status`)) == `on`
) {
// first step
num1 = Number(inputCalc.value)
inputCalc.setAttribute(`data-status`, `off`)
console.log(num1);
} else {
// another step
// num1 -op- num2
num2 = Number(inputCalc.value)
console.log(num2);
console.log(op);
switch (op) {
case `+`: num1 = num1 + num2; break;
case `-`: num1 = num1-num2; break;
case `*`: num1 = num1 * num2; break;
case `/`: num1 = num1 / num2; break;
}
console.log(num1);
}
}
اولا باید روی هر دکمه که کلیک میشود، عدد مربوطه در کادر بالا نوشته شود. پس خط اول تابع همین کار را انجام میدهد.
منطق و الگوریتم کلی ما برای حل ماشین حساب جاوا اسکریپت به صورت زیر است:
در اولین مرحله : عدد را از input گرفته و در متغیر num1 ذخیره کند.
در دومین مرحله : عدد را از input گرفته و در متغیر دوم ذخیره کند و با احتساب نوع عملگر که در op وجود دارد ، در switch حساب کند num1 -op- num2 و این مقدار را در num1 ذخیره کند و مجدد اگر کاربر عددی وارد کرد، آن را در num2 ذخیره کرده و جواب را همیشه در num1 ذخیره کند.
برای همین منظور از اتریبیوت data-status استفاده کردیم تا بتوانیم بار اول عدد وارد کردن را با مرتبه های بعدی محاسبه کنیم.
در ادامه ماجرا، تابع OP وظیفه ذخیره سازی نوع عملگر را برای ما دارد. کد زیر:
function _op(self) {
op = self
inputCalc.value = null
}
با کلیک روی دکمه clear بایستی تمام داده ها ریست شود. کد زیر:
function _clear() {
inputCalc.value = null
num1 = null
num2 = null
op = null
inputCalc.setAttribute(`data-status`, `on`)
}
و با کلیک بروی دکمه = عدد حاصل بایستی چاپ شود.کد زیر:
function _result() {
inputCalc.value = num1
}
میتوانید در قطعه کد زیر، قسمت جاوا اسکریپت را بصورت کامل ببینید.
let inputCalc = document.getElementById(`input`);
let num1
let num2
let op
function _Number(self) {
inputCalc.value += self.innerText
if (
(inputCalc.getAttribute(`data-status`)) == `on`
) {
num1 = Number(inputCalc.value)
inputCalc.setAttribute(`data-status`, `off`)
} else {
num2 = Number(inputCalc.value)
switch (op) {
case `+`: num1 = num1 + num2; break;
case `-`: num1 = num1-num2; break;
case `*`: num1 = num1 * num2; break;
case `/`: num1 = num1 / num2; break;
}
}
}
function _op(self) {
op = self
inputCalc.value = null
}
function _clear() {
inputCalc.value = null
num1 = null
num2 = null
op = null
inputCalc.setAttribute(`data-status`, `on`)
}
function _result() {
inputCalc.value = num1
}
امیدواریم از این مقاله نهایت استفاده را برده باشید و آن را با دوستانتان به اشتراک بگذارید. تیم تولید محتوای مدرسه اینترنتی پرنیان این مقاله را تهیه کرده است.
trainingsitedesign
من، پارسا قربانیان موسس مدرسه اینترنتی پرنیان و برگزارکننده اولین دوره های آموزشی تضمین استخدام در ایران هستم. هدف من ایجاد یک معادله برد، برد هست. میخواهیم آرزوهایمان را با هم بسازیم♥