02-04-2020، 5:48
(آخرین ویرایش در این ارسال: 04-04-2020، 4:45، توسط The moon.
دلیل ویرایش: افزودن تصاویر/
)
I:
همونجور که میدونید طراحی الگوریتم یکی از مباحث مهم و کلیدی برنامهنویسی (و علوم کامپیوتر، و صد البته ترکیبیات) هست که یادگیریش شدیدا در افزایش مهارت حل مسائل و نوشتن برنامه موثره. با این تعاریف ممکنه فراگرفتن چنین چيزی دشوار به نظر برسه... در صورتی که اصلا اینطور نیست! اما یکی از بهترین مهارتهاییه که یک برنامهنویس میتونه داشته باشه...
اول بیاین با یه مثال ساده شروع کنیم! شما چطور فیلمی رو دانلود میکنین؟
-شروع-
I. مرورگر وب رو باز کن.
II. اسم فیلم مورد نظرت رو سرچ کن.
III. از بین سایتهایی که جلوتن رندوم وارد یکیشون شو.
IV. برای دانلود از این سایت لازمه اشتراک داشته باشی؟
V. از سایت خارج شو و مرحلهی 3 رو تکرار کن.
VI. فیلم رو دانلود کن —> به مرحلهی هفت برو.
VII. فیلم رو ببین.
-پایان-
*تمرین: یه پدیدهی روزمرهی زندگیتونو درنظر بگیرین و یه الگوریتم واسش طراحی کنین، فکر کنین ببینین تا چه حد میشه به این الگوریتم جزئیات بخشید؟
تا اینجا احتمالا دستتون اومده الگوریتم چیه... مورد خط بعد اشارهی کوتاهی به الگوریتم حل یک نوع خاص از مسئلههای ریاضیه... "الگوریتم حل معادلهی درجه دوم:
-شروع-
I. معادلهی ax^2+bx+c=0 رو بگیر.
II. چهار ضربدر ac را از مربع b کم کن.
III. اگر پاسخ از 0 کوچکتر بود —> چاپ کن «معادله جواب ندارد.»
IV. اگر پاسخ برابر 0 بود —> منفیِ b به روی 2a رو محاسبه کن و نتیجه رو چاپ کن.
V. اگر پاسخ از 0 بزرگتر بود —> منفیِ b + رادیکال پاسخ به روی 2a رو محاسبه کن؛ منفیِ b - رادیکال پاسخ به روی 2a رو محاسبه کن. نتایج رو چاپ کن."
-پایان-
پ.ن: الگوریتم بالا از فرمول کلی حل معادلات درجه 2 گرفته میشه، پس به طبع هر فرمولی که نقشهی حل مسئله رو بهمون میده به نوعی یک الگوریتم هم هست.
پ.ن۲: این الگوریتم میبایستی جزئیات بیشتری میداشت... منتها به عنوان اولین بخش ساده (و ناقص) نگهش داشتم (:
ویژگی های یک الگوریتم چیا هستن؟
I. یک نقطهی شروع و یک نقطهی پایان داشته باشه.
II. بعد از اجرای همهی دستورات حتما باید به هدف معینی برسیم.
III. دستورالعمل های الگوریتم "باید" قابل اجرا باشن.
IV. در روند اجرای الگوریتمها دستورات بایستی مفهوم رو کاملا آشکار برسونن و ابهامی نداشته باشن.
V. الگوریتم باید حتما حداقل یک نتیجه به عنوان خروجی داشته باشه.
VI. تعداد دستورات باید مشخص باشن.
فلوچارت چیه؟
اگر به موارد بالا دقت کنین با وجود اینکه مثال های خیلی ابتداییای هستن متوجه پیچیدگی نوشتار میشید. در واقع، هر الگوریتمی نیاز به ساده سازی داره (به نحوی که خوندنش برای همه آسون و قابل فهم باشه)... پس فلوچارت به وجود میاد. فلوچارت نمودار خاصی هست که با استفاده از یک استانداردِ اَشکال و نماد های خاص روند الگوریتم رو به ما شرح میده... این نماد ها از قبل تعیین شدن و کافیه بدونیمشون تا بتونیم الگوریتم رو تبدیل/تفسیر کنیم.
همونجور که میدونید طراحی الگوریتم یکی از مباحث مهم و کلیدی برنامهنویسی (و علوم کامپیوتر، و صد البته ترکیبیات) هست که یادگیریش شدیدا در افزایش مهارت حل مسائل و نوشتن برنامه موثره. با این تعاریف ممکنه فراگرفتن چنین چيزی دشوار به نظر برسه... در صورتی که اصلا اینطور نیست! اما یکی از بهترین مهارتهاییه که یک برنامهنویس میتونه داشته باشه...
اول بیاین با یه مثال ساده شروع کنیم! شما چطور فیلمی رو دانلود میکنین؟
-شروع-
I. مرورگر وب رو باز کن.
II. اسم فیلم مورد نظرت رو سرچ کن.
III. از بین سایتهایی که جلوتن رندوم وارد یکیشون شو.
IV. برای دانلود از این سایت لازمه اشتراک داشته باشی؟
اگر نه —> به مرحلهی شش برو. / اگر آره —> به مرحلهی پنج برو.
V. از سایت خارج شو و مرحلهی 3 رو تکرار کن.
VI. فیلم رو دانلود کن —> به مرحلهی هفت برو.
VII. فیلم رو ببین.
-پایان-
*تمرین: یه پدیدهی روزمرهی زندگیتونو درنظر بگیرین و یه الگوریتم واسش طراحی کنین، فکر کنین ببینین تا چه حد میشه به این الگوریتم جزئیات بخشید؟
-شروع-
I. معادلهی ax^2+bx+c=0 رو بگیر.
II. چهار ضربدر ac را از مربع b کم کن.
III. اگر پاسخ از 0 کوچکتر بود —> چاپ کن «معادله جواب ندارد.»
IV. اگر پاسخ برابر 0 بود —> منفیِ b به روی 2a رو محاسبه کن و نتیجه رو چاپ کن.
V. اگر پاسخ از 0 بزرگتر بود —> منفیِ b + رادیکال پاسخ به روی 2a رو محاسبه کن؛ منفیِ b - رادیکال پاسخ به روی 2a رو محاسبه کن. نتایج رو چاپ کن."
-پایان-
پ.ن: الگوریتم بالا از فرمول کلی حل معادلات درجه 2 گرفته میشه، پس به طبع هر فرمولی که نقشهی حل مسئله رو بهمون میده به نوعی یک الگوریتم هم هست.
پ.ن۲: این الگوریتم میبایستی جزئیات بیشتری میداشت... منتها به عنوان اولین بخش ساده (و ناقص) نگهش داشتم (:
ویژگی های یک الگوریتم چیا هستن؟
I. یک نقطهی شروع و یک نقطهی پایان داشته باشه.
II. بعد از اجرای همهی دستورات حتما باید به هدف معینی برسیم.
III. دستورالعمل های الگوریتم "باید" قابل اجرا باشن.
IV. در روند اجرای الگوریتمها دستورات بایستی مفهوم رو کاملا آشکار برسونن و ابهامی نداشته باشن.
V. الگوریتم باید حتما حداقل یک نتیجه به عنوان خروجی داشته باشه.
VI. تعداد دستورات باید مشخص باشن.
فلوچارت چیه؟
اگر به موارد بالا دقت کنین با وجود اینکه مثال های خیلی ابتداییای هستن متوجه پیچیدگی نوشتار میشید. در واقع، هر الگوریتمی نیاز به ساده سازی داره (به نحوی که خوندنش برای همه آسون و قابل فهم باشه)... پس فلوچارت به وجود میاد. فلوچارت نمودار خاصی هست که با استفاده از یک استانداردِ اَشکال و نماد های خاص روند الگوریتم رو به ما شرح میده... این نماد ها از قبل تعیین شدن و کافیه بدونیمشون تا بتونیم الگوریتم رو تبدیل/تفسیر کنیم.