الگوریتم چیست؟
الگوریتم مجموعهای از دستورالعملها برای حل یک مسئله است که چهار شرط اساسی دارد:
- ۱به زبان دقیق و غیرمبهم گفته شود؛ هر گام فقط یک تفسیر داشته باشد.
- ۲جزئیات کامل حل مسئله را داشته باشد؛ هیچ گام مهمی حذف نشود.
- ۳ترتیب مراحل مشخص باشد؛ جای گامها قابل جابهجایی نباشد.
- ۴شرط خاتمهٔ عملیات مشخص باشد؛ الگوریتم پس از تعداد متناهی گام پایان یابد.
مراحل حل یک مسئله
مسیر استاندارد از صورت مسئله تا برنامهٔ کارکننده — همان روندی که در طول درس بارها تکرار میکنیم.
- ۱فهم مسئله: دادههای ورودی چیست؟ خروجی مطلوب کدام است؟ شرطها و محدودیتها چه هستند؟
- ۲طراحی الگوریتم: نوشتن گامهای دقیق و شمارهگذاریشده؛ انتخاب نام متغیرهای معنادار.
- ۳ردگیری دستی (trace): اجرای الگوریتم روی یک مثال عددی کوچک و نوشتن مقدار متغیرها در هر گام — کشف خطا پیش از نوشتن کد.
- ۴ترسیم فلوچارت: تبدیل گامهای الگوریتم به شکلهای استاندارد و پیکانهای جریان.
- ۵نوشتن برنامه: پیادهسازی در زبان اصلی (در این درس C++).
- ۶ترجمه و اجرا: کامپایل، اجرا و مقایسهٔ خروجی با انتظار.
- ۷آزمون و اصلاح: امتحان حالتهای مرزی (ورودی صفر، منفی، بزرگ) و اصلاح الگوریتم.
مثال و جدول ردگیری
مسئله: الگوریتمی بنویسید که دو عدد را دریافت کند، مجموع آنها را محاسبه و چاپ کند. نام متغیرها: x و y برای ورودیها و s برای حاصلجمع.
| گام | دستور |
|---|---|
| ۰ | شروع |
| ۱ | x و y را بخوان |
| ۲ | s ← x + y |
| ۳ | s را چاپ کن |
| ۴ | پایان |
ردگیری گامبهگام (trace)
برای x = 3 و y = 4 در هر گام مقادیر متغیرها را مینویسیم:
| گام | x | y | s | خروجی |
|---|---|---|---|---|
| ورود | 3 | 4 | تعریفنشده | — |
| ۲ (انتساب) | ۳ | ۴ | 7 | — |
| ۳ (چاپ) | ۳ | ۴ | ۷ | ۷ |
#include <iostream> int main() { int x, y, s; std::cin >> x >> y; // گام ۱: خواندن s = x + y; // گام ۲: انتساب std::cout << s; // گام ۳: چاپ return 0; // گام ۴: پایان }
بیان الگوریتم با شکلها: فلوچارت
تعریف گرافیکی الگوریتم را فلوچارت گویند. فلوچارت یک نقشه است و الگوریتم آدرسی که در آن نوشته شده؛ این دو مکمل یکدیگرند. ابتدا الگوریتم نوشته میشود، سپس به فلوچارت تبدیل میشود.
نماد هر کار
| نماد | کاربرد | نکته |
|---|---|---|
| بیضی (terminal) | شروع و پایان الگوریتم | هر فلوچارت دقیقاً یک شروع و یک پایان دارد |
| متوازیالاضلاع (input/output) | خواندن ورودی، چاپ خروجی | داخل آن با فعل «بخوان» یا «چاپ کن» نوشته میشود |
| مستطیل (process) | محاسبه و انتساب | مثل s ← x + y |
| لوزی (decision) | شرط دوراهی | یک خروجی «درست» و یک خروجی «نادرست» با برچسب |
| اتصالدهنده (connector) | ادامهٔ نمودار در جای دیگر صفحه | برای جلوگیری از خطوط شلوغ؛ بهکارگیری در حلقهها |
نمونههای کامل
سه نمونهٔ کامل: یک الگوریتم سادهٔ خطی، یک الگوریتم با شرط، و یک الگوریتم با حلقه. مقایسهٔ این سه، اسکلت همهٔ برنامههای بعدی شماست.
الف) مجموع دو عدد — الگوریتم خطی
ب) بزرگترین دو عدد — الگوریتم با شرط
ج) مجموع اعداد ۱ تا n — الگوریتم با حلقه
| ساختار | نماد کلیدی | معادل در کد |
|---|---|---|
| ترتیبی | مستطیلهای پشت سر هم، بدون انشعاب | دستورهای پیاپی در main |
| انتخابی (شرط) | لوزی با دو خروجی | if / else |
| تکرار (حلقه) | بازگشت مسیر به لوزیِ شرط | while یا for |
در فلوچارت، نماد لوزی نشاندهندهٔ چیست؟
- خواندن ورودی
- محاسبه و انتساب
- شرط و تصمیم دوراهی
- شروع و پایان
نمایش پاسخ
بهروزرسانی با دانش امروز
مفاهیم الگوریتم و فلوچارت تغییر نکردهاند؛ آنچه عوض شده، زبان توصیف، ابزار ترسیم و معیار سنجش کیفیت است.
| مفهوم | در اسلایدهای منبع | امروز (۲۰۲۶) |
|---|---|---|
| تعریف الگوریتم | چهار شرط: دقیق، کامل، مرتب، دارای شرط خاتمه | همان چهار شرط در منابع امروزی بهشکل پنج ویژگی صورتبندی میشود: ورودی، خروجی، روشنی، متناهیبودن و کارآمدی؛ و برای برنامههای بزرگ به بحث تحلیل پیچیدگی (مرتبهٔ زمانی و حافظه) افزوده میشود. |
| زبان بیان الگوریتم | متن فارسی و شمارهگذاریشده؛ سپس فلوچارت | شبهکد (pseudocode) و زبان پایتون بهعنوان «شبهکد اجراپذیر»؛ فلوچارت هنوز برای آموزش ساختار و گفتوگوی تیمی بهکار میآید. |
| استاندارد نمادها | نمادهای کلاسیک فلوچارت (بیضی، مستطیل، لوزی) | نمادها هماناند و در استاندارد ISO 5807 تعریف شدهاند؛ در صنعت نمودارهای UML (نمودار فعالیت، توالی، حالت) و BPMN برای فرایندهای کسبوکار جای آنها را در مستندات فنی گرفتهاند. |
| ابزار ترسیم | Flowgorithm روی رایانهٔ شخصی | ابزار مرورگری، نمودار متنی با Mermaid و PlantUML (قابل نگهداری در Git)، draw.io، Excalidraw، و تولید خودکار نمودار از سوی دستیارهای هوش مصنوعی. |
| ردگیری و اشکالزدایی | اجرای دستی روی کاغذ (trace) | ردگیری دستی همچنان مهارت پایه است، اما امروز با دیباگر (نقاط توقف، اجرای گامبهگام، دیدن متغیرها)، آزمون یکا و ابزارهای پویش خطا کار میکنیم. |
| معیار کیفیت | «کار میکند» بهعنوان معیار کافی | کیفیت = درستی + کارآمدی. دو الگوریتم درست میتوانند مرتبهٔ زمانی متفاوت داشته باشند؛ مثلاً یافتن عدد در فهرست مرتب با جستوجوی دودویی در حداکثر حدود ۲۰ گام برای یک میلیون عدد، در برابر تا یک میلیون گام در جستوجوی خطی. |
| منبع الگوریتم | الگوریتم را انسان مینویسد | بخشی از الگوریتمها امروز توسط یادگیری ماشین ساخته میشوند: مدل، «قواعد» را از داده استخراج میکند. اما همچنان باید ورودی، خروجی، شرط خاتمه و سنجهٔ درستی را انسان تعریف کند — همان چهار شرط این فصل. |
نقشهٔ پوشش منبع — کدام بخش این صفحه از کدام اسلاید استخراج شده است.
| بخش این صفحه | اسلایدهای منبع |
|---|---|
| ۵.۱ الگوریتم چیست | اسلاید ۲ |
| ۵.۲ مراحل حل مسئله | اسلاید ۲ |
| ۵.۳ مثال و ردگیری | اسلاید ۳ |
| ۵.۴ فلوچارت و نمادها | اسلاید ۴ |
| ۵.۵ نمونههای کامل | افزودهٔ سرویراستار (نمونههای شرط و حلقه) |
| ۵.۶ بهروزرسانیها | افزودهٔ سرویراستار (دانش ۲۰۲۶) |
پازل مفاهیم فصل
همهٔ مفاهیم این فصل، یکجا و بهشکل یک بازی: هر مفهوم را انتخاب کنید و به تعریف درستش وصل کنید — جفت درست همان لحظه سبز میشود و به آسمانِ جدول میپرد، جفت اشتباه با یک جرقه باز میشود. وقتی همهٔ جفتها کامل شد، «بررسی پاسخها» را بزنید تا بالنها بترکند و در آسمانِ جدول به هم گره بخورند. هر وقت خواستید پاسخنامه را ببینید، دکمهٔ «نمایش پاسخها» آن را کامل نشان میدهد.