آردوینو, توصیه شده

عملیات های محاسباتی | قسمت چهاردهم آموزش آردوینو

عملیات های محاسباتی | قسمت چهاردهم آموزش آردوینو

در قسمت سیزدهم از آموزش آردوینو به بررسی مقایسه کاراکترها و مقادیر عددی، مقایسه استرینگ‌ها و همچنین، انجام مقایسه‌های منطقی (Logical Comparisons)، پرداختیم. در این قسمت قصد داریم درباره عملیات های محاسباتی از جمله جمع، تفریق، ضرب و تقسیم و همچنین، افزایش و کاهش مقادیر متغیرها، یافتن باقی‌مانده حاصل از تقسیم دو مقدار، تعیین قدرمطلق یک عدد و یافتن حداقل یا حداکثر مقادیر صحبت کنیم.

رعایت ترتیب انجام عملیات ها

برای انجام عملیات های محاسباتی روی مقادیر اسکچ خود، شما باید ترتیب انجام عملیات ها را رعایت کنید و همچنین، بتوانید متغیرهای مختلفی را کنترل کنید.

دراین‌خصوص، از کد زیر استفاده کنید:

در این مثال، تقسیم عدد صحیح، بخش کسری را از نتیجه تقسیم حذف می‌کند. به‌عبارت‌دیگر، اگر شما دو عدد را تقسیم کنید و نتیجه تقسیم یک عدد صحیح باشد، بخش کسری از نتیجه حذف می‌شود. به مثال زیر توجه کنید:

در اینجا precedence (ترتیب) هر عملگر، مشخص است. به‌طورکلی، عملیات های ضرب و تقسیم به عملیات های جمع و تفریق اولویت دارند؛ بنابراین نتیجه مثال ذکر شده، 11 خواهد شد. توصیه می‌شود که در نوشتن کد، از پرانتز استفاده کنید تا اولویت انجام محاسبات، مشخص شود.

مقدار عبارت int = 1 + (2 * 3) + 4; نیز 11 می شود؛ اما خواندن آن نسبت به عبارت int value = 1 + 2 * 3 + 4; آسان تر است؛ زیرا در آن از پرانتز استفاده شده است.

همچنین، اگر نیاز به تغییر اولویت دارید، مانند مثال زیر، می‌توانید از پرانتز استفاده کنید:

در این مثال، نتیجه، 13 خواهد شد. ابتدا عبارت داخل پرانتز محاسبه می شود، یعنی ابتدا 1 به 2 اضافه می شود، سپس در 3 ضرب می شود و در نهایت به 4 اضافه می شود و مقدار نهایی 13 به دست می آید.

✅نکته

دراین‌خصوص، شما باید مطمئن شوید که نتیجه از حداکثر اندازه متغیر مقصد (destination) بیش‌تر نشود، زیرا نرم‌افزار آردوینو IDE در این مورد به شما هشداری نمی‌دهد، مگر اینکه خودتان هشدارها را از قسمت File→Preferences فعال کنید.

کد زیر را در نظر بگیرید:

مقدار این عبارت 86,400 خواهد شد که می‌تواند در دیتابیس long قرار گیرد. اما مقداری که واقعاً در seconds_per_day ذخیره می‌شود، 20,864 است. 86,400 برای دو بار اورفلو (سرریز) کردن یک عدد صحیح (integer) کافی است (86,400 – 32,768 * 2 = 20,864). این سرریز به این دلیل اتفاق می افتد که کامپایلر  C نرم افزار Arduino IDE فقط یک عبارت متشکل از اعداد صحیح را می بیند. بنابراین شما باید به کامپایلر بگویید که کل عبارت را مانند یک long در نظر بگیرد، با اضافه کردن L به اولین مقدار، عبارت به صورت زیر می‌شود:

اگر شما در نوشتن کد خود از پرانتز استفاده می‌کنید، به یاد داشته باشید که ابتدا پرانتزهای داخل عبارت محاسبه می‌شوند.

این کد به‌درستی اجرا خواهد شد:

 

افزایش و کاهش مقادیر متغیرها

برای افزایش و کاهش مقادیر متغیرها، از کد زیر استفاده کنید:

افزایش و کاهش مقادیر متغیرها یکی از رایج‌ترین تسک‌ها در برنامه‌نویسی است که آردوینو دارای عملگرهایی است که این کار را آسان می‌کند. افزایش یک مقدار، incrementing و کاهش آن، decrementing نامیده می‌شود. یک روشی که برای انجام این کار وجود دارد، به شرح زیر است:

همچنین، شما می‌توانید عملگرهای افزایش (increment) و کاهش (decrement) را با عملگر assign ترکیب کنید، مانند مثال زیر:

اگر می‌خواهید مقداری را ۱ واحد افزایش یا کاهش دهید، می‌توانید از عملگرهای اختصاری افزایش (increment) و کاهش (decrement) ++ یا — استفاده کنید:

هنگامی که عملگرهای افزایش یا کاهش بعد از یک متغیر ظاهر می‌شوند، این عملگرها به‌عنوان عملگرهای post-increment یا post-decrement شناخته می‌شوند؛ زیرا آن‌ها عملیات خود را بعد از ارزیابی متغیر انجام می‌دهند. همچنین، اگر آن‌ها قبل از identifier (pre-increment or pre-decrement) ظاهر شوند، مقدار را قبل از ارزیابی متغیر، تغییر می‌دهند:

 

یافتن باقی‌مانده حاصل از تقسیم دو مقدار

اگر می‌خواهید بعد از تقسیم دو مقدار صحیح، باقی‌مانده را پیدا کنید، از نماد % (عملگر مدول (modulus)) برای به‌دست‌آوردن باقی‌مانده استفاده کنید:

myValue0 برابر است با 0 (20 تقسیم بر 10، باقی مانده 0 دارد). myValue1 برابر است با 1 (21 تقسیم بر 10، باقی مانده 1 دارد).

به‌طورکلی، عملگر مدول (modulus) بسیار مفید است، به‌خصوص زمانی که می‌خواهید بفهمید که یک مقدار مضربی از یک عدد هست یا خیر یا به‌عبارت‌دیگر، یک مقدار بر یک عدد مشخص، بخش‌پذیر هست یا نه. به‌عنوان‌مثال، به کد زیر توجه کنید:

در کد قبلی، عملگر مدول (modulus) روی متغیر myValue اعمال شده است. این عملگر، باقی‌مانده‌ی تقسیم myValue بر ۱۰ را محاسبه می‌کند؛ اگر نتیجه (باقی‌مانده) صفر باشد، به این معنی است که myValue بر ۱۰ بخش‌پذیر است؛ در غیر این صورت، myValue بر ۱۰ بخش‌پذیر نیست.

یک مثال دیگر نیز وجود دارد. شما می‌توانید از عملگر modulus برای تشخیص اعداد زوج و فرد استفاده کنید. به این صورت که اگر عددی را بر ۲ تقسیم کنید و باقی‌مانده برابر با صفر باشد، به این معنی است که آن عدد زوج است. در غیر این صورت، عدد فرد است.

در اینجا یک مثال مشابه نیز وجود دارد؛ اینکه شما می‌توانید با استفاده از 2 و عملگر modulus، برای بررسی فرد یا زوج بودن یک مقدار استفاده کرد:

مثال زیر، کلاک را در یک 24 ساعت برای تعداد معینی کلاک افست (offset) محاسبه می کند:

 

تعیین قدرمطلق یک عدد

abs(x) مقدار قدرمطلق x را محاسبه می‌کند. مثال زیر قدرمطلق تفاوت بین خواندن دو پورت ورودی آنالوگ را نشان می‌دهد:

abs (x y); مقدار قدرمطلق تفاوت بین x و y را محاسبه می‌کند و برای مقادیر صحیح (و عدد صحیح long) استفاده می‌شود.

 

یافتن حداقل یا حداکثر مقادیر

min(x,y) کمترین مقدار و max(x,y) بیش‌ترین مقدار را از بین دو عدد x و y برمی‌گرداند:

جدول ۱ چند نمونه از مقادیر خروجی از یک تابع min با مقدار 200 را نشان می دهد. این جدول نشان می دهد که خروجی با ورودی (myValue) یکسان است، تا زمانی که مقدار از 200 بیش تر نشود.

min(myValue, 200)myValue (مقدار ورودی)
9999
100100
150150
200200
200201

جدول ۱: خروجی تابع min (با مقدار 200)

جدول ۲ خروجی تابع max با مقدار 100 را نشان می دهد. این جدول نشان می دهد تا زمانی که مقدار بیش تر یا مساوی 100 باشد، خروجی با ورودی (myValue) برابر است:

max(myValue, 100)myValue (مقدار ورودی)
10099
100100
150150
200200
201201

جدول ۲: خروجی تابع max (با مقدار 100)

استفاده از تابع min برای محدودکردن حد بالا (upper bound) می‌تواند در انتخاب مقدار کمتر کمک کند. این کار ممکن است در ابتدا کمی متفاوت به نظر برسد، اما با بازگرداندن کوچک‌ترین مقدار بین ورودی و مقدار حداقل، خروجی تابع min هرگز از مقدار حداقل، بیش‌تر نخواهد بود (در مثال قبل، مقدار 200).

به طور مشابه، از تابع max برای محدودکردن حد پایین (lower bound) استفاده می‌شود. خروجی تابع max هرگز کمتر از مقدار ماکزیمم یا همان حداکثر (در مثال قبل، مقدار 100) نمی باشد.

اگر می‌خواهید از توابع min یا max برای بیش از دو مقدار استفاده کنید، می‌توانید مقادیر را به‌صورت زیر بنویسید:

در این مثال، ابتدا مقدار حداقل (مینیمم) پورت‌های آنالوگ 1 و 2 و سپس مقدار حداقل آن با پورت 0 محاسبه می‌شود. این روش می‌تواند برای تعداد دلخواهی از مقادیر تکرار شود، اما توجه داشته باشید که پرانتزها را به درستی قرار دهید. مثال زیر ماکزیمم (حداکثر) چهار مقدار را محاسبه می کند:

انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

شما نیز میتوانید یکی از نویسندگان سیسوگ باشید.   همکاری با سیسوگ

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *