آموزش برنامه نویسی به زبان ++C

این وبلاگ جهت آموزش برنامه نویسی به زبان ++C برای دانش آموزان دبیرستان فرزانگان ایجاد شده است.
چهارشنبه, ۱۳ ارديبهشت ۱۳۹۱، ۰۷:۱۵ ب.ظ

نکاتی برای اصلاح خطاهای برنامه

در تاریخ 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 بیان کردیم. در همه ی مثالها تمام متغیرها از نوع ممیزی تعریف شده اند. علت این امر این است که حاصل تقسیم دو عدد حیح بر هم صحیح میشود. حال اگر این عدد را به یک عدد ( از هر نوعی ) جمع کنیم و در یک متغیر ممیزی بریزیم قسمت از دست رفته در تقسیم را نمیتوان دوباره برگرداند! پس از ابتدا برای راحتی کار همه متغیرها را تا جایی که به مشکلی بر نخوریم از نوع ممیزی تعریف می کنیم.

 

باز هم اگه نکته ای به ذهنم برسه به این بخش اضافه میکنم.

 

موفق باشید!

 

 

 

 



نوشته شده توسط سارا نازاری
ساخت وبلاگ در بلاگ بیان، رسانه متخصصان و اهل قلم

آموزش برنامه نویسی به زبان ++C

این وبلاگ جهت آموزش برنامه نویسی به زبان ++C برای دانش آموزان دبیرستان فرزانگان ایجاد شده است.

نکاتی برای اصلاح خطاهای برنامه

چهارشنبه, ۱۳ ارديبهشت ۱۳۹۱، ۰۷:۱۵ ب.ظ

در تاریخ 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 بیان کردیم. در همه ی مثالها تمام متغیرها از نوع ممیزی تعریف شده اند. علت این امر این است که حاصل تقسیم دو عدد حیح بر هم صحیح میشود. حال اگر این عدد را به یک عدد ( از هر نوعی ) جمع کنیم و در یک متغیر ممیزی بریزیم قسمت از دست رفته در تقسیم را نمیتوان دوباره برگرداند! پس از ابتدا برای راحتی کار همه متغیرها را تا جایی که به مشکلی بر نخوریم از نوع ممیزی تعریف می کنیم.

 

باز هم اگه نکته ای به ذهنم برسه به این بخش اضافه میکنم.

 

موفق باشید!

 

 

 

 

موافقین ۰ مخالفین ۰ ۹۱/۰۲/۱۳
سارا نازاری

نظرات  (۸)

خانم نازاری 
خیلی ممنون از زحمات شما .......
میخواستم بدونم  امتحان گروه  A چه قدر متفاوت تره؟؟؟

پاسخ:
تفاوت فقط توی یک سواله ...
  khanum nazari chera graphic halgharo nazashtiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiin?? man alan mikham maghshamo banavisam valiiiiii balad nistam...........:D lloftan y fakri bokonaid
سلام لطفا بگید امتحان فرزانگان 4 در چه سطحی؟
پاسخ:
در سطح چیزایی که بهتون یاد دیدم ... البته یه خرده سخت تر! مثل  همیشه! مگه اولین بارته که امتحان میدی؟!؟!؟!
خسته نباشید خانوم خیلی به وبلاگتون کمک کرد.
پاسخ:
خدا رو شکر! خوشحالم!

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

خواهش می کنم بگید چرا ؟؟؟؟ نکته اینجاست که ه9یچ خطایی هم نمی گیره!!!!!

#include<iostream.h>
#include<conio.h>
main()
{
      int a=0,sum=0,n;
      cin>>n;
      while(n!=0)
      {
                 a=n%10;
                 sum=a*10+sum;
                 n=n/10;
                 }
                 cout<<sum;
                 getch();
      }
     

پاسخ:
برنامه رو توی یه پروژه ی دیگه کپی کن شاید قاطی کرده ...
salam khanum takalife eyd kojan??????????????
پاسخ:
اضافه شد!
۲۸ اسفند ۹۱ ، ۱۶:۵۷ دانش آموز سال اول
سلام خانوم نازاری . می شه بگین کی تکالیف  نوروزی گروه A سال اول دبیرستان فرزانگان 4 رو تو سایت میزارین ؟؟
پاسخ:
اضافه شد
At the request of Daylily and from Sh7l8dmaideni21e;s urging on Facebook I will start a new alphabet game. I think we have done favorite movies, amybe even fave TV shows. How about favorite albums?For A i turn to U2 and Achtung Baby, probably their last great album front to back. While on the thread, I offer the self-titled “Black Sabbath” for B. Any metalheads on the blog should agree with me … no Sabbath, no metal.We now turn to C … but, as always, you are encouraged to fill in letters someone else may have already used, so if you have a great A or B …

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی