به این پارامتر ها در برنامه نویسی توجه کنید یکی از پنهانترین مشکلاتی که ممکن است برای برنامهنویس پیش آید این است که برنامه به طور دقیق همان نتیجهی مورد انتظار را نداشته باشد. این مشکل از آن جهت بسیار مخفی است که مفسر و کامپایلر هرگز گزارش خطایی به برنامهنویس در این رابطه نمیدهند و هرگز هم، اجرای برنامه پایانی ناموفق نخواهد داشت، فقط و فقط برنامه پاسخ دلخواه را تولید نمیکند.
به این مثال توجه کنید؛ فرض کنید بخواهیم برنامهای بنویسیم که مقدارn! را حداکثر تا n=۷ محاسبه کند و فرض کنید برنامهی زیر را در پاسخ نوشتهایم:
INPUT N ۱۰
IF N>۷ OR N<۰ THEN GOTO ۱۰
FOR I=۱ TO N
Factoriel =Factoriel * i
NEXT I
PRINT N, "!= ", Factoriel
END
اگر این برنامه را در محیط برنامهنویسی Basic اجرا کنید با هیچ نوع خطایی مواجه نخواهید شد، ولی هربار و به ازای هر مقدار N فقط پاسخ ۰(صفر) را دریافت خواهید نمود! برنامه ظاهرا" درست است ولی یک مشکل کوچک وجود دارد. گرچه حلقهی نوشته شده در سطر ۳۰ برای محاسبهی فاکتوریل کاملا" درست است ولی نتیجهی درست از برنامه به دست نمیآید. علت چیست؟ علت این است که متغیر صحیح Factoriel مقدار دهی اولیه نشده است و Basic هر متغیری را که مقدار دهی اولیه نشده باشد در اولین استفاده از آن، صفر فرض میکند . پس در اولین اجرای سطر ۴۰ ، مقدار Factoriel مساوی صفر است و به همین دلیل حلقهی فوق در واقع عبارت را محاسبه میکند که به طور قطع ۰ (صفر) خواهد بود. البته مثال فوق، مثال بسیار کوچکی است و پیدا کردن علت و رفع نقص برنامه هم بسیار ساده است ولی هر قدر حجم برنامه بیشتر شود، کار عیبیابی و رفع نقص هم بسیار دشوار و طاقتفرسا خواهد بود.
یکی از رایجترین دلایل بروز این نوع مشکل در برنامههای کامپیوتری، عدم مقدار دهی اولیهی متغیرهاست و این موضوع زمانی جدی میشود که متغیرهای استفاده شده از نوع اشارهگر (Pointer) باشند که گاهی ممکن است حتی بدون آن که شما متوجه شوید، باعث صدمه زدن به دستگاه کامپیوتر هم بشوند.
متأسفانه این نوع مشکل به گونهای است که مفسرها و کامپایلرهای زبانهای برنامهنویسی هیچگونه اخطار یا گزارشی در خصوص آنها به استفاده کننده نمیدهند و تنها راه برای یافتن این اشکالات، آزمودن نتایج برنامه و اطمینان از صحت آنهاست. اما اگر در یک برنامه با چنین اشکالی مواجه شدید و نتوانستید در بررسی اولیه علت آن را بیابید، به شما توصیه میکنیم با اجرای خط به خط برنامه و کنترل عملیات اجرایی هر سطر، سعی کنید علت مشکل را بیابید. برای این منظور در محیط C ، Basic و Pascal میتوانید از کلید F۸ برای اجرای سطر به سطر برنامه استفاده کنید. توجه داشته باشید که یکی از پنهانترین مشکلات در امر برنامهنویسی این است که برنامه نتواند به طور دقیق همان پاسخ مورد نظر را تولید کند. به خصوص زمانی که طول برنامه از حدود ۱۰۰ خط تجاوز کند، یافتن منشأ مشکلات فوق به قدری مشکل خواهد شد که گاهی برنامهنویس را از ادامهی کار برنامهنویسی دلسرد خواهد کرد . همانگونه که گفته شد این اشکالات به آن دلیل بسیار پنهان هستند که کامپایلرها و مفسرهای زبانهای برنامهنویسی هرگز هیچگونه گزارش و هشداری به برنامهنویس نمیدهند، اما با این وجود، نگارشهای جدید زبانهای برنامهنویسی امکانات خاصی جهت کنترل روند اجرای برنامه در اختیار برنامهنویس قرار میدهند. از جمله این که این برنامهها به برنامهنویس امکان میدهند در حال اجرای برنامه، محتویات تمام متغیرهای معرفی شده در برنامهرا هم در هر لحظه مشاهده کند. پرهیز از این اشکالات فقط با دقت زیاد در زمان برنامهنویسی و آزمایش نتایج حاصل از برنامه ممکن خواهد شد. لیکن توجه به نکات زیر میتواند مفید باشد:
▪ تا جایی که میتوانید عملکرد کل برنامه را به زیر برنامهها تقسیم کرده و برای هر یک تابع مناسبی بنویسید. با این کار پیدا کردن محل بروز مشکل بسیار سادهتر خواهد شد.
▪ اگر پاسخ دلخواه را از برنامه نگرفتهاید، در یافتن علت مشکل عجله نکنید. گاهی مجبور میشوید ساعتها برای یافتن مشکل وقت صرف کنید و گاهی حتی رفع مشکل نیز خود بسیار وقتگیر خواهد بود.
▪ هرگز سعی نکنید یک برنامهی طولانی را یکباره بنویسید بلکه آن را به زیر برنامههای مستقل تقسیم کرده و هر بخش را پس از نوشتن برنامهی مناسب با دقت بسیار آزمایش کنید و از صحت عملکرد آن مطمئن شوید. علاوه بر این افرادی که به تازگی کار برنامهنویسی را شروع کردهاند و یا کسانی که به تازگی با یک زبان جدید برنامهنویسی آشنا شدهاند و سعی دارند توسط آن زبان، برنامه بنویسند، با مشکلات بیشتری مواجه خواهند شد. دقت در برنامهنویسی و مطالعهی کُتب راهنمای زبانهای برنامهنویسی مورد استفاده و به خصوص صبر و حوصله، میتوانند کلیدهای طلایی موفقیت این افراد باشند.
الگوریتم
سعی ما در این مجموعه مقالات، ارایه یک سری مطالب تکراری برای شما نیست و شما هم باید بدانید که فقط با مطالعهی مقالات یک مجله نمیتوانید برنامهنویس قابلی بشوید و مطالعهی کتب مربوطه برای شما یک ضرورت است. لذا در هر کجا که احساس کنیم، شما را به مطالعهی این کتابها ارجاع میدهیم. از جمله اینکه اگر بخواهید در خصوص تعریف الگوریتم و خصوصیات یک الگوریتم خوب بیشتر بدانید، میتوانید به کتاب مبانی کامپیوتر و انفورماتیک سال سوم رشتهی ریاضی - فیزیک مراجعه کنید. لیکن چند مطلب مهم وجود دارد که در ادامه به طور مختصر بیان میگردند.
ارایهی الگوریتم
شما به هر روشی که مسأله را حل کنید، در نهایت بایستی راه حل پیدا شده را توسط یک الگوریتم مناسب پیاده کنید. این الگوریتم که میتواند به زبان محاورهای نیز تهیه گردد، برنامهنویسی را برای شما بسیار ساده میکند و به علاوه فهم برنامه را برای افرادی که بعدا" آن را مطالعه میکنند،تسهیل میبخشد. البته باید خیلی دقت کنید که الگوریتم را به نوعی تهیه کنید که تمام مراحل آن را بتوانید به سادگی توسط زبان برنامهنویسی مورد نظرتان پیادهسازی کنید. در برنامهنویسی حرفهای وجود الگوریتم و نمودارهای مختلف از روند اجرای برنامه، یک بخش جداییناپذیر از برنامهنویسی کامپیوتر است.
کوتاهتر بودن مراحل الگوریتم
به غیر از موارد بسیار نادر کسی نمیتواند مدعی شود که در مورد یک مسألهی خاص، کوتاهترین راه حل را پیدا کرده است و معمولا" با تفکر بیشتر میتوان راهحلهای کوتاهتری نیز یافت. منظور از کوتاه بودن مراحل الگوریتم این است که بتوان مسأله را با طی نمودن مراحل عملیاتی کوتاهتر و کمتر حل کرد.
صحیح بودن الگوریتم
منظور از صحیح بودن الگوریتم این است که بین مراحل مختلف یک الگوریتم ارتباط منطقی وجود داشته باشد و الگوریتم نیز در پایان نتیجهی مطلوب را به دست دهد. بهعلاوه هر مرحلهی الگوریتم به تنهایی از نقطه نظر منطقی درست بوده و قابل اجرا باشد و هیچیک از مراحل الگوریتم با مراحل دیگر تضاد عملیاتی و یا تناقض نداشته باشد.
هوشمندانه بودن الگوریتم
از آنجا که الگوریتم به بیانی فقط پیادهسازی راهحل مسأله در یک سری مراحل منطقی و پیوسته میباشد، لذا هوشمندانه بودن الگوریتم بیشتر به معنی هوشمندانه بودن راهحل مسئله است: از آنجا که هر مسئله تنها یک راهحل ندارد، گاهی افراد خلاق و باهوش برای حل یک مسأله راه حلهای بسیار جالب کشف میکنند که بسیار کوتاه بوده و سریع به جواب میرسند که میتوان اینگونه راهحلها را، راهحلهای هوشمندانه نامید.
عدم پیچیدگی زیاد
گاهی اوقات ماهیت یک مسأله پیچیده بوده و لذا راه حل آن هم پیچیده میگردد. کامپیوتر همواره برای سادهتر شدن مسائل زندگی به کار میرود و لذا در برنامهنویسی هم ما همیشه سعی میکنیم تا حد ممکن راهحل سادهای برای مسائل بیابیم. منظور از عدم پیچیدگی الگوریتم این است که تمام مراحل الگوریتم به حدی واضح باشند که برای فهم آن نیاز به تفکر زیاد و یا احتمالا" تجزیه و تحلیل مسأله نباشد. به نوعی میتوان گفت که بیان سادهٔ حل یک مسأله در واقع یک هنر است ولی تجربه هم در این امر بسیار مؤثر میباشد.
در اینجا لازم است نکاتی تذکر داده شود:
یکی از نکات مهم در نوشتن الگوریتم این است که باید سعی کرد هر یک از مراحل مستقل الگوریتم را به تنهایی توسط زبان برنامهنویسی به برنامه تبدیل کرد. به این دلیل به طور قطع بین الگوریتمی که یک برنامهنویس مبتدی برای راهحل مشخص یک مسأله تهیه میکند و الگوریتمی که یک برنامهنویس با تجربه آماده میسازد، تفاوتهای زیادی وجود خواهد داشت. چرا که هر چقدر در امر برنامهنویسی با تجربهتر باشید، الگوریتم تهیه شدهٔ شما از کلیت بیشتری برخوردار است. یک برنامهنویس با تجربه، چند مرحلهی متوالی و مکملِ هم را یکی میکند، چون قبلا" بارها و بارها تمام آن مراحل را پیاده کرده و حالا به سبب تسلّطی که بر آن دارد نیازی نمیبیند که تمام جزئیات را بیان کند، ولی این مهارت برای یک برنامهنویس مبتدی وجود ندارد. بنابراین ممکن است الگوریتمهای ارایه شده توسط افراد مختلف از این نظر متفاوت باشند، ولی هیچ یک غلط نبوده و بر دیگری برتری خاصی ندارد. به عنوان نمونه ممکن است یک مرحله از الگوریتمی چنین نوشته شود:
ولی کسی که دارای تجربهی بیشتر است بنویسد .
این تفاوت در مورد برنامههای بزرگ بسیار قابل توجهخواهد بود. مثلا" یک برنامهنویس با تجربهالگوریتم سیستم اطلاعاتی دانشآموزان یک کلاس را چنین مینویسد:
▪ شروع کن
▪ کلیهی اطلاعات فردی و نمرهای دانشآموزان را بگیر
▪ وضعیت تحصیلی هر دانشآموز را چاپ کن
▪ پایان
فکر میکنید یک برنامهنویس مبتدی همین الگوریتم را در چند مرحله بنویسد؟!
نکتهی مهم دیگری که باید مورد توجه قرار بگیرد این است که تمام عوامل پنجگانهای که اشاره شد به یک اندازه مهم نیستند،بلکه بستگی زیادی به محل و موقعیت حل مسأله و همچنین استعداد برنامهنویس و نیازهای خود برنامه دارد. گاهی لازم است روشهای سادهتر ولی طولانیتر را جایگزین روشهای هوشمندانهتر کرد و گاهی بر عکس سعی کنیم تا حد ممکن راه حل را کوتاه کنیم. تشخیص این مسأله مهم به عهدهٔ شخص برنامهنویس است.