
اوایل وقتی به مسالهای برمیخوردم که کمی برام مشکل بود، حوصله فکر کردن رو نداشتم یا میخواستم فورا اون مساله رو تو ذهنم حل کنم، بنابراین کمی برام سخت میشد، غافل از اینکه برای حل مساله مهمترین فاکتورها فکر کردن، فکر کردن، فکر کردن است. تا خیلی از چراها رو در ذهنت حل نکنی نمیتوان به یه ساختار ساده از حل مساله رسید.
ساعت صفر برنامه نویسی ; مساله سخت چیست؟
به مسالهای گفته میشه که ذهن رو درگیر چالشهای فراوان کنه و برای آماتورها ناامیدی به ارمغان بیاره:). البته قسمت آخر طنز تلخی بود. در واقع مساله سخت متشکل شده از چند مساله ساده که وقتی بهم پیوستهاند در ذهن انسان پیچیده به نظر میرسند.
یه مثال براتون میزنم:
پیدا کردن اعداد اول در یک آرایه از اعداد.
در نگاه اول اصلا شاید ندونیم اعداد اول چیه؟! و ممکنه از فکر کردن بهش عاجز بشیم. در واقع ما به آخر کار فکر کردهایم که کار رو برامون مشکل میکنه در حالیکه باید نگاه به مسیر بکنیم. اگر شما فقط به آخر کار نگاه بکنید، چون ذهن انسان در وهله اول در مقابل مشکلات پیچیده یا سخت کمی مقاومت میکنه ممکنه اصلا سراغ حل اون مساله نروید. و همین موضوع باعث میشه مساله نزد اشخاص آماتور سخت بنظر برسه.
یه راه حل کوچیک ولی کاملا بدرد بخور برای حل مساله
مساله های سخت و بزرگ رو به مسالئل کوچیک تبدیل کنید، و پله به پله زنجیروار اون مسالههای کوچک رو حل کنید.
برگردیم به مساله پیدا کردن اعداد اول در یک آرایه از اعداد:
1- در وهله اول باید بدانیم اعداد اول چیست:
اعداد اول به اعدادی گفته میشه که فقط بر خود و بر عدد یک بخش پذیر باشند.
مثال:
عدد 7 یک عدد اول است چون :
7 / 7 = 1
7 / 1 = 7
اما : 7 / 4 = عددی اعشاری
برای مثال عدد غیر اول میتوان عدد 9 رو مثال زد چون هم بر خودش هم عدد 1 و هم بر 3 بخش پذیر است.
خب تا اینجا با معقوله عدد اول در این مساله آشنا شدیم پس مساله کوچک اولش رو حل کردیم. خب حالا که فهمیدیم اعداد اول چگونه کار میکنند، باید مساله بعدی رو حل کنیم:
مساله کوچک دوم :
اینجا سوالات حل مساله رو باید طرح کنیم:
من سه تا شرط باید بنویسم یکی بخش بر خودش یکی بخش بر عدد یک (این دوتا شرط باید باشد) شرط سوم بخش بر اعداد غیر از این دوتا نباید بشه!!
وقتی شروط رو دارین به راحتی میتونید کد خودتون رو بنویسید. ولی شرط سوم یکم سخته.
تو پرانتز یک موضوع مهم رو بهتون بگم : دوستان برنامه نویس قرار نیس تمام کدهای عالم رو تو ذهنش جا بده، درسته باید موارد مهم رو حتما بلد باشی ولی قرار نیست از مغزت برای به یاد اوردن کد یا تگ یا متد استفاده کنید! مغز انسان برای تفکر و تدبر باید استفاده بشه
خب برسیم به شرط سوم، شرط سوم یکم کار رو پیچیده میکنه چون شما هی باید موارد شرطگذاری اعداد مختلف رو بذارید. پس باید دنبال ساختار ریاضیای باشیم که مرحله پیچیده کار رو از بین ببره:
میتونیم از جذر یا sqrt برای این کار استفاده کنیم و حلش کنیم. بدین صورت که یه function ایجاد میکنیم با آرگمان دلخواه
function isPrime(items) {
for(let i = 2 ; i < Math.sqrt(items);
if(items % i === 0) {
console.log(false)} else{
console.log(true)}
}
تو اسکریپت بالا یه تابع ساختیم که یه حلقه رو ایجاد میکنه که این عمل رو انجام میده
متغیر i برای این از 2 شروع میشه چون اگر همه ی اعداد بر 1 بخش پذیر هستند تابع ریاضی Math.sqrt مساله رو از پیچیدگی در میاره .
شرط هم که مشخصه.
حالا ما اگر تابع رو اجرا کنیم اگر عددمورد نظری که گذاشتیم عدد اول نباشه false رو برمیگردونه در غیر اینصورت true رو برمیگردونه. و براحتی مساله حل میشه . دلیل حل مساله هم در وهله اول فهمیدن منطق مساله و در مرحله دوم تقسیم کردن مساله به مسالئل کوچیکتر و حل کردن اون مسائل بود.
امیدوارم از این مطلب خوشتون اومده باشه
اگر بخشی از مطلب براتون فهمیدنش مشکل بود تو قسمت نظرات اعلام کنید حتما بهتون توضیح خواهم داد.