الگوریتم و تکنیک های برنامه نویسی

پس از پایان مطالعه این بخش از فراگیر انتظار می رود كه توانایی برخورد با مسائل برنامه نویسی را دارا باشید

  1. مراحل برخورد با مسائل برنامه نویسی را بداند . 
  2. هر یك از مراحل را تحلیل كند . 
  3. مفهوم الگوریتم را بیان كند . 
  4. روش های بیان الگوریتم را بشناسد . 
  5. قادر باشد عملیات مربوط به Trace را انجام دهد و اهمیت آن را بداند.
  6. توانایی تصمیم گیری در مورد استفاده از نوع بیان الگوریتم را داشته باشد.
  7. مراحل برخورد با پروژه ها را بداند و بتواند آن ها را تحلیل کند.

الگوریتم و تکنیک های برنامه نویسی

در این بخش به این موضوع می پردازیم که : مساله ای در اختیار ما قرار می گیرد كه باید به زبان خاصی حل كنیم، چطور باید آن را حل کرد؟

شروع  بخش اول :

مقدمه 
این بخش با بررسی روش های حل یك مساله و مفهوم الگوریتم از دیدگاههای مختلف آغاز می شود .شاید شما هم مثل من از بحث های تئوری خوشتان نمی آید ولی  این بررسی و به دنبال آن مهارتی كه در الگوریتم سازی كسب می كنید، كمك مؤثری در برنامه نویسی به شما خواهد كردپس لطفا با ما همراه شوید .
این مفهوم در ابتدا مشكل به نظر می رسد ولی اطمینان داشته باشید كه با مطالعه دقیق و حل تمرینات مربوطه ، با نوشتن الگوریتم آشنا خواهید شد .
پیش از آشنایی با مفهوم الگوریتم و كاربرد های آن ، بهتر است ابتدا با مساله و جزئیات آن آشنا شویم سپس برای حل مساله یك راه حل منطقی یا الگوریتمی بیابیم .
 

چگونگی نوشتن یك برنامه به زبان خاص 

مراحل 5 گانه حل یک مساله

  1. ورودی ها یعنی : بررسی داده ها یا معلومات مساله (از مساله بپرسید،چی-چیا رو باید حساب کتاب کنم؟)
  2. خروجی ها یعنی: بررسی مجهولات (از مساله بپرسید،چی-چیا باید نمایش داده شود؟)
  3. ارتباط منطقی یعنی : یافتن ارتباط بین داده ها و مجهولات (از مساله بپرسید،چجوری از ورودی به خروجی برسم؟)
  4. ارائه راه حل  یعنی : راه حل یا نقشه كلی مسیر را پیدا كنیم تا طبق آن جلو برویم .  
  5. بیان الگوریتم یعنی : راه حل خود را قدم به قدم بیان کنیم با روشی دلخواه که ترجیحا بهتر است فلوچارت باشد.
 
مثال 1  : 
میانگین دو عدد 10 و 20 را حساب كنید . 
 
  1. ورودی : دو عدد 10 و 20 
  2. خروجی : چاپ میانگین 10 و 20 
  3. رابطه منطقی : روش محاسبه میانگین (مجموع اعداد  تقسیم بر تعداد)
  4. ارائه راه حل : باید برنامه ام 2 عدد 10 و 20 رو خودش داشته باشه (در جاهای مخصوصی كه من بدونم ) بعد اون دو رو از جاشون بردارم و بعد از جمع و تقسیم بر 2 در جای دیگری قرار دهم و با گفتن جای آن ، میانگین این دو عدد را چاپ كنم .
  5. بیان الگوریتم : روش اول بیان الگوریتم شبکه کد
شبه كد : 
  1. شروع 
  2. دو عدد 10 و 20 را بگیر .
  3. 10+20/2 را محاسبه کن و درمكانی (متغیری)به نام  C   قرار بده .
  4. C را چاپ کن.
  5. پایان

شبه كد : بیان الگوریتم با استفاده از كلمات ، عبارات و علائم ریاضی .

روش دوم بیان الگوریتم فلوچارت

فلوچارت :

فلوچارت : نمایش گرافیكی الگوریتم .

 اما چطور فلوچارت بکشیم ؟

 متداول ترین شكلها در فلوچارت :

  • بیضی : مفهوم شروع و پایان را می رساند . 
  • مستطیل : مفهوم عملیات پردازش مثل محاسبات ریاضی 
  • را می رساند. 
  • متوازی الاضلاع : مفهوم این را می رساند كه داده یا داده هایی در حال ورودند و یا اطلاعاتی در حال خروجند. 
  • لوزی : مفهوم چندراهی را می رساند مثلا اگر شرطی برقرار بود از مسیر اول مساله حل شود و اگر شرط برقرار نبود از مسیر بعدی حل شود و …  
  • دایره كوچك   O :  اتصالات ، مثلا در حال نوشتن هستیم اما فضای كافی وجود ندارد با گذاشتن این علامت در هر دو طرف دیگران را متوجه می كنیم
  •  كه این دو با هم ارتباط دارند و ادامه یكدیگرند . 
  •  توضیحات ، برای اینكه برنامه خوانا و قابل فهم باشد. 
  • تكرار :  بیشتر مواقع برنامه های ما مرحله یا مراحلی را دارد كه باید طبق شرایط خاصی دوباره تكرار شود خیلی ساده با برگرداندن فلش به آن مرحله ، تكرار را معلوم می كنیم كه به اصطلاح به این عمل Loop   یا حلقه می گویند.

 نکته : همیشه سعی كنید( چه در الگوریتم و چه در كد برنامه ) برای هر مرحله خود توضیح یا كامنت بگذارید تا هم برنامه خوانا و قابل فهم، برای دیگران و خودتان باشد و هم در بازدید های بعدیتان ، باز متوجه شوید كه چرا مرحله ای را نوشته اید ؟!

استفاده از Trace

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

بهتر است همزمان با نوشتن الگوریتم آنرا Trace  كنیم تا در جریان الگوریتم باشیم و اگر الگوریتم ما مشكلی داشت

قبل از اجرا با كامپیوتر آنرا رفع كنیم و همچنین با Trace  می توان مراحل بعدی الگوریتم را حدس زد و در صورت درستی به  حل مساله اضافه کرد.

اما Trace  چیست ؟   Traceیعنی آزمودن دستی همراه با داده ی نمونه

برای Trace برنامه جدولی میکشیم ، متغیرها و خروجی یا خروجی های برنامه را در سطر اول می چینیم ، و در سطر های بعدی مقادیر آنها را می گذاریم.

مرحله به مرحله جلو میرویم و همینطور مقادیر آنها را با توجه به روند برنامه میگذاریم. تا اینکه به خروجی برسیم .

خروجی بدست آمده را با خروجی مورد انتظار خود مقایسه می کنیم. اگر درست بود که یعنی ، الگوریتم درست است و اگر نبود الگوریتم را اصلاح میکنیم تا به جواب برسیم.

مثال قبل را با هم Trace  می کنیم ببینیم که آیا خروجی مدنظر ما را می دهد یا نه.

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

سوالهایی که در اینجا مطرح است ، این است که :

چرا در فلوچارت متغیرهای A,B را نداشتیم و در اینجا داریم ؟

و چرا مقدار c در مرحله ی اول صفر است ؟

اینها به نکات متغیرها باز می گردد که در جلسه ای جداگانه به آنها می پردازیم. در اینجا فقط روش Trace  را یاد بگیرید.

چگونگی نوشتن یك پروژه به زبان خاص 

مراحل 5 گانه حل پروژه

  1. حل مساله (همان مراحل 5 گانه حل مساله) (روی کاغذ) – بدست آمدن الگوریتم یا راه حل مساله
  2. تبدیل الگوریتم به کد زبان مورد نظر (روی کاغذ) – بدست آمدن کد برنامه
    1. وقتی بخش دوم را یاد گرفتیم به سادگی می توانیم هر الگوریتمی را به هر زبانی که می خواهیم تبدیل کنیم.
  3. انتقال کد به کامپیوتر
    1.  –نامی متناسب با برنامه در نظر گرفته و ذخیره اولیه را انجام می دهیم .
    2. در موقع افزودن كد بعد از هر چند خط عملیات ذخیره سازی را بروز می كنیم كه به آن می گوییم : ذخیره سازی مكرر
    3. – و بعد از اتمام كار و رفع اشكالات و … ذخیره سازی نهایی را انجام می دهیم .
  4. آزمایش برنامه و رفع اشكال
    1. بعد از اینكه برنامه ی كد شده وارد كامپیوتر شد ، زمان آن می رسد كه برنامه را مورد آزمایش قرار دهیم ( از طریق كامپیوتر (وقتی برنامه را اجرا می کنیم ، قبل اجرا برنامه کامپایل می شود تا خطاهای آن را نشان دهد جهت اشکال زدایی.
    2. هدف از آزمایش برنامه اشكال زدایی است .
  5. تعمیم و نگه داری 
    1. درصد زیادی از هزینه های خرج شده برای یك برنامه كاربردی مربوط به نگه داری و ارتقای آن است .
    2. هدف از نگه داری : تصحیح و توسعه ، ارتقاء و بهبود برنامه بعد از نصب آن است .

نکات مهم :

نکات مرحله 1 و 2 :

دلیل اینکه گفته میشود مراحل 1 و 2 را روی کاغذ بنویسیم این است که : حتما حین الگوریتم نویسی و کد نویسی Trace کنیم تا منطق برنامه درست باشد بعد از اینکه اطمینان پیدا کردیم منطق برنامه درست است ، کد را منتقل به کامپیوتر کنیم.

چرا که در مراحل آخر که برنامه یا کامپایلر برنامه را اشکال  یابی می کند خیلی سخت است که اشکال زدایی کنیم و بهتر است اشکالاتی که در آن مرحله پیش می آید در حد اشکالات تایپی باشد. برای بروز مشکلات منطقی برنامه بهتر است این توصیه را بکار بریم.

حالا سوال اینجاست که چرا هم در مرحله ی الگوریتم نویسی و هم در مرحله ی کد نویسی Trace  کنیم ؟

چون ممکن است در الگوریتم نویسی برنامه جواب دهد ولی در کد نویسی نه! ممکن است تبدیل الگوریتم به کد را به درستی انجام نداده باشیم و جواب نهایی دچار اشکال شود. پس بهتر است در این مرحله هم Trace  کنیم.

نکات مرحله 4 :

لازم به ذکر است که

 معمولا اشتباهاتی که حین برنامه نویسی در  مرحله 4 رخ می دهد 2 دسته اند :

  1. دستوری (Syntax Errors )  : یعنی عدم رعایت قواعد زبان برنامه نویسی یا همان اشكال در کدنویسی.مثلا به جای نوشتن if  می نویسیم iff  كه مطمئنا برنامه این اشتباه را به ما گوشزد می كند .که مشکلی نداره راحت برطرف می کنیم.
  2. منطقی (Semantic Errors ) : یعنی قواعد زبان رعایت شده اما منطق درست نیست . كه یافتن این مشكلات بسیار سخت و اصولی است که برای بروز چنین مشکلاتی گفته شد Trace  کنیم. مثلا در فارسی ، جمله ای مثل ” من دیروز به زمین خوردند . ” از هر لحاظ درست است فاعل ، فعل و …  سر جاشونن اما با دقت متوجه می شویم كه صرف فعل مشكل دارد و این نشان از بد فهمی مطلب دارد و نیاز به یادگیری دوباره دارد ، در برنامه نویسی هم همین طور است.  مثلا برنامه نویس نمی داند كه تقسیم بر صفر در برنامه خطاست و برای جلوگیری از بروز آن شرطی نمی گذارد و مرتب با خطا روبرو می شود ، که با دانستن این موضوع آن شرط را اضافه می کند.

نکات مرحله 5 :

مرحله ی نگهداری مرحله ی بسیار مهمی است چرا که :

اگر نیازهای جدیدی برای کاربرانی که از برنامه استفاده می کنند پیش آید برنامه نویس باید بتواند برنامه را ارتقا دهد. لازمه ی ارتقای آن این است که قبلا خیلی خوب برنامه را مستندسازی کرده باشد و توضیحات لازم را کنار کدها نوشته باشد تا به خاطر بیاورد برنامه چطور نوشته شده تا بتواند تغییرات لازمه را انجام دهد به جای اینکه بخواهد برای نیازهای جدید برنامه ای جدید بنویسد که این کار مستلزم هزینه و وقتی اضافی است.

نکته ی مهم دیگری که باید به آن اشاره کنم این است که :

هیچ وقت نمیتوان گفت برنامه 100% بی خطاست . چرا که بعضی اشکالات در زمان کاربری نمود پیدا می کنند و آن وقت باید اقدام به اشکال زدایی کنیم.

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

پس بهتر است حتما در حین برنامه نویسی مستندسازی داشته باشیم یعنی برنامه چطور نوشته شده ، متغیرها کدام ها هستند ، بر روی چه سیستمی کار می کند و … در کنار کدها هم توضیحات لازم را بنویسیم تا بتوانیم به خوبی این مرحله را هم بگذرانیم.

لیست پروژه های انجام شده در الگوریتم ها و تکنیک های برنامه نویسی:

  • هوش مصنوعی
  • زبان ماشین ( اسمبلی)
  • محاسبات ریاضی با متلب
  • نوشتن الگوریتم های متفاوت با زبان C

جهت آموزش ها  و انجام پروژه با تیم فرابگیر تماس بگیرید.

X
سوالی دارین؟