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

فرض کنید که میخواهیم فلوچارتی رسم کنیم که دو عدد از ورودی دریافت کند و بزرگترین آنها را نمایش بده. برای رسم این فلوچارت ما به ساختار شرط نیاز داریم،  به این شکل که اول باید  x و y رو از ورودی دریافت کنیم و با یک شرط ساده بررسی کنیم که x بزرگتره یا y. چ همانطور که در آموزش جلسه قبل گفتم برای استفاده از شرط باید از لوزی استفاده کنیم. به فلوچارت زیر دقت کنید تا با ساختار شرط بیشتر آشنا بشید:

یک ساختار شرط ساده

همانطور که در فلوچارت بالا میبینید از شرط x>=y  استفاده شده است که این شرط دو حالت دارد یا حاصل این شرط درسته که به این معنیه که  x از y بزرگتره و یا حاصل این شرط غلطه به این معنی که y از x بزرگتره.  بنابراین شرط  x بزرگتر مساوی y دو حالت داره یا درسته یا غلط! اگر درست باشه دستور سمت راست اجرا میشه (x را چاپ کن ) و اگر  غلط باشد دستور سمت چپ اجرا میشه(y  را چاپ کن)

همیشه یادتون باشه که حاصل شرط در فلوچارت دو حالت داره پس برای شرطی که می نویسیم همیشه باید هر دو وضعیت شرط رو رسم کنیم (حالت yes و no)

مثال 1 - فلوچارت برنامه رسم کنید که یک عدد از ورودی دریافت کند و زوجیت آن عدد را مشخص کند

(زوجیت به این معنی که اگر عدد زوج باشد در خروجی چاپ کند زوج است در غیر این صورت در خروجی چاپ کند فرد است)

برای نوشتن فلوچارت این مسئله اول باید ببینیم که از کجا بفهمیم که عدد x زوج است؟ برای تشخیص زوج بودن یک عدد ممکن است گزینه های زیر به ذهن شما برسد:

 1- اگر x = 2k باشد، x زوج است
2-  x بر 2 بخش پذیر باشد،  x زوج است
3–  اگر باقیمانده x بر2 دو برابر صفر باشد،  x زوج است

از بین سه گزینه بالا گزینه ۱ و ۲ روش های خوبی برای نوشتن فلوچارت نیستند و ابهام دارند. چرا؟
اگر از کاربر x را دریافت کنیم و در فلوچارت بنویسیم آیا x مساوی 2k است؟ برای کامپیوتر عدد k مبهم است
یا در روش دوم اگر بنویسیم x بر ۲ بخش پذیر است ؟ برای کامپیوتر بخش پذیر بودن تعریف نشده است و مبهم است.

 اما در روش سوم به صورت صریح و دقیق به کامپیوتر میگیم که باقیمانده x بر 2 رو محاسبه کنه، اگر برابر با صفر بود به این معنیه که x زوجه و در غیر این صورت x فرده.
در برنامه نویسی عملگر باقیمانده رو با درصد نشون میدیم مثلاً x%2 یعنی باقیمانده x بر 2.

در ادامه فلوچارت این سوال رو می‌بینید:

فلوچارت زوجیت یک عدد
مثال 2 - فلوچارت برنامه‌ای رسم کنید که اگر کاربر عدد 1 را وارد کرد در خروجی چاپ کند "پرسپولیس" و اگر 2 را وارد کرد چاپ کند "استقلال" و اگر عددی به غیر از این وارد کند، در خروجی "ورودی نامعتبر است" را چاپ کند.

رسم این فلوچارت نکته جدیدی نداره و پیشنهاد می کنم که قبل از دیدن فلوچارت این مسئله ،این سوال رو خودتون حل کنید

فلوچارت پرسپولیس و استقلال
مثال 3 - فلوچارت برنامه‌ای رسم کنید که در آن سه کاربر اعداد 1 یا 2 را به برنامه می‌دهند که 1 یعنی هوادار پرسپولیس است و 2 یعنی هوادار استقلال است. در نهایت تعداد طرفداران پرسپولیس و استقلال را چاپ کند.

برای اینکه که ذهنیت درست تری در حل این مسئله پیدا کنید یک سوال از شما می پرسم، در عکس زیر چند کامپیوتر می بینید؟

شمارنده

مطمئناً در جواب این سوال بدون اینکه فکر کنید به صورت چشمی کامپیوترها را نگاه کردید و گفتید 3 تا کامپیوتر! حالا سوالم رو تکرار می کنم و برای عکس زیر بگید چند تا کامپیوتر میبینید؟

شمارنده

احتمالاً شما هم برای شمردن کامپیوترهای این عکس مجبور شدید یکی یکی کامپیوترها رو بشمارید تا متوجه بشید که ۱۵ کامپیوتر در این تصویر وجود داره. الگوریتم شمارش هم دقیقاً به همین شکل عمل میکنه ،کامپیوتر نمیتونه چشمی نگاه کنه و تعداد کامپیوتر ها رو به من بگه، حتماً باید یکی یکی عمل شمارش رو انجام بده. پس یک متغیر به نام counter (شمارنده) باید تعریف بشه که هر بار به شمارش نیاز پیدا شد یه دونه به کانتر اضافه کنیم. برای حل مسئله اصلی ما هم از این ایده استفاده می کنیم یعنی ۵ عدد از کاربر دریافت می کنیم  و یکی یکی اعداد را بررسی میکنیم  اگر عدد برابر با یک بود به این معنی است که طرفدار پرسپولیسه و باید به شمارنده مربوط به پرسپولیسی ها یکی اضافه کنیم و اگر برابر با 2 بود باید به شمارنده استقلالی ها یکی اضافه کنیم .

برای حل این مسئله به دو شمارنده نیاز داریم شمارنده ای برای پرسپولیسی ها(counterP) و شمارنده های برای استقلالی ها (counterE).
با دقت فلوچارت زیر را دنبال کنید: 

فلوچارت تعداد پرسپولیسیها و استقلالی ها
سوال چالشی: در فلوچارت قبلی با استفاده از پنج شرط مسئله را حل کردیم. شما میتوانید این مسئله را بدون استفاده از شرط و لوزی حل کنید؟

(این مساله یکی از سوالات المپیاد کامپیوتر است که هم در کتاب الگوریتم و فلوچارت و هم در دوره آموزشی الگوریتم و فلوچارت این مساله را حل کرده ام)

کتاب الگوریتم و فلوچارت

در این کتاب در قالب 6 فصل مفاهیم و اصول برنامه نویسی رو با 100 مثال و تمرین به شما آموزش دادم
خرید کتاب از کتابراه

دوره آموزشی الگوریتم و فلوچارت

در این دوره در قالب 6 ویدیو مفاهیم و اصول برنامه نویسی رو در قالب مثالهای متنوع به شما آموزش میدهم
خرید دوره + پشتیبانی رایگان
مثال 4: فلوچارت برنامه‌ای رسم کنید که پنج عدد را از ورودی دریافت کند و تعداد اعداد زوج آنها را چاپ کند.

اگر ایده سوال قبلی را به خوبی متوجه شده باشید انتظار دارم که این مسئله را خودتان بتوانید حل کنید پس لطفاً قبل از اینکه فلوچارت این مسئله را ببینید سعی کنید خودتان فلوچارت این مسئله را رسم کنید

فلوچارت تعداد اعداد زوج

نکته 1: برای طولانی نشدن فلوچارت، این فلوچارت با 3 عدد نوشته شده است، برای 5 عدد هم به همین شکل است.

نکته 2: در مثال 3 و 4 برای پیدا کردن تعداد هواداران و تعداد اعداد زوج به متغیرهایی برای شمردن آنها نیاز داشتیم. اصطلاحا به این متغیرها شمارنده نیز گفته می‌شود و می‌توان با نام counter نیز از آن استفاده کرد.

مثال 5: فلوچارت برنامه‌ای رسم کنید که بزرگترین عدد بین 3 عدد را چاپ کند. یکی از روشهای حل این مساله مقایسه هر 3 عد با همدیگه است:

این مساله رو به دو روش میتونیم حل کنیم. در روش اول اعداد رو دو به دو با هم مقایسه میکنیم تا بزرگترین عدد پیدا بشه:

فلوچارت بزرگترین عدد

در فلوچارت بالا همه حالتهای ممکن برای مقایسه 3 عدد بررسی شده و مشکل این روش هم همینه! در این مثال به 3 تا شرط نیاز داریم، اما اگر قرار بود بزرگترین عدد بین 5 عدد پیدا بشه و از همین ایده استفاده کنیم به 10 شرط نیاز داشتیم و هر چقدر تعداد اعداد بیشتر بشه شرطهامون خیلی خیلی بیشتر میشن! پس از روش دوم استفاده میکنیم:


برای این مثال می‌توان از قانون زیر استفاده کرد و فلوچارت کوچکتری بکشیم. (این قانون کاربرد زیادی در برنامه‌نویسی دارد.)

قانون: فرض می‌کنیم یک حکم درست است مگر نقیض آن ثابت شود.

برای این مثال فرض می‌کنیم x بزرگترین است مگر نقیض آن ثابت شود! 

فلوچارت بزرگترین عدد - روش بهتر

من این مساله رو در ویدیوی جلسه دوم یوتیوب حل کردم، اگر دوست دارید میتونید فیلترشکنتون رو روشن کنید و روی دکمه زیر کلیک کنید

 

اگه مطالب این جلسه رو یاد گرفتی این 3 تا تمرین رو حل کن

1- فلوچارتی رسم کنید که یک عدد دریافت کند و قدرمطلق آن را چاپ نماید.

2- فلوچارت برنامه‌ای رسم کنید که ضرایب یک معادله درجه 2 را دریافت کند و ریشه های آن را چاپ کند

3- فلوچارت برنامه‌ای رسم کنید که یک عدد صحیح از ورودی دریافت و مشخص کند برای خورد کردن چنین مقدار پولی با سکه‌های یک تومانی، 2 تومانی و 10 تومانی به حداقل چه تعداد سکه نیازمندیم.  (مثلا اگر کاربر 23 را وارد کرد باید در خروجی بنویسد دو سکه 10 تومانی، یک سکه 2 تومانی و یک سکه 1 تومانی

نمونه سوالات الگوریتم و فلوچارت

نمونه سوال و تمرینهای بیشتری میخواهی؟

39 تمرین از سرفصلهای مختلف الگوریتم و فلوچارت که میتونید به عنوان نمونه سوالات امتحانی هم بهش نگاه کنید

دوره آموزش الگوریتم و فلوچارت

این مطلب برات مفید بود؟

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

ممنون که تا اینجا همراه من بودید. اگر از آموزش این پست خوشتون اومد و یا سوالی داشتید حتما در قسمت نظرات با من درمیون بذارید. اگر هم به یوتیوب و یا اینستاگرام دسترسی دارید من رو در این دو پلتفرم دنبال کنید و با لایک ها و کامنتاتون به من انرژی بدید.