پوریا بابایی

آموخته های من از مهندسی کامپیوتر - به زبان ساده، قابل فهم و کاربردی

پوریا بابایی

آموخته های من از مهندسی کامپیوتر - به زبان ساده، قابل فهم و کاربردی

برنامه نویسی مقدماتی - جلسه شماره یک

پوریا بابایی | جمعه, ۳۰ فروردين ۱۳۹۲، ۰۲:۰۸ ق.ظ

برنامه نویسی مقدماتی – جلسه اول

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

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

مسئله شماره یک : فرض کنید که شما یک آشپز بسیار حرفه ای و سرشناس هستید. و مدیر یک مجله معتبر بین المللی هم از شما خواسته تا دستور پخت نیمرو رو برای اون بفرستید تا اون هم تو مجلش چاپ کنه! اون چیزی که میخوام ازتون انجام بدین اینه که  قبل از ادامه خوندن مطلب، همین الآن یک کاغذ و قلم بردارین و شروع کنید به نوشتن دستورات لازم برای طبخ نیمرو! (زمان لازم برای انجام این تمرین 5 دقیقه)

خب من هم مثل شما این مسئله رو حل می کنم. بعد میتونیم جواب هامون رو با هم مقایسه کنیم. دستورات من اینجورین:

1. شروع

2. کف ماهیتابه رو به روغن آغشته کنید

3. ماهیتابه رو روی شعله ملایم اجاق قرار بدید

4. یک عدد تخم مرغ رو توی یک کاسه کوچک بشکنید و کمی نمک و زردچوبه به اون اضافه کنید

5. اونقدر تخم مرغ رو به هم بزنید تا زمانی که به رنگ سفید در بیاد و کمی هم کف کنه

6. تخم مرغ رو داخل ماهیتابه بریزید

7. بعد از 30 ثانیه تا یک دقیقه تخم مرغ رو چک کنید که آیا رنگ تخم مرغ، طلایی شده یا نه؟

8. اگر تخم مرغ به رنگ طلایی در اومده بود به دستور شماره 9 برید، در غیر اینصورت اونقدر صبر کنید تا تخم مرغ طلایی رنگ بشه و بعد به دستور 9 برید.

9. نیمروی شما آماده شده است. اون رو در یک بشقاب بریزید و نوش جان کنید

10. پایان

تمرین خیلی ساده ای بود. چقدر دستوراتتون شبیه دستورات من بود؟ اصلا ببینیم دستوراتی که من نوشتم چه ویژگی خاصی دارند!؟

اول این که این دستورات به صورت مراحل پشت سر هم نوشته شدن.

دوم این که هر مرحله به قطعیت تعیین میکنه که چه کاری باید در اون مرحله انجام بشه.

سوم این که دستورات از یه جایی شروع میشن و بعد از تعداد قابل شمارشی دستور در یک جا هم تموم میشن.

ویژگی چهارم اینه که این الگوریتم مستقل از شرایط و در حالت کلی، همیشه درست کار میکنه.

ویژگی پنجم اینه که این مسئله ما یک ورودی داشت (تخم مرغ خام) و یک خروجی هم داشت (تخم مرغ پخته شده). البته لازم نیست تا همه الگوریتم ها ورودی داشته باشند اما دست کم یک خروجی دارند. اگه با ویژگی پنجم مشکل دارید، بعدا در موردش زیاد خواهید شنید. پس نگران نباشید.

خب حالا بررسی کنید آیا الگوریتمی که خودتون برای مسئله آشپزی نوشتین این پنج تا ویژگی رو داره یا نه؟


یک نکته دیگه هم هست و اون اینه که راه حل من تنها راه حل ممکن برای حل مسئله شماره یک نیست و ممکنه چندین راه حل دیگه هم برای اون مسئله وجود داشته باشه. خب بریم سراغ تمرین بعدی!


مسئله شماره 2 : فرض کنید در یک کیسه تعداد نامشخصی مهره به رنگهای آبی، قرمز و سیاه وجود داره. از ما خواسته شده تا مهره های این کیسه رو به تفکیک رنگ دسته بندی کنیم. برای این کار سه تا کیسه خالی هم به ما دادند. یک کیسه برای مهره های آبی، یکی برای مهره های قرمز و یکی هم برای مهره های سیاه. همین حالا قلم و کاغذ رو بردارین و شروع کنید به نوشتن الگوریتمی که این کار رو به درستی انجام بده. (زمان لازم برای این تمرین 2 دقیقه)

من هم شروع میکنم به نوشتن، شما میتونید جوابتون رو با جواب من مقایسه کنید:

1. شروع

2. مراحل 3 تا 6 را اونقدر تکرار کن تا کیسه ی اصلی خالی از مهره بشه

3. یک مهره از داخل کیسه ی اصلی بردار و به رنگ اون نگاه کن

4. اگر رنگ مهره آبی هست اون رو توی کیسه آبی قرار بده

5. در غیر این صورت اگر رنگ مهره قرمز هست اون رو توی کیسه قرمز قرار بده

6. در غیر این صورت مهره رو توی کیسه سیاه قرار بده (توضیح : اگر رنگ مهره، آبی و قرمز نبوده باشه حتما رنگش سیاه هست)

7. پایان

خب جلسه اول تمام شد! به همین سادگی! اما در جلسه دوم مسئله ها سخت تر خواهند شد. علی الحساب تا جلسه دوم، مسئله شماره سه رو خودتون حل کنید :

مسئله شماره سه : 10 عدد کارت داریم که روی اونها اعداد یک تا ده نوشته شده (روی هر کارت یک عدد). از ما خواسته شده الگوریتمی ارائه کنیم تا کارت ها رو به دو دسته زوج و فرد تقسیم کند. به طوری که کارتهای با شماره زوج در دسته زوج و کارت های با شماره فرد در دسته فرد قرار بگیرند. (زمان لازم برای این تمرین 3 دقیقه)


خدانگهدار تا جلسه دوم

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
تجدید کد امنیتی