تابع XOR
تابع XOR یک تابع منطقی است که وقتی تعداد ورودیهای منطقی TRUE را در آن بشماریم و عددی فرد باشد، آنگاه مقدار TRUE را بر خواهد گرداند و در غیر اینصورت (اگر خطایی وجود نداشته باشد) خروجی آن FALSE خواهد بود.
✅ به عبارت دیگر، نحوه استفاده از تابع XOR چنین است:
- ما تعدادی ورودی منطقی را به این تابع میدهیم که هر عبارت منطقی دارای ارزش TRUE یا FALSE است.
- سپس تابع XOR، تک تک ورودیها را ارزیابی میکند و صحت آن را میسنجد.
- سپس تعداد ورودیهای صحیح یا TRUE را میشمارد.
- اگر تعداد ورودیهای صحیح، عددی فرد بود، در خروجی تابع TRUE خواهید دید وگرنه FALSE خواهید دید.
تابع XOR در اصل به مفاهیم طراحی مدارهای منطقی در علوم کامپیوتر ? برمی گردد و چون چنین موضوعاتی مورد استفاده کاربران عمومی اکسل نیست، تابعی کم کاربرد بوده و موضوعات جانبی آن نیز خارج بحث ماست.
اما اگر با یک پروژه خاص مواجه شدید که در آن این تابع منطقی مورد نیاز شد، آنگاه بدانید که اکسل این امکان را فراهم کرده است و میتوانید به جای برنامهنویسی از این تابع استفاده کنید.
?? طبق آنچه ما میدانیم، کاربران اکسل معمولاً XOR را با 2 ورودی استفاده میکنند. در این حالت تابع XOR عملکردی مثل قبل دارد ولی سادهتر است:
- تابع XOR، دو ورودی منطقی را بررسی میکند (ارزش منطقی ورودیها را تست میکند).
- تعداد ورودی صحیح را میشمارد (که یکی از این اعداد است: صفر، 1 و 2).
- اگر فقط یک عبارت منطقی درست (TRUE) از میان آن دو ورودی پیدا کرد، آنگاه تابع XOR در خروجی مقدار TRUE را برمیگرداند وگرنه FALSE را برمیگرداند.
استفاده تابع XOR با دو ورودی، برای مواقعی مفید است که میخواهید مطمئن شوید از دو حالت عبارت منطقی، فقط حالت یکی صحیح است. مثلاً در یک تصمیمگیری بین دو گزینه، فقط یکی انتخاب شده است.
نحوه نوشتن تابع XOR
ساختار کلی تابع XOR به صورت زیر است:
=XOR(logical1, [logical2], ...)
ورودیهای این تابع به شرح زیر است:
- logical1: اولین مقدار منطقی که باید بررسی شود (اجباری).
- logical2: دومین مقدار منطقی که باید بررسی شود (اختیاری).
- … : تا 255 ورودی امکان پذیر است.
ورودیها و خروجی تابع XOR را میتوان به یک تابع ریاضی دید و آن را به شکل زیر نمایش داد:
البته وقتی تابع XOR دو ورودی داشته باشد، مثل این است که XOR به دنبال تنها یک ورودی صحیح میگردد.
توجه داشته باشید:
- ورودیهای تابع XOR میتوانند عبارات ثابت منطقی، ارجاع به سلولها، آرایهها یا مقادیر ثابت عددی باشند.
- درست است که 255 ورودی برای این تابع در نظر گرفته شده است ولی هر کدام از ورودیها میتوانند شامل مجموعهی بزرگی از عبارات منطقی باشند.
- تابع XOR هم مقادیر متنی و سلول خالی در ورودیها را در نظر نمیگیرد.
- شما نمیتوانید طوری تابع را بنویسید که تابع XOR در ورودیهای خود عبارت منطقی پیدا نکند. باید حداقل یک ورودی منطقی وجود داشته باشد وگرنه با خطای #value! مواجه میشوید.
- اگر دوست داشته باشید میتوانید تنها از یک ورودی تابع XOR استفاده کنید. در این حالت همان یک عبارت منطقی، تعیین کننده خروجی تابع خواهد بود. مثلاً برای اینکه خروجی TRUE باشد، کافی است همان یک عبارت منطقی صحیح باشد.
- XOR به حروف بزرگ و کوچک حساس نیست.
انواع مختلف ورودی در تابع XOR
ورودیهای تابع XOR عبارتهای منطقی هستند و به شکلهای مختلف میتوان ورودیهای این تابع را نوشت:
ورود مستقیم مقدار TRUE یا FALSE
میتوان به طور مستقیم مقادیر منطقی را وارد کرد. به عنوان مثال:
=XOR(TRUE,FALSE,FALSE)
در تابع بالا، ? مسیر ذهنی زیر را دنبال کنید:
- تابع بالا 3 ورودی دارد که یکی TRUE و دو تا FALSE هستند.
- چون فقط یک ورودی TRUE داریم پس خروجی تابع بالا TRUE است.
خروجی فرمولهای زیر همه FALSE است:
=XOR(FALSE,FALSE)
=XOR(FALSE,FALSE,TRUE,TRUE)
میتوانید در هر فرمول،? مسیر ذهنی زیر را دنبال کنید:
- در فرمول اول، هیچ یک از ورودیها TRUE نیست. به عبارت دیگر تابع XOR نمیتواند هیچ عبارت منطقی صحیحی را پیدا کند و خروجی FALSE خواهد بود.
- در فرمول دوم، دو تابع TRUE داریم ولی تابع XOR به دنبال حالتی است که فقط و فقط یک TRUE پیدا کند. بنابراین خروجی مجدداً FALSE است.
ارجاع به سلول
شما میتوانید از ارجاع به سلولها استفاده کنید. در ادامه 2 مثال میآوریم:
مثال 1:
فرض کنید در دو سلول A1 و B1 به ترتیب مقادیر TRUE و FALSE وجود دارد.
اگر میخواهید بررسی کنید که فقط یکی از این سلولها TRUE باشد، میتوانید از تابع XOR به صورت زیر استفاده کنید:
=XOR(A1, B1)
نتیجه تابع بالا TRUE است.
مثال 2:
فرض کنید در سه سلول E1، F1 و G1 به ترتیب مقادیر TRUE ، FALSE و TRUE وجود دارد.
اگر میخواهید بررسی کنید که فقط یکی از این سلولها TRUE باشد، میتوانید از تابع XOR به صورت زیر استفاده کنید:
=XOR(E1, F1, G1)
نتیجه فرمول بالا FALSE است. چون دو مقدار TRUE در ورودیهای تابع XOR وجود دارد، در حالی که این تابع به دنبال تنها یک ورودی صحیح است.
ارجاع به ناحیهای از کاربرگ
شما میتوانید از محدودهها در XOR استفاده کنید.
مثلاً فرض کنید سلول A1 مقدار TRUE باشد و تا A10 به صورت یک در میان مقادیر FALSE و TRUE قرار گرفته باشد. آنگاه در محدود A1:A10 تعداد 5 مقدار TRUE قرار دارد. بنابراین خروجی تابع زیر TRUE است:
=XOR( A1:A10 )
شما حتی میتوانید از متغیرها نیز برای تعیین ناحیه ورودی استفاده کنید.
استفاده از مقادیر ثابت عددی
همانطور که میدانید، در اکسل تمامی اعداد غیر صفر معادل TRUE هستند. مثالهای زیر را در نظر بگیرید:
=XOR(0)
=XOR(1)
=XOR(6,2,-1)
در فرمولهای بالا، ورودیهای مقادیر ثابت عددی هستند. در این فرمولها ? مسیر ذهنی زیر را دنبال کنید:
در فرمول اول XOR(0):
- مقدار صفر معادل FALSE است، پس تابع XOR هیچ مقدار TRUE یا صحیحی پیدا نمیکند
- و بنابراین تعداد TRUEها برابر صفر است
- و چون فرد نیست، پس خروجی تابع XOR مقدار FALSE است.
در فرمول دوم XOR(1):
- در فرمول دوم، توجه کنید که همه اعداد وارد شده غیرصفر هستند و هر عدد غیرصفر در اکسل معادل TRUE است.
- پس تعداد TRUE برابر یک است که عددی فرد است.
- لذا خروجی XOR مقدار TRUE خواهد بود.
در فرمول سوم XOR(6,2,-1):
- در فرمول سوم (مشابه فرمول دوم) چون تمام اعداد غیرصفر هستند.
- پس تعداد TRUEها برابر عدد 3 است که عدد فرد است.
- پس خروجی تابع دوم و سوم هم TRUE خواهد بود.
وارد کردن مقدار ثابت متنی
در مثال زیر، خروجی تابع TRUE است.
=XOR(0 , "Text" , 5)
اگر ? مسیر ذهنی زیر را دنبال کنید، میبینید:
- یکی از ورودیها که متن است و تابع OR آن را در نظر نمیگیرد.
- بنابراین فقط عدد صفر و 5 میماند.
- عدد صفر از نظر تابع OR معادل FALSE است و عدد 5 معادل TRUE است.
- بنابراین تابع بالا را میتوان به شکل زیر نوشت: =XOR(FALSE , TRUE)
- حالا تابع XOR یک ورودی TRUE دارد.
- و چون عدد 1 فرد است، پس خروجی تابع XOR مقدار TRUE خواهد بود.
ورود مستقیم آرایه
در مثال زیر یک آرایه در ورودی XOR آمده است.
=XOR({1,0,9,1})
میتوانید ? مسیر ذهنی زیر را دنبال کنید:
- در آرایه 4 عدد داریم، با مقادیر 1 و 0 و 9 و 1.
- مقدار صفر معادل FALSE است که طبق آنچه درباره XOR گفتیم، به آن کاری به آن نداریم.
- اما مقادیر 1 و 1 و 9 هرکدام معادل یک ورودی TRUE هستند.
- پس در کل 3 ورودی TRUE در آرایه داریم و چون عدد 3 فرد است، پس خروجی تابع TRUE خواهد بود.
نوشتن عبارت منطقی در ورودیهای تابع XOR
به شکلهای مختلفی میتوان ورودیهای تابع XOR را نوشت که در ادامه مثالهایی از آن را خواهید دید:
استفاده از عملگرهای منطقی
برای وارد کردن عبارت منطقی در ورودیهای تابع XOR، میتوانید از عملگرهای شرطی = و <> و < و > و <= و => استفاده کنید.
در مثال بعدی ورودیهای منطقی تابع با عملگرهای = و بزرگترمساوی ساخته شدهاند:
✅ رفتن به بازی سوم با XOR
فرض کنید در حال برگزاری یک مسابقه ورزشی هستید و میخواهید با استفاده از اکسل، به طور خودکار مشخص کنید که کدام شرکت کنندگان باید در مرحله بعد (مثلاً بازی سوم) رقابت کنند.
⚽ قوانین بازی:
- اگر افراد هر دو بازی اول را برده باشند، به طور مستقیم به مرحله بعد صعود میکنند و به شرکت در بازی سوم نیازی ندارند.
- اگر افراد هر دو بازی اول را باخته باشند، حذف میشوند.
- اگر فقط یکی از دو بازی اول را برده باشند، باید در بازی سوم شرکت کنند.
◀️ راه حل:
توجه داشته باشید:
- فرض کنید، ستون B و C به ترتیب نتایج بازی اول و دوم یک شرکت کننده هستند.
- با توجه به اینکه سطر اول مربوط به عناوین ستونهاست، اطلاعات از سطر دوم شروع میشود.
- ما فرمول را برای سطر دوم مینویسیم و برای بقیه سلولها کپی خواهیم کرد.
- بنابراین B2 و C2 به ترتیب نتایج بازی اول و دوم شرکت کننده هستند.
همانطور که تا اینجا گفتهایم، XOR با دو ورودی در صورتی TRUE برمیگرداند که فقط یکی از آنها TRUE باشد.
در این مثال هم ما شرایطی را میخواهیم پیدا کنیم که فرد فقط در یک بازی برده است.
بنابراین با استفاده از تابع XOR در اکسل، میتوان به راحتی افرادی را مشخص کرد که قرار است وارد بازی سوم شوند:
=XOR(B2="win", C2="win")
در فرمول بالا، اگر شرکت کننده فقط یکی از دو بازی را برده باشد، XOR مقدار TRUE را برمیگرداند و نشان میدهد که باید در بازی سوم شرکت کند.
ترکیب با سایر توابع منطقی
میتوان حالات پیچیدهتری را به کمک ترکیب توابع منطقی ایجاد کرد.
برای مثال فرمول را در نظر بگیرید:
=NOT(XOR(A1, B1))
بیایید ? مسیر ذهنی زیر را در نظر بگیریم:
- تابع XOR حالاتی را در نظر میگیرد که فقط یکی از A1 یا B1 درست (TRUE) باشند.
- اما تابع NOT، نقیض عملکرد XOR را نتیجه میدهد.
- یعنی حالاتی یا هر دو درست باشند و یا هر دو غلط باشند (همزمان).
- فرمول فوق دقیقاً عکس تابع XOR خواهد بود.
حرف X از کجا آمده است؟!
ممکن است بپرسید که حرف X در ابتدای نام این تابع از کجا آمده است.
اصطلاح XOR از عبارت Exclusive OR گرفته شده است. کلمه Exclusive را میتوانید به شکلهای مختلفی به فارسی برگردانید که یکی از آنها معنای "انحصاری" است؛ و معنی آن این است که انحصاراً یکی از عبارتهای منطقی بایستی درست باشد.
البته این صرفاً ریشه نام این تابع را مشخص میکند و وقتی تعداد ورودی از 2 مورد بیشتر میشود، عملکرد XOR این طور نیست که صرفاً به دنبال وجود یک ورودی TRUE باشد. بلکه همان طور که گفتیم، به دنبال فرد بودن ورودیهای TRUE است.
این در واقع برخلاف تابع OR است که میتوان آن را inclusive OR به حساب آورد. تابع OR در صورت درستی (TRUE) بودن هر یک از ورودیها مقدار درست (TRUE) را برمیگرداند، اما XOR فقط صورتی مقدار درست (TRUE) را برمیگرداند که تنها یک ورودی درست باشد (با 2 ورودی). پس میتوان XOR را به صورت OR انحصاری دانست.
جمعبندی
- از تابع XOR میتوان در مواردی چون مدلسازی تصمیمها استفاده کرد.
- بیشتر کاربرد XOR به موضوعات طراحی مدارهای منطقی برمیگردد و خارج از موضوع کاربری عمومی اکسل است.