نکاتی برای اصلاح خطاهای برنامه
در تاریخ 24 اردی بهشت به روز شد، مطالعه کنید.
در این بخش نکاتی که به نظرم بهتره تا قبل از امتحان بهتون یادآوری کنم رو میذارم:
اولین نکته اینه که هر وقت میخواهید از ورودی دو تا عدد بگیرید دقت کنید که فرمت دستور cin رو درست بنویسید:
cin >> a >> b;
فرمتی که خیلی از وقتا توی کلاس اشتباه می نوشتید و غلط هم بود این جوری بود:
cin >> a, b; //ghalat!!
اگر با فرمت اشتباهی بنویسید فقط عدد اول رو از ورودی میگیره و بعدش دیگه کاری نمیکنه( یعنی میره سراغ بقیه ی برنامه و عدد دیگه ای نمیگیره)
نکته ی دیگه در مورد erro هایی هستش که ممکنه براتون توی بحث حلقه پیش بیاد..
اگر بعد از زدن کلید f9 و اجرای برنامه، صفحه ی اجرا باز شد اما هیچ چیزی توی اون نوشته نشده بود( البته غیر از قسمت اول برنامه تون که ممکنه cin و یا cout گذاشته باشید) در این صورت بدونید که برنامه تون احتمال زیاد توی حلقه ی بینهایت گیر کرده. یعنی شرط حلقه همواره برقراره! توی این موارد باید ببینید متغیر شرط حلقه رو توی حلقه عوض میکنید یا نه؟! ...
اگر بعد از زدن کلید f9 و اجرای برنامه، صفحه ی اجرا باز شد اما هیچ چیزی توی اون نوشته نشده بود و فقط جمله ی please enter any key to countinue ... رو نوشته بود ( البته غیر از قسمت اول برنامه تون که ممکنه cin و یا cout گذاشته باشید) در این صورت به احتما خیلی زیاد برنامه وارد حلقه ی while نشده و باید باز هم شرط حلقه رو بررسی کنید که آیا شرط محال برا گذاشتید یا نه؟!
نکته ی بعدی اینه که گاهی خروجی ای که برنامه برای شما وارد میکنه یه عدد چندین رقمیه که هیچ ربطی به عددی که میخواید نداره. توی این شرایط احتمالش خیلی زیاده که مقدار اولیه به یه متغیر نداده باشید. مثلا به متغیر sum که قراره مجموع توش قرار بگیره مقدار اولیه نداده باشید.
نکته های جدید:
همواره توجه کنید که متغیر حلقه ی for یا همان شمارنده ی حلقه یک متغیر واحد است. به بیان دیگر به حلقه ی غلط زیر توجه کنید:
for(int i = 0; b <= 10; i++)
در این حلقه معلوم نیست که متغیر شمارنده i هست یا b. چرا که i را زیاد کرده اما شرط انتها را روی b گذاشته! در صورتی که باید شرط انتها را روی همان i میگذاشت. صورت درست به شکل زیر است:
for(int i = 0; i <= 10; i++)
نکته ی بعدی در مورد شرط ادامه حلقه for است. در قسمت دوم داخل پرانتز حلقه ی for باید شرط ادامه را قرار دهیم. نه مرز انتهایی را. به مثال غلط زیر توجه کنید:
for(int i = 0; i = 10; i++)
صورت درست حلقه به شکل زیر می باشد:
for(int i = 0; i <= 10; i++)
نکته ی دیگر در مورد گام حرکت در حلقه ی for است . فرض کنیم که در حلقه ی for نخواهیم یکی یکی شمارنده را زیاد کنیم و بخواهیم به عنوان مثال دو تا دو تا آن را زیاد کنیم. برای این کار باید شکل جدیدی از دستورات را یاد بگیریم.
دستور زیر را قطعا به خاطر دارید:
i = i + 2;
با استفاده از این دستور i دو تا زیاد می شود. حال اگر بخواهیم در حلقه ی For از این دستور استفاده کنیم میتوانیم آن را به شکل زیر استفاده کنیم
i+=2;
این دستور دقیقا معادل دستور بالایی است. میتوانیم از هر دو دستور استفاده کنیم!
چند نمونه دیگر از این دستور که برای تمام اعمال ساده ی ریاضی کاربرد دارد را مثال میزنم:
i = i * 7; i*=7; a = a / 15; a/=17; b = b + c; b+=c; f = f - a; f-=a;
نکته ی بعدی در مورد دستور endl و دستورات مشابه آن میباشد. دستور زیر برای ما بسیار آشنا است:
cout << endl;
میتوانیم به جای آن از دستور زیر استفاده کنیم:
cout << "\n";
که دقیقا همان کار را انجام میدهد.
حال به به برنامه ی زیر توجه کنید:
#include <iostream> #include <conio.h>
using namespace std; main() { cout << "salam" << "\t" << "khodahafez"; cout << "\n\n\n\n\n\n\n\n";
getch(); }
خروجی این برنامه به شکل زیر می باشد:
با کمی دقت میتوان فهمید که دستور "t\" ادامه ی متن را نه به خط بعدی بلکه به 10 پیکسل جلوتر انتقال میدهد.
با کمی دقت بیشتر میتوان فهمید که خط زیر ادامه متن را به 8 خط بعد انتقال میدهد چون از 8 دستور "n\" استفاده کرده ایم.
cout << "\n\n\n\n\n\n\n\n";
نکته ی دیگری که باید گفته شود در مورد به دست آوردن جاصل جمع جملات سری هایی است که در قسمت for بیان کردیم. در همه ی مثالها تمام متغیرها از نوع ممیزی تعریف شده اند. علت این امر این است که حاصل تقسیم دو عدد حیح بر هم صحیح میشود. حال اگر این عدد را به یک عدد ( از هر نوعی ) جمع کنیم و در یک متغیر ممیزی بریزیم قسمت از دست رفته در تقسیم را نمیتوان دوباره برگرداند! پس از ابتدا برای راحتی کار همه متغیرها را تا جایی که به مشکلی بر نخوریم از نوع ممیزی تعریف می کنیم.
باز هم اگه نکته ای به ذهنم برسه به این بخش اضافه میکنم.
موفق باشید!