X
تبلیغات
کامپیوتر

کامپیوتر

زبانهای برنامه نویسی

داغونه ها...نگی چرا اجرا نمی شه؟!!!!!

#include
#include
class string{
 protected:
  char *str;

 public:
  string(int=250);
  string(char *);

  char size_cheking(char *s1,char *s2);

  int   len(char *);
  char  copy(char *,char *);
  char  cat(char *,char *);
  int   comparison(char *,char *);
  char  *reverse(char *);
  char  *substring(char *,int pos);
  char  *insert(char *,int pos,char *);
  char  *del(char *,int pos,int len);
  char  *rep(char *,char *,char *);
  int   index(char *,char *);
  void  read();
  void  write();
};
string::string(int l)
{
 str=new char[l];
}
string::string(char * s1)
{
 int r=strlen(s1);
 str=new char[r];
}
int string::len(char *s1)
{
 for(int i=0;s1[i];i++);
  return i;
}
char string::*copy(char *s1,char *s2)
{
 int size_cheking(char *,char *);
 for(int i=0;s1[i]=s2[i];i++);
  return s1;
}
char string::*cat(char *s1,char *s2)
{
 int size_cheking(char *,char *);

 while(*s1!='\0')
  ++s1;
 for(;*s1=*s2;s1++,s2++);
 return s1;
}
int string::comparison(char *s1,char *s2)
{
 for(int i=0;s1[i]&&s1[i]==s2[i];i++);
 return s1[i]-s2[i];
}
char string::*reverse(char *s1)
{
 int size=int len(char *s1);
 for(int i=size;s1[i];i--);
 return s1;
}
char string::*substring(char *s1,int pos)
{
 cout<<"\nEnter a number for position\n";
 cin>>pos;

 for(int i=pos;s1[i];i++)
  return s1;
}
char string::*insert(char *s1,int pos,char *s2)
{
 int n=int len(char *);
   cout<<"\nEnter a number for position between 1 & "<<(n-1)<<"\n";
 cin>>pos;
 int size_cheking(char *,char *);
 while(*s1<=pos)
  ++s1;
 for(;*s1=*s2;s1++,s2++);
 return s1;
}
char string::*del(char *s1,int pos,int len)
{
 cout<<"\nEnter a number for position\n";
 cin>>pos;
 while(*s1<=pos)
  s1++;
 for(int i=pos;i  s[i]='\0';
 return s1;
}
char string::*rep(char *s1,char *s2,char *s3)
{
 int size_cheking(char *,char *);


}
int string::index(char *s1,char *s2)
{
 int lenS1=strlen(s1);
 int lenS2=strlen(s2);

 int max=lenS1-lenS2;
 for(int i=0;i {
  for(int j=0;j  if(j==lenS2)
  return i;
 }
 return -1;
}
int string::size_cheking(char *s1,char *s2)
{
 int x=int comparison(char *s1,char *s2);
 if(x<0||x==0)
 {
  char *temp=s1;
  int y=int len(char *s1);
  s1=new char[y+x];
  s1=temp;
 }
}
void string::read()
{
 cin>>str;
 return;
}
void string::write()
{
 cout< return;
}
int main()
{
 string s1(250);
 string s2("This program is for Data Structure")
 while(1)
 {
   int num;
   cout<<"Enter a choice: \n\n";
   cout<<"1 for length of string.\n";
   cout<<"2 for copy .\n";
   cout<<"3 for strcat.\n";
   cout<<"4 for comparison.\n";
   cout<<"5 for reverse.\n";
   cout<<"6 for substring .\n";
   cout<<"7 for insert .\n";
   cout<<"8 for delete.\n";
   cout<<"9 for index .\n";
   cout<<"10 for end.\n";
   cin>>num;
   switch(num)
   {
    case 1:
     s1.read();
     s.len(char *);
     s1.write();
     break;

   case 2:
    s1.read();
    s2.read();
    s.copy(char *,char *);
    s1.write();
    break;

   case 3:
    s1.read();
    s2.read();
    s.cat(char *,char *);
    s1.write();
    break;

   case 4:
    s1.read();
    s2.read();
    s.comparison(char *,char *);
    s1.write();

    break;

   case 5:
    s.read();
    s.*reverse(char *);
    s1.write();

   break;

    case 6:
    s.read();
    s.*substring(char *,int pos);
    s1.write();

   break;

    case 7:
    s1.read();
    s2.read();
    s.*insert(char *,int pos,char *);
    s1.write();

   break;

    case 8:
    s1.read();
    s2.read();
    s.*del(char *.int pos,int len);
    s1.write();

   break;

    case 9:
    s1.read();
    s2.read();
    s.index(char *,char *);
    s1.write();

   break;

   case 10:
    return 0;
   }
   cout<  }

}

+ نوشته شده در  یکشنبه 29 مهر1386ساعت 11:44 بعد از ظهر  توسط ریحانه  | 

 

راستش نه اينکه ما ايرانيها خيلي کم و به ندرت چت مي کنیم، برای همین گفتم اینها رو که يکسري نرم افزارها و سايتهاي مخصوص چت ، که خیلی به درد بخوره، معرفی کنم.

 

اول: مسنجر‌های بر پایه‌ی وب: که بیشتر در دانشگاه‌ها و محیط‌های کار که شما معمولا اجازه‌ی نصب مسنجر را ندارید به کار می‌روند:

Meebo : با استفاده از این وب‌سایت می‌توانید به طور هم‌زمان از مسجر‌های Google وYahoo! MSN  , Tack,ICQ , Jabber ,AIM استفاده نمایید. استفاده از این سایت نیازی به ثبت نام ندارد اما اگر ثبت نام کنید امکانات زیر را خواهید داشت: اول- ورود همزمان به همه‌ی مسنجرهای اشاره شده در فوق تنها با یک نا کاربری Meebo و دوم- ذخیره کردن متن چت‌های خود در اکانت میبویتان

 

Kool IM : درست مانند سایت Meebo در این سایت نیز شما می‌توانید به هریک از مسنجرهای اشاره شده به طور جداگانه وارد شوید یا با ثبت نام و دریافت یک KoolIM Name همزمان به همه‌ی مسنجرها وارد شوید.

 

eBuddy : که مسنجرهای (Yahoo!, MSN و AIM را پشتیبانی می‌کند) بر خلاف دو سایت بالا این سایت اجازه‌ی ورود هم زمان به چند مسنجر را به شما نمی‌دهد و در آن واحد تنها می‌توانید به یکی از این سه مسنجر وارد شوید.

 

ILoveIM: که مسنجرهای (MSN, Google Talk, AOL, Yahoo) را پشتیبانی می‌کند و مانند سایت فوق در‌آن واحد تنها به یک مسنجر وارد می‌شود.

 

دوم: نرم‌افزارهای چت برای استفاده در کامپیوتر‌های رومیزی: علاوه بر مسنجر ارائه شده توسط هر شرکت برای استفاده از آن، مسنجرهایی نیز وجود دارند که هم زمان چند تا از این مسنجرها را پشتیبانی می‌کنند:

 

تریلان: AIM, ICQ, MSN, Yahoo و IR را پشتیبانی می‌کند.

 

Miranda IM : مسنجرهای AIM, ICQ , MSN, Yahoo, IRC, Jabber, Gadu-Gadu, SILC, Novell GroupWise, Lotus Sametime, Zephyr را پشتیبانی می‌نماید.

 

Qnext : مسنجرهای ICQ, MSN, Yahoo and AIM را ساپورت می‌نماید.

 

Instan-t Express : مانند نرم افزار فوق عمل می‌کند.

 

سوم: نرم‌افزارهای چت از روی موبایل: این روزها با روی کار آمدن اینترنت GPRS ایرانسل گه گداری هوس چت کردن با موبایل به سرمان می‌زند اگر شما هم خواهان هستید بفرمایید:

 

eBuddy: این سایت مسنجرهای Yahoo! , MSN و AIM را پشتیبانی می‌نماید و نیازی به دانلود نرم‌افزار ندارد.

 

NimBuzz: این یکی هم نیاز به دانلود نرم‌افزار ندارد.

 

Mabber و EQO که هر دو نیاز به دانلود نرم‌افزارشان دارند.

+ نوشته شده در  یکشنبه 8 مهر1386ساعت 4:16 بعد از ظهر  توسط ریحانه  | 

انواع زبان های برنامه نويسی

   برنامه نويسان دستورات برنامه نويسی را به زبانهای مختلفی می نويسند. بعضی دستورات مستقيماً برای کامپيوتر قابل فهم می باشند و بعضی نياز به ترجمه دارند. به طور کلی زبانهای برنامه نويسی به سه دسته تقسيم می شوند:

   1- زبانهای ماشين
   2- زبانهای اسمبلی
   3- زبانهای سطح بالا

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

+1300042774
+1400593419
+1200274027

با عمومی تر شدن کامپيوتر، زبان ماشين به دليل مشکل بودن فهم دستورات آن و دشوار بودن خطا يابی جای خود را به زبان ديگری به نام زبان اسمبلی داد. اين زبان به جای استفاده از اعداد از کلمات انگليسی که قابل فهمتر برای انسان می باشند استفاده می کند. برنامه مترجمی که دستورات اسمبلی را به زبان قابل فهم توسط کامپيوتر( زبان ماشين) تبديل می کند، اسمبلر می گويند. دستورات زير نيز دو متغيير را با يکديگر جمع کرده و حاصل را در متغيير سومی قرار می دهد.

LOAD   BASEPAY
ADD    OVERPAY
STORE  GROSSPAY

با گسترش و پيشرفت کامپيوتر زبان اسمبلی نيز به دليل کند بودن روند برنامه نويسی و دشوار بودن خطا يابی جای خود را به زبانهای سطح بالا داد؛ زبانهای سطح بالا زبانهايی هستند که در ساختار آنها از کلمات، علايم و نمادهای متداول در محاوره استفاده شده است. برنامه های نوشته شده با اين زبانها قبل از اجرا نياز به ترجمه و تفسير دارند تا قابل استفاده توسط کامپيوتر گردند، که اين امر توسط نرم افزارهای ويژه ای به نام کامپايلر انجام می گيرد. کار کردن با اين زبانها ساده است و خطايابی آنها به سهولت انجام می گيرد. از معروفترين زبانهای سطح بالا به پاسکال، C ، بيسيک و ... می توان اشاره کرد. دستورات زير نيز دو متغير را با يکديگر جمع کرده و حاصل را در متغيرسوم قرار می دهد.

grosspay = basepay + overtimepay

الگوريتم ها

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

   در حالت کلی الگوريتم ها بايد ويژگی های زير را داشته باشند:

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

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

مثال : الگوريتم تعويض چرخ پنچر شده يک اتومبيل.

0- شروع.
 1-
جک را زير اتومبيل بگذاريد.
 2-
پيچهای چرخ پنچر شده را باز کنيد.
 3-
چرخ را خارج کنيد.
 4-
چرخ يدک را به جای چرخ پنچر شده بگذاريد.
 5-
پيچها را ببنديد.
 6-
اگر پيچها سفت نشده اند به مرحله 5 برو.
 7-
جک را پايين بياوريد.
 8-
چرخ پنچر شده را در صندوق عقب اتومبيل بگذاريد.
 9-
پايان.

مثال : الگوريتمی بنويسيد که دو عدد از ورودی دريافت شود و سپس تعيين شود که مجموع دو عدد بزرگتر از 20 است يا نه.

0- شروع .
 1-
دو عدد a و b را از ورودی در يافت کن.
 2- a+b
را محاسبه کن.
 3-
آيا a+b>20 است؟ اگر بلی به مرحله 6 برو.
 4-
بنويس خير.
 5-
به مرحله 7 برو.
 6-
بنويس بلی.
 7-
پايان.

   با برنامه ريزی و ساماندهی دقيق می توان به راه حلی مناسب جهت حل يک مسئله به کمک کامپيوتر رسيد. هرگونه کم توجهی و بی دقتی در نوشتن الگوريتم ضمن بروز مشکلات بسيار، برنامه نويس را نيز از هدف خود دور خواهد کرد؛ لذا برای به هدف رسيدن بايد درک صحيح و کاملی از صورت مسئله داشت و سپس راه حل مورد نظر را به صورت الگوريتم بنويسيم. و در نهايت الگوريتم مورد نظر را به زبان برنامه نويسی مورد نظر تبديل کنيم. برای درک بهتر شيوه حل مسائل و نوشتن الگوريتم به مثالهای زير توجه کنيد:

مثال : الگوريتمی بنويسيد که مجموع اعداد طبيعی مضرب 7 و کوچکتر از 50 را حساب کند.

برای نوشتن اين الگوريتم به دو خانه حافظه نياز داريم.

0- شروع.
 1-
در خانه حافظه sum عدد صفر را قرار بده.
 2-
در خانه حافظه index عدد 7 را قرار بده.
 3-
مقدار index را با مقدارsum جمع کن
          
و حاصل را در sum قرار بده.
 4-
مقدار 7 را با مقدار index جمع کن
          
و حاصل را در index قرار بده.
 5-
آياindex بزگتراز 50 است،اگر خير به مرحله 3 برو.
 6-
محتوای sum را چاپ کن.
 7-
پايان.

مثال : الگوريتمی بنويسيد که 1000 عدد را از ورودی دريافت کرده و کوچکترين را چاپ کند.

   فرض کنيد که به شما ليستی از اعداد را می دهند، برای پيدا کردن کوچکترين عدد در ليست اولين عدد را به عنوان کوچکترين در نظر می گيريد سپس عدد بعدی را با آن مقايسه می کنيد، اگر عدد جديد از عدد قبلی کوچکتر بود عدد جديد را به عنوان کوچکترين در نظر می گيريد و گر نه همان عدد قبلی کوچکترين خواهد بود. اين روند را تا انتهای ليست ادامه می دهيد؛ در پايان عددی که در هر بررسی به عنوان کوچکترين عدد بود، جواب مورد نظر ما خواهد بود. توجه کنيد که در اين روال شما همواره يک عدد را در ذهن خود در نظر گرفته بوديد، برای نوشتن الگوريتم مورد نظر ما يک خانه حافظه را به کوچکترين عدد درهر مرحله اختصاص می دهيم.

0- شروع.
 1- min
را دريافت کن.
 2- i =1 .
 3- a
را دريافت کن.
 4-
اگر a<min آنگاه min = a .
 5- i = i + 1 .
 6-
اگر i>=1000 به مرحله 8 برو.
 7-
به مرحله 3 برو.
 8- min
را چاپ کن.
 9-
پايان.

 

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

مثال : الگوريتمی بنويسيد که سه عدد از ورودی دريافت شود و تعيين شود که اين اعداد می توانند اضلاع مثلث باشند يا خير.

0- شروع.
 1- a
وb وc را از ورودی بگير.
 2-
اگر a>b+c به 7 برو.
 3-
اگر b>a+c به 7 برو.
 4-
اگرc>a+b به 7 برو.
 5-
بنويس " بلی ".
 6-
به 8 برو.
 7-
بنويس " خير ".
 8-
پايان.

در عمل برای نمايش الگوريتم از يک فلوچارت ( شمای جريان عمليات ) استفاده می شود. در حقيقت فلوچارت روش تصويری و استاندارد نمايش الگوريتم است.

·         در رسم فلوچارت علائم و نمادهای استانداردی به کار می رود که هر کدام دارای معانی ويژه ای هستند.

  • از شکل بيضی افقی برای شروع و پايان عمليات استفاده می شود.

·         از شکل مستطيل برای نمايش مراحل پردازشی استفاده می شود و در داخل آن عمل مورد نظر نوشته می شود. اين نماد ممکن است چندين ورودی داشته باشد ولی تنها يک خروجی دارد.

·         از نماد لوزی برای نشان دادن مراحل تصميم گيری استفاده می گردد و شرط يا سؤال مورد نظر در داخل لوزی نوشته می شود.

·         از متوازی الاضلاع برای نشان دادن ورودی يا خروجی استفاده می شود.

معرفی ساختاری زبان ++C

++C عموماً از سه بخش تشکيل شده است:

- محيطی برای نوشتن برنامه و ويرايش آن.
- کامپايلر ++
C.
- کتابخانه استاندارد ++
C.

يک برنامه زبان ++C برای رسيدن به مرحله اجرا از شش مرحله عبور می کند.

مرحله اول : برنامه نويس، برنامه را در محيط ويرايشگر می نويسد و آن را بر روی ديسک ذخيره می کند.

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

مرحله سوم : کامپايلر، برنامه را به زبان ماشين ترجمه می کند و آن را بر روی ديسک ذخيره می نمايد.

مرحله چهارم : پيوند دهنده، کدهای زبان ماشين را، به فايلهای کتابخانه هايی که مورد استفاده قرار گرفته اند پيوند می دهد و يک فايل قابل اجرا بر روی ديسک می سازد.

مرحله پنجم : بار کننده برنامه را در حافظه قرار می دهد.

مرحله ششم : واحد پردازش مرکزی کامپيوتر دستورات برنامه را اجرا می کند.

نکته : همانطور که گفته شد پيش پردازنده ايرادات برنامه را بررسی می کند و در صورتی که برنامه مشکلی نداشت در نهايت به زبان ماشين ترجمه می شود و قابليت اجرا پيدا می کند اما در هنگام اجرای برنامه نيز ممکن است خطايی بروز کند به عنوان مثال تقسيم بر صفر بوجود آيد. اين خطا قابل تشخيص توسط پيش پردازنده نيست و در زمان اجرای برنامه رخ می دهد و باعث خروج ناگهانی از برنامه می شود. به اينگونه خطاها، خطای زمان اجرا گفته می شود. تقسيم بر صفر جزء خطاهای مهلک است. خطای غير مهلک خطايی است که اجازه اجرای ادامه برنامه را می دهد ولی ممکن است نتايج غير صحيحی را به ما بدهد.

+ نوشته شده در  جمعه 6 مهر1386ساعت 6:10 بعد از ظهر  توسط ریحانه  | 

مفاهيم حافظه و انواع داده

  يکی از واحدهای کامپيوتر، واحد حافظه می باشد.

اين واحد که به آن RAM ( حافظه با دسترسی تصادفی Random Access Memory) نيز می گويند، برای ذخيره موقت داده ها و دستورالعملها تا هنگامی که به آنها احتياج شود استفاده می شود. اطلاعاتی که در RAM قرار دارند قابل پاک شدن و جايگزين شدن با داده های ديگر است. فضايی که ما در برنامه نويسی برای متغيرها و داده ها استفاده می کنيم در RAM قرار دارد. برای درک بهتر مطلب ، واحدهای اندازه گيری حافظه را بررسی می کنيم:

Bit بيت: يک بيت عنصری الکترونيکی در کامپيوتر است که دارای دو حالت روشن (1) و خاموش(0) می باشد و کوچکترين واحد اطلاعاتی است.

Byte بايت: چون بيتها واحدهای اطلاعاتی کوچکی هستند و فقط می توانند دو حالت را انتقال دهند، بنابراين آنها را در واحدهای بزرگتری سازماندهی می کنند تا اطلاعات بيشتری هر بار قابل انتقال باشد. اين واحد بزرگتر بايت است که واحد اصلی اطلاعات در سيستمهای کامپيوتری می باشد. هر 8 بيت ، يک بايت را تشکيل می دهند.

از واحدهای زير برای اندازه گيری حافظه استفاده می شود:

يک کيلو بايت 1 KB = 1024 B = 210 B

يک مگا بايت 1 MB = 1024 KB = 220 B

يک گيگا بايت 1 GB = 1024 MB = 230 B

ما در برنامه نويسی نياز به خانه های حافظه داريم. در تعريف خانه حافظه بايد نام و نوع اطلاعاتی که در آن قرار می گيرد معين شود.

;نام متغيير      نوع داده
 int           i1,i2,index;

دستور فوق سه خانه حافظه با نامهای i1 وi2 وindex از نوع اعداد صحيح تعيين می کند، يعنی در هر کدام از خانه های حافظه فوق می توان يک عدد صحيح در بازه 32767 تا 32768- قرار داد. نوع داده int به دو بايت حافظه نياز دارد.

نکته :

·       هر دستور زبان ++C به ; ختم می شود.

·       برای نام گذاری خانه های حافظه فقط می توان از حروف، اعداد و ... استفاده کرد و نيز حرف اول نام يک متغير بايد يک حرف باشد. به عنوان مثال نامهای 1test و test!num و mark.1 اسامی غير مجاز می باشند.

·       بين حروف نام متغير نمی توان از کاراکتر فاصله استفاده کرد.

·       زبان ++C دارای تعدادی کلمات کليدی است که نمی توان از اين کلمات به عنوان نام متغير استفاده کرد. کلمات کليدی زبان ++C

  • زبان ++C نسبت به حروف حساس است يعنی بين حروف کوچک و بزرگ تفاوت قائل می شود. در اين زبان تمام کلمات کليدی با حروف کوچک نوشته می شوند، به عنوان مثال short يک کلمه کليدی می باشد ولی SHORT يا shoRT کلمات کليدی نيستند. توصيه می شود که تمام برنامه های اين زبان با حروف کوچک نوشته شوند.

در زبان ++C چهار نوع داده اصلی وجود دارد که عبارتند از :

1- char : اين نوع داده برای ذخيره داده های کاراکتری مانند 'a' ، '1' ، '.' به کار می رود و بازه قابل قبول آن از 128- تا 127 می باشد. در حقيقت خانه های char  نيز از نوع اعداد صحيح می باشند که يک بايت طول دارند و کد اسکی کاراکتر مورد نظر را در خود حفظ می کنند. به عنوان مثال کد اسکی کاراکتر A  عدد 65 می باشد.

2- int : اين نوع داده برای ذخيره اعداد صحيح مانند 1300، 32000 ، 850- به کار می رود و بازه قابل قبول آن 32768- تا 32767 می باشد.

3- float : اين نوع داده برای ذخيره اعداد اعشاری مانند 12.5241 ، 1501.3- ، 1415.1234 به کار می رود و دقت آن تا 7 رقم اعشاری می باشد.

4- double : اين نوع داده برای ذخيره سازی اعداد اعشاری بزرگ به کار می رود و دقت آن از float بيشتر می باشد.

باکلماتی مانند signed ( علامت دار) ، unsigned ( بدون علامت)، short (کوتاه) و long ( بلند) انواع داده های جديدی می توان ايجاد کرد. نوع int با هر چهار کلمه فوق می تواند مورد استفاده قرار گيرد. نوع char می تواند با signed و unsigned به کار رود و نوع double می تواند با long به کار رود.

اعمال رياضی و محاسباتی

در مبحث حافظه با انواع داده و شيوه اختصاص دادن حافظه به متغيرها آشنا شديم حال می توانيم متغيرها را در محاسبات به کار ببريم. برای نيل به اين هدف ++C عملگرهايی را در اختيار ما قرار داده است.

عملگر انتساب (=)

عملگر تساوی جهت اختصاص دادن يک مقدار به يک متغير به کار می رود ، مانند a = 5 که عدد 5 را به متغير a تخصيص می دهد. جزئی که در سمت چپ تساوی قرار دارد همواره بايد نام يک متغير باشد، وجزء سمت راست تساوی می تواند يک عدد، يک متغير و يا ترکيبی از هر دو باشد. مانند: a=b+5 ، که در ايجا حاصل b + 5 در متغير a قرار می گيرد. توجه داشته باشيد که همواره مقدار سمت راست تساوی در مقدار سمت چپ قرار می گيرد. به دستورات زير توجه کنيد.

int a,b;
 a = 10;
 b = 4;
 a = b;
 b = 7;

اگر از دستورات فوق استفاده کنيم در نهايت مقدار a برابر 4 و مقدار b برابر 7 خواهد بود. ++C قابليتهای زيادی دارد يکی از اين قابليتها اينست که می توانيم چند دستور را در يک دستور خلاصه کنيم ، به عنوان مثال دستور :

a = 2 + (b = 5);

برابر است با:

b = 5;
 a = 2 + b;

که هر دو عبارت در نهايت عدد 7 را در متغير a قرار می دهند.

ضمناً استفاده از عبارت زير نيز در ++C مجاز می باشد:

a = b = c = 5عبارت فوق عدد 5 را به سه متغير a و b و c اختصاص می دهد.

عملگر های محاسباتی

پنج عملگر محاسباتی که قابل استفاده در زبان ++C هستند عبارتند از:

+     جمع
-     تفريق
*     ضرب
/     تقسيم
%     باقيمانده تقسيم

تنها عملگری که ممکن است برای شما ناشناس باشد عملگر % است. اين عملگر باقيمانده تقسيم دو عدد صحيح را به ما می دهد، به عنوان مثال اگر از دستور زير استفاده کنيم:

a = 11 % 3;

متغير a حاوی عدد 2 خواهد شد. چون عدد 2 باقيمانده تقسيم 11 بر 3 می باشد.

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

عملگرهای انتسال مرکب عبارتند از =+ ، =- ، =* ، =/ ، =% .اين عملگرها دو کار را با هم انجام می دهند و در کم شدن کد نويسی به ما کمک می کنند، به جای توضيح اضافی به مثال های زير که فهم مطلب را ساده تر می کند توجه کنيد:

value += increase;  «----- »  value=value+increase

 a -= 5;                  «------»  a = a -5;
 a /= b;                  «------»  a = a / b;
 price*=units+1;     «------»  price=price*(units+1);
 x %= y * z;           «------»  x = x % (y * z);

عملگرهای افزايش و کاهش

گونه ای ديگر از عملگرها که در کم شدن کد نويسی به ما کمک می کنند عملگر افزايش(++) و عملگر کاهش(--) می باشند. عملگر افزايش(++) يک واحد به مقدار قبلی که در متغير بود اضافه می کند و عملگر کاهش(--) يک واحد از مقدار قبلی که در متغير بود کم می کند.

++a;      a++;      a += 1;      a = a + 1;

هر چهار دستور فوق يک واحد به مقدار قبلی متغير اضافه می کنند.

--a;      a--;      a -= 1;      a = a - 1;

هر چهار دستور فوق يک واحد از مقدار قبلی متغير کم می کنند.

اگر از دستورات ++a و a++ به تنهايی استفاده کنيم فرقی ندارد که ++ قبل از متغير قرار گيرد يا بعد از متغير. اما اگر از ++ در کنار عملگرهای ديگر استفاده شود، اگر ++ قبل از متغير قرار گيرد ابتدا يک واحد به متغير اضافه شده سپس در محاسبه استفاده می شود، ولی اگر ++ بعد از متغير قرار گيرد ابتدا متغير در محاسبه استفاده می شود سپس يک واحد به آن اضافه می شود. همين روال برای عملگر -- نيز برقرار است. به مثال های زير توجه کنيد:

b = 3;
 a = ++b;

در مثال سمت چپ ابتدا يک واحد به b اضافه می شود، يعنی b مقدار 4 را می گيرد سپس عدد 4 در a قرار می گيرد؛ اما در مثال سمت راست ابتدا مقدار b يعنی عدد 3 در a قرار می گيرد سپس يک واحد به b اضافه می شود و مقدار 4 را می گيرد.

در اين مثال عدد 6 در m قرار می گيرد:

a = 2;
b = 3;
m = ++a + b--;

 مقدار 2 و a مقدار 3 را می گيرد.

حال که با انواع عملگرهای محاسباتی آشنا شديد عبارت زير را در نظر بگيريد.

y = 5 * 3 + 2 - 1 * 3 / 2;

مقداری که در y قرار می گيرد چه عددی می تواند باشد؟ 30 يا 24 يا 15.5 يا 17.5 . نظر شما چيست؟ شما مقدار y را چگونه حساب می کنيد؟

کامپيوتر برای بررسی و محاسبه چنين عبارتی برای اينکه با چندين جواب مواجه نشود قواعدی را در نظر می گيرد و طبق قوانين تقدم عملگرها عمل می کند. اين قوانين که مشابه قوانين جبر می باشند به ترتيب عبارتند از:

1- عملگرهايی که درون پرانتز قرار دارند اول محاسبه می شوند. در صورتی که پرانتزها تودرتو باشند ابتدا داخلی ترين پرانتز مورد بررسی و محاسبه قرار می گيرد.

2- اگر عبارتی حاوی * ، / و % باشد پس از پرانتز اين عملگرها در اولويت قرار دارند. اگر عبارتی حاوی ترکيبی از اين عملگرها باشد چون اين عملگرها در تقدم يکسانی نسبت به يکديگر قرار دارند، محاسبه به ترتيب از چپ به راست انجام می شود.

3- اعمال + و - در انتها انجام می شوند. اگر عبارتی شامل ترکيبی از اين دو عملگر باشد چون اين دو عملگر در تقدم يکسانی نسبت به هم هستند، محاسبه به ترتيب از چپ به راست انجام می شود.

با توجه به قواعد گفته شده حاصل عبارت فوق عدد 15.5 خواهد بود.

y = 5 * 3 + 2 - 1 * 3 / 2;    ----»  y = 15.5
   6   1   4   5   2   3

به مثال های زير توجه کنيد:

x = (2 + 1) * 3 + 5;          ----»  x = 14
   4    1    2   3
 z = 5 % 3 * (3 + 1);          ----»  z = 8
   4   2   3    1
 y = p * r % q + w / x - y;
   6   1   2   4   3   5

+ نوشته شده در  جمعه 6 مهر1386ساعت 6:9 بعد از ظهر  توسط ریحانه  | 

عبارات منطقی

يک عبارت منطقی، عبارتی است با مقدار درست يا نادرست. به عنوان مثال 5 بزرگتر از 3 است، يک عبارت منطقی است با مقدار درست و 5 کوچکتر از 3 است، نيز يک عبارت منطقی است اما با مقدار نادرست. در کامپيوتر نتيجه عبارات منطقی درست عدد يک و نتيجه عبارات منطقی نادرست عدد صفر خواهد بود.

ضمناً کامپيوتر هر عدد مخالف صفر را به عنوان يک عبارت منطقی درست در نظر می گيرد.

عملگرهای رابطه ای

برای مقايسه دو متغير يا دو عبارت از عملگرهای رابطه ای استفاده می کنيم که همانطور که گفته شد دارای نتيجه درست يا نادرست می باشد. عملگرهای رابطه ای عبارتند از ==( مساوی )، =!( متفاوت )، <(بزرگتر از )، >( کوچکتر از )، =<( بزرگتر مساوی از )، =>( کوچکتر مساوی از ). به مثال های زير توجه کنيد.

ضمناً به جای اينکه فقط از اعداد در عبارتهای رابطه ای استفاده کنيم می توانيم از عبارتهايی شامل متغيرها و يا ترکيبی از متغيرها و اعداد استفاده کنيم به عنوان مثال فرض کنيد a = 2 و b=3 و c=6 خواهيم داشت:

(a= =5)                   ----->false 

(a*b>=c)                ----->true 
(b+4<a*c))             -----> false 
((b=2)= =a))           -----> true 

توجه کنيد که عملگر = همانند عملگر == نمی باشد. اولی عملگر انتساب است که مقدار سمت راست را در متغير سمت چپ قرار می دهد و ديگری عملگر رابطه ای است که برابر بودن يا نبودن دو مقدار را با هم مقايسه می کند. بنابراين در عبارت ((b=2)==a)) ما ابتدا مقدار 2 را در متغير b قرار داديم سپس آن را با a مقايسه کرديم، لذا نتيجه اين مقايسه درست بود.

عملگرهای منطقی

عملگرهای منطقی عبارتند از ! ، || و && . نتيجه عملگر ! (NOT) وقتی درست است که عبارتی که اين عملگر بر روی آن عمل می کند نادرست باشد و نتيجه هنگامی نادرست است که عملوند آن درست باشد. ضمناً اين عملگر تنها يک عملوند دارد. در حقيقت اين عملگر نقيض عملوند خود را به عنوان نتيجه می دهد.

به مثال های زير توجه کنيد:

!(5 = = 5)     ----> false 
!(6 <= 4)      ----> true

!0                 ----> true
!1                 ----> false 

عملگرهای &&(AND) و ||(OR) هنگامی مورد استفاده قرار می گيرند که بخواهيم از دو عبارت يک نتيجه را بدست آوريم. نتيجه اين عملگرها بستگی به ارتباط بين دو عملوندشان دارد.

به مثال های زير توجه نمائيد:

((5==5)&&(3>6))    -----> false  
((5==5)||(3>6))      -----> true 
((3-3)&&(3<5))        -----> false  
((3-3)||(3<5))          -----> true

در مثال های زير به جای اعداد از متغير نيز استفاده شده است ( فرض کنيد a=1 و b=2 وc=3)

((b-2*a)&&(c==3))          -----> false 
((b==2*a)&&(c!=4))        -----> false 
((c==a+b)||(b<a))          -----> true 
 ((b-c==-a)||(b-c==a))    -----> true 

عملگر شرطی

اين عملگر يک عبارت را مورد ارزيابی قرار می دهد و براساس عبارت ارزيابی شده مقادير متفاوتی را به عنوان نتيجه بر می گرداند. ساختار اين عملگر به صورت زير می باشد:

نتيجه2  : نتيجه? 1  شرط

اگر شرط برقرار باشد نتيجه 1 به عنوان خروجی خواهد بود در غير اين صورت نتيجه 2 به عنوان خروجی در نظر گرفته می شود.

همانطور که در عملگرهای محاسباتی ديديم درک تقدم عملگرها، اهميت ويژه ای داشت در اينجا نيز دانستن اين تقدم از اهميت خاصی برخوردار می باشد، تقدم عملگرهای رابطه ای ، منطقی و شرطی به ترتيب عبارتند از:

1- !
2- => > =< <
3- =! ==
4- &&
5- ||
6- :?

به عنوان مثال مراحل بررسی عبارت مقابل به صورت زير می باشد:

2 >= 3 && 2 == 2 || 2 != 3
   1    4    2    5    3
 
  
نادرست    1  
 
درست    2
 
درست  
    ---->  false  
نادرست && درست4
 ----> true   
    نادرست || درست 5
 
 
جواب نهايی درست می باشد

پيشنهاد می شود برای جلوگيری از پيچيدگی فهم عبارتهای منطقی و يا محاسباتی تقدم های مورد نظر را با به کار بردن پرانتز کاملاً مشخص کنيم ، به عنوان مثال عبارت فوق را به صورت زير مورد استفاده قرار دهيم:

(((2 >= 3) && (2 == 2)) || (2 != 3))

+ نوشته شده در  جمعه 6 مهر1386ساعت 6:8 بعد از ظهر  توسط ریحانه  | 

ساختار انتخاب if

در برنامه نويسی مواردی پيش می آيد که بخواهيم دستور يا دستوراتی، هنگامی که شرط خاصی برقرار است، توسط برنامه به اجرا در آيد. اين مورد در زندگی روزمره نيز ديده می شود؛ به عنوان مثال " اگر فردا باران نيايد، من به کوه خواهم رفت." شرط مورد نظر نيامدن باران است و عملی که قرار است انجام شود رفتن به کوه می باشد. شيوه پياده سازی ساختار انتخاب if به صورت زير می باشد:

(شرط مورد نظر if (
           ;دستور مورد نظر                                            

به مثال زير توجه کنيد:

if (x == 50)
     cout << "x is 50";

اگر از دستور فوق در برنامه استفاده کنيم، اگر مقدار متغير x قبل از رسيدن به شرط فوق برابر 50 باشد عبارت "x is 50" بر روی صفحه نمايش ظاهر خواهد شد وگرنه دستور cout << "x is 50" ; ناديده گرفته می شود و برنامه خط بعدی را اجرا می کند.

توجه داشته باشيد که شرط مورد استفاده در دستور if هر عبارت منطقی می تواند باشد. در مبحث عبارات منطقی ، اينگونه عبارات و شيوه کاربرد آنها را به طور کامل بررسی کرديم.

اگر بخواهيم هنگامی که شرط برقرار می شود، بيش از يک دستور اجرا شود، بايد دستورات مورد نظر را با علامت { } دسته بندی کنيم، به مثال زير توجه کنيد:

if ( x==50 )
   {
     cout << "x is ";
     cout << x;
   }

قطعه کد فوق هنگامی که مقدار x عدد 50 باشد، عبارت "x is 50" را در صفحه نمايش چاپ می کند.

ولی در دستورات زير:

if ( x == 50)
      cout << "x is ";
      cout << x ;

خط آخر برنامه به هر جهت اجرا می شود. به عنوان مثال اگر فرض کنيم x برابر 50 است برنامه به درستی عبارت "x is 50" را چاپ می کند، اما اگر مثلاً x برابر 20 باشد عدد 20 بر روی صفحه نمايش ظاهر خواهد شد. چون عبارت ;cout <<x جز دستورات if قرار ندارد و يک دستور مجزا می باشد.

مورد اخير که توضيح داده شد يکی از مواردی است که بعضی از برنامه نويسان به اشتباه مرتکب آن می شوند. پس در هنگام نوشتن برنامه های خود به دسته بندی دستورات دقت کنيد.

ساختار انتخاب if/else

گاهی اوقات نياز داريم که در صورت برقرار بودن شرط خاصی يک سری دستورات اجرا و در صورت برقرار نبودن شرط دسته ای ديگر از دستورات اجرا گردند. به عنوان مثال اگر فردا باران بيايد من به کوه نمی روم در غير اين صورت من به کوه خواهم رفت؛ زبان ++C برای پياده سازی چنين ساختاری شيوه زير را در اختيار ما قرار داده است.

(شرط مورد نظر if (

 ;دستور1
 else   
;
دستور2

اگر شرط برقرار باشد دستور1 اجرا می گردد و در غير اين صورت دستور2 اجرا می شود. به مثال زير توجه کنيد:

if ( x = = 50 )
      cout << "x is 50";
 else
      cout << "x is not 50";

اگر مقدار متغير قبل از رسيدن به شرط فوق برابر 50 باشد عبارت "x is 50" برروی صفحه نمايش چاپ می شود در غير اين صورت عبارت "x is not 50" چاپ می شود.

بياد داشته باشيد اگر می خواهيد از بيش از يک دستور استفاده کنيد، حتماً آنها را با { } دسته بندی نماييد. به عنوان مثال:

if ( x > 50 )
    {
      cout << x;
      cout << "is greater than 50";
    }
 else
    {
      cout << x;
      cout << "is less than 50";
    }

اگر متغير x حاوی عدد 100 باشد خروجی به صورت زير می باشد:

100 is greater than 50

و اگر متغير x عدد 10 باشد خروجی به صورت زير است:

10 is less than 50

از ساختارهای if/else های تو در تو می توان برای بررسی حالتهای چندگانه استفاده کرد. برنامه زير در همين رابطه است:

#include <iostream.h>
 int main( )
 {
   int x;
   cout << "Please enter a number:";
   cin >> x;
 
   if ( x > 0 )
      cout << x << "is positive.";
   else
      if ( x < 0 )
         cout << x << "is negative.";
      else
         cout << "The number that you entered is 0.";
   return 0;
 }

برنامه فوق را سه بار با سه عدد مختلف اجرا می کنيم. خروجی ها به صورت زير می باشند:

Please enter a number : 10
 10 is positive.

Please enter a number : -5
 -5 is negative.

Please enter a number : 0
 The number that you entered is 0.

نکته : برای وضوح برنامه پيشنهاد می شود همانند برنامه فوق هنگام استفاده از if يا if/else و يا ديگر ساختارهای کنترلی از تورفتگی های مناسب استفاده کنيد. يعنی به عنوان مثال دستور if را به صورت زير:

if ( x > 0 )
     cout << x << "is positive.";

بنويسيم و نه به صورت زير :

if ( x > 0 )
 cout << x << "is positive.";

ساختار چند انتخابی switch

در دو مبحث قبلی ساختارهای if و if/else را بررسی کرديم. در برنامه نويسی گاهی به الگوريتمی نياز پيدا می کنيم که در آن متغيری به ازای هر مقدار صحيح ثابتی، باعث اجرای يک دستور خاص شود و به ازای هر مقدار اعمال مختلف انجام پذيرد. برای نيل به اين هدف ++C ساختار چند انتخابی switch را که به صورت زير می باشد در اختيار ما قرار داده است:

switch (عبارتی که بايد مورد بررسی قرار گيرد )
    {
       case
مقدار ثابت 1 :
                
مجموعه دستورات 1
                 break;
       case
مقدار ثابت 2 :
                
مجموعه دستورات 2
                 break;
 
       .
       .
       .
 
       case  n
مقدار ثابت :
                 n
مجموعه دستورات
                 break;
       default :
          
مجموعه دستورات حالت پيش فرض
  }

ساختار switch به شيوه زير عمل می کند:

switch ابتدا عبارت داخل پرانتز را مورد ارزيابی قرار می هد و سپس آن را با مقدار ثابت 1 مورد مقايسه قرار می دهد. اگر برابر بودند مجموعه دستورات 1 را اجرا خواهد شد، تا هنگامی که برنامه به دستور break برسد، هنگامی که برنامه به دستور break رسيد از ساختار چند انتخابی switch خارج می شود. اگر عبارت داخل پرانتز با مقدار ثابت 1 برابر نبود ساختار switch عبارت داخل پرانتز را با مقدار ثابت 2 مورد مقايسه قرار می دهد، در صورت برابر بودن مجموعه دستورات 2 اجرا می گردد. اين روال همينطور ادامه پيدا می کند. در صورتی که عبارت داخل پرانتز با هيچ يک از مقادير ثابت برابر نباشد، مجموعه دستورات حالت default (پيش فرض) اجرا می گردد. به برنامه زير توجه کنيد:

#include <iostream.h>
 int main( )
 {
   int x;
   cout << "Please enter a number:";
   cin >> x;
 
   switch (x) {
     case 1:
       cout << "x is 1";
       break;
     case 2:
       cout << "x is 2";
       break;
     default:
       cout << "Unknown value";
   }
   return 0;
 }

برنامه فوق را سه بار با سه عدد مختلف اجرا می کنيم. خروجی ها به صورت زير می باشند:

Please enter a number:1
 x is 1

Please enter a number:2
 x is 2

Please enter a number:5
 Unknown value

توجه داشته باشيد که ساختار switch را می توان با ساختار if/else نيز پياده سازی کرد. به عنوان مثال ساختار switch به کار رفته در مثال فوف معادل ساختار if/else زير می باشد:

if (x == 1)
     cout << "x is 1";
 else
     if (x == 2)
         cout << "x is 2";
     else
        cout << Unknown value";

ما الزامی به استفاده از حالت default در ساختار switch نداريم ولی توصيه می شود که حالت پيش فرض را به کار ببريم چون معمولاً امکان دارد که عبارت برابر با هيچ يک از مقادير ثابت نباشد و با به کار بردن حالت پيش فرض می توانيد پيغام مناسبی در اين رابطه به صفحه نمايش بفرستيد.

توجه داشته باشيد اگر دستور break بعد از هر مجموعه از دستورات استفاده نکنيم برنامه از ساختار switch خارج نخواهد شد و مجموعه دستورات بعدی اجرا می گردد تا به اولين دستور break برسد. اين مورد به ما امکان ايجاد حالتهای ترکيبی را می دهد. البته در به کار بردن اين تکنيک دقت لازم را بکنيد.

#include <iostream.h>
 int main( )
 {
   int x;
   cout << "Please enter a number:";
   cin >> x;
 
   switch (x) {
     case 1:
     case 2:
     case 3:
       cout << "x is (1 or 2 or 3)";
       break;
     default:
       cout << "x is not (1 or 2 or 3)";
     }
   return 0;
 }

برنامه فوق را سه بار با سه عدد مختلف اجرا می کنيم. خروجی ها به صورت زير می باشند:

Please enter a number:1
 x is (1 or 2 or 3)

Please enter a number:2
 x is (1 or 2 or 3)

Please enter a number:5
 x is not (1 or 2 or 3)

+ نوشته شده در  جمعه 6 مهر1386ساعت 5:2 بعد از ظهر  توسط ریحانه  | 

ساختار تکرار while

ساختار تکرار (حلقه تکرار) به برنامه نويس اين امکان را می دهد که برنامه ، قسمتی از دستورات را تا هنگامی که شرط خاصی برقرار است، را تکرار کند. به عنوان مثال :

تا وقتی که مورد ديگری در ليست خريد من هست.
 
آن را بخر و از ليست خريد حذفش کن.

مورد فوق روال يک خريد را انجام می دهد. شرط مورد نظر " مورد ديگری در ليست خريد من هست" می باشد، که ممکن است درست يا نادرست باشد. اگر شرط برقرار باشد (يعنی مورد ديگری در ليست خريد باشد) عمل "خريد آن و حذفش از ليست" انجام می گيرد. اين عمل تا وقتی که شرط برقرار باشد ادامه می يابد. هنگامی که شرط برقرار نباشد (يعنی تمام موارد ليست خريد حذف شده باشند)، ساختار تکرار به پايان می رسد و اولين دستور بعد از حلقه تکرار، اجرا می گردد. ساختار تکرار while به صورت زير می باشد.

)شرط مورد نظر while (
       { 
         
مجموعه دستورات
       }

تا وقتی که شرط داخل پرانتز برقرار باشد مجموعه دستورات اجرا خواهند شد. برای درک بهتر شيوه کاربرد حلقه های تکرار فرض کنيد می خواهيم اولين توانی از عدد 2 که بزرگتر از 1000 می باشد را بيابيم. برنامه به صورت زير خواهد بود.

#include <iostream.h>
 int main( )
  {
   int product = 2;
   while (product <= 1000)
        product = 2 * product;
    
   cout << "The first power of 2 larger than 1000 is "
        <<product <<endl;
   return 0;
  }

در برنامه فوق ابتدا متغيری به نام product را با مقدار اوليه 2 مقدار دهی کرديم. در حلقه تکرار while با هر بار اجرای دستور product=2*product مقدار متغير product دو برابر می شود بدين ترتيب با پايان يافتن حلقه متغير product حاوی عدد 1024 يعنی اولين توانی از 2 که بزرگتر از 1000 می باشد، خواهد بود.

The first power of 2 larger than 1000 is 1024

نکته : در مثال فوق در حلقه while چون تنها از يک دستور استفاده شده بود از {} استفاده نشد، ولی اگر بيش از يک دستور داشتيم ملزم به استفاده از {} بوديم.

مثال : برنامه ای بنويسيد تا مجموع اعداد يک تا صد را محاسبه کند.

#include <iostream.h>
 int main( )
   { 
     int n=1, sum=0;
     while (n <= 100)
       {
         sum += n;       // sum = sum + n;
         ++n;            // n = n + 1;
       }
     cout << "1 + 2 + ... + 100 =" <<sum << endl;
     return 0;
   }

در مثال فوق حلقه 100 بار اجرا می گردد و هر بار عدد n به متغير sum اضافه می گردد و عدد n نيز يک واحد افزايش می يابد تا در يکصدمين بار اجرای  حلقه  مقدار  متغير  n برابر 101 می شود  و هنگام  بررسی  شرط  (n <=100) توسط حلقه while شرط نادرست می شود و اولين دستور بعد از حلقه يعنی دستور خروجی cout اجرا می گردد.

1 + 2 + ... + 100 =5050نکته :

·       در مثال فوق متغير n به عنوان شمارنده دفعات تکرار حلقه بکار گرفته شد. برحسب مورد شمارنده ها معمولاً با يک يا صفر مقدار دهی اوليه می شوند.

·       متغير sum حاوی مجموع حاصلجمع بود. چنين متغيرهايی که برای محاسبه يک حصلجمع به کار می روند معمولاً با صفر مقدار دهی اوليه می شوند.

مثال : برنامه ای بنويسيد که تعداد نامشخصی عدد مثبت را از ورودی دريافت نمايد و ميانگين آنها را محاسبه نمايد. عدد 1- را برای مشخص کردن انتهای ليست اعداد در نظر بگيريد.

#include <iostream.h>
 int main( )
 { int num, counter = 0;
   float average, sum = 0;
 
   cout << "Enter a number (-1 to end):";
   cin >>num;
 
   while (num != -1){
     sum += num ; // sum = sum + sum;
     ++counter;
     cout << "Enter a number (-1 to end):";
     cin >> num;
   }
 
   if (counter != 0){
     average = sum / counter;
     cout << "The average is " << average << endl;
   }
   else
     cout << "No numbers were entered." << endl;
 
   return 0;
 }

خروجی برنامه به صورت زير خواهد بود.

Enter a number (-1 to end):20
Enter a number (-1 to end):50
Enter a number (-1 to end):65
Enter a number (-1 to end):70
Enter a number (-1 to end):90
Enter a number (-1 to end):100
Enter a number (-1 to end):1
Enter a number (-1 to end):6
Enter a number (-1 to end):-1
The average is 50.25

در برنامه مثال قبل عدد 1- به عنوان يک مقدار کنترلی به کار می رود و با وارد کردن اين عدد اجرای برنامه به پايان می رسد و ميانگين اعداد در خروجی به نمايش در می آيد. متغير num اعداد را از ورودی دريافت می کند. متغير counter وظيفه شمارش تعداد اعداد وارد شده را دارا می باشد و متغير sum مجموع حاصلجمع اعداد را در خود قرار می دهد و در نهايت متغير average، ميانگين را در خود قرار می دهد. ساختار کنترلی if به کار رفته در برنامه، جلوی بروز خطای زمان اجرای تقسيم بر صفر را می گيرد ، يعنی اگر در اولين دستور cin به کار رفته عدد 1- وارد شود خروجی برنامه به صورت زير خواهد بود :

Enter a number (-1 to end): -1
 No numbers were entered.

ساختار تکرار do/while

ساختار تکرار do/while مشابه ساختار تکرار while می باشد. در ساختار تکرار while شرط حلقه در ابتدا بررسی می شود ولی در ساختار تکرار do/while شرط در انتهای حلقه مورد بررسی قرار می گيرد، بدين ترتيب در ساختار تکرار do/while دستورات حلقه حداقل يکبار اجرا خواهند شد. ساختار تکرار do/while به صورت زير می باشد:

   do {
        
مجموعه دستورات  
);
شرط مورد نظر        }while (

به عنوان مثال به برنامه زير توجه نماييد:

#include <iostream.h>
 
 int main()
 {
    int counter = 1;
    do {
        cout << counter << " ";
       }while ( ++counter <= 10 );
    cout << endl;
 
    return 0;
 }

در اين برنامه اعداد 1 تا 10 با فاصله بر روی صفحه نمايش چاپ خواهند شد. دقت کنيد که متغير counter در قسمت شرط حلقه ، يک واحد اضافه می گردد سپس مقدارش با عدد 10 مقايسه می گردد.

1 2 3 4 5 6 7 8 9 10

مثال: برنامه ای بنويسيد که ليست نمرات يک کلاس را دريافت کرده و تعداد قبولی ها و مردودی ها را مشخص کند. ضمنا در ابتدای برنامه تعداد نمرات ليست پرسيده شود.

#include <iostream.h>
 int main( )
 {
   float mark;
   int howmany,counter=1;
   int passes=0,failures=0;
 
   cout << "How many marks : ";
   cin >> howmany;
 
   do {
       cout << "Enter mark "<<counter<<" : ";
       cin>>mark;
       if (mark>=10)
          ++passes;
       else
          ++failures;
      }while (++counter <= howmany);
 
   cout<<"Passed : "<<passes<<endl;
   cout<<"Failed : "<<failures<<endl;
 
   return 0;
 }

خروجی برنامه به صورت زير می باشد :

How many marks : 10
 Enter mark 1 : 18
 Enter mark 2 : 15
 Enter mark 3 : 9
 Enter mark 4 : 17.5
 Enter mark 5 : 9.75
 Enter mark 6 : 8
 Enter mark 7 : 11
 Enter mark 8 : 13
 Enter mark 9 : 5
 Enter mark 10 : 13
 Passed : 6
 Failed : 4

+ نوشته شده در  جمعه 6 مهر1386ساعت 5:1 بعد از ظهر  توسط ریحانه  | 

ساختار تکرار for

ساختار تکرار for نيز مانند دو ساختار قبلی يک حلقه تکرار می سازد. از ساختار تکرار for معمولاً هنگامی که دفعات تکرار حلقه براساس يک شمارنده می باشد استفاده می شود. ساختار تکرار for به صورت زير می باشد:

(تعريف متغير ;    شرط حلقه ;    افزايش يا کاهش  for (
      
      {
           
مجموعه دستورات
      }

ساختار تکرار for را با ساختار تکرار while نيز می توان پياده سازی کرد به عنوان مثال دو برنامه زير اعداد 1 تا 5 را بر روی صفحه نمايش چاپ می کنند:

#include <iostream>
 
 int main()
 {
   int counter = 1;
 
   while ( counter <= 5 ) {
      cout << counter << endl;
      ++counter;
   }
   return 0;
 }

برنامه فوق با حلقه while نوشته شده بود. در برنامه زير معادل حلقه while فوق را با حلقه for پياده سازی می کنيم:

#include <iostream>
 
 int main()
 {
 
   for ( int counter = 1; counter <= 5; counter++ )
      cout << counter << endl;
 
 return 0;
 }

در برنامه فوق هنگامی که دستور for اجرا می شود متغير کنترلی counter تعريف می گردد و عدد 1 در آن قرار می گيرد. سپس شرط حلقه مورد بررسی قرار می گيرد (counter<=5) چون مقدار counter ، عدد 1 می باشد پس شرط درست است و دستور حلقه، يعنی دستور cout اجرا می گردد و اولين عدد يعنی 1 نمايش داده می شود. پس از آن دستور ++counter اجرا می گردد و مقدار متغير counter يک واحد اضافه می شود. سپس مجدداً شرط حلقه بررسی و در صورت برقرار بودن شرط دستور cout اجرا می گردد. اين روال تا وقتی که شرط برقرار باشد ادامه می يابد و به محض برقرار نبودن شرط يعنی هنگامی که counter حاوی عدد 6 شود خاتمه می يابد و برنامه به پايان می رسد.

1 2 3 4 5

در برنامه قبلی اگر حلقه for را به صورت زير بازنويسی کنيم:

for(int counter=10; counter>=1; counter=counter-2)

خروجی برنامه اعداد زوج 10 تا 1 به صورت معکوس می باشد، يعنی :

10 8 6 4 2

توجه داشته باشيد که در حلقه فوق به جای استفاده از دستور counter=counter-1 می توانستيم از دستور counter -= 2 استفاده کنيم.

مثال : برنامه ای بنويسيد که مجموع اعداد زوج 1 تا 100 را محاسبه کند.

#include <iostream.h>
 
 int main ( )
 { int sum = 0;
 
   for (int num = 2; num <= 100; num += 2)
      sum += num;
   cout << "2 + 4 + 6 + ... + 100 =" <<sum<<endl;
 
   return 0;
 }

خروجی:

2 + 4 + 6 + ... + 100 =2550

توجه داشته باشيد که حلقه for در برنامه فوق را با کمک عملگر کاما ( , ) می توانيم به صورت زير نيز بنويسيم:

for (int num = 2;
      num <= 100;
      sum += num, num +=2);

ضمناً شکستن حلقه به چند خط نيز مشکلی ايجاد نمی کند. البته دو مورد اخير توصيه نمی شوند، چون از خوانايی برنامه می کاهند.

مثال : برنامه ای بنويسيد که عددی را از ورودی دريافت کرده و 2 به توان آن عدد را محاسبه و در خروجی چاپ نمايد.

#include <iostream.h>
 int main( )
 {
   unsigned long int x=1;
   int power;
 
   cout << "Enter power:";
   cin >>power;
 
   for (int counter=1;counter<=power;counter++)
     x*=2;
 
   cout << "2 ^ " << power << " = " << x <<endl;
 
 return 0;
 }

خروجی:

Enter power:25
 2 ^ 25 = 33554432

در مثال های فوق، دستورات حلقه for را داخل { } قرار نداديم چون حلقه for تنها شامل يک دستور بود، توجه داشته باشيد که اگر بيش از يک دستور در حلقه به کار رود ملزم به استفاده از { } می باشيم.

مثال : برنامه ای بنويسيد که جدول ضرب 5X5 را ايجاد کند.

#include <iostream.h>
 int main( )
 {
 
   for (int x=1;x<=5;x++)
    {
      for (int y=1;y<=5;y++)
         cout <<x*y<<"\t";
      cout<<endl;
    }
 
   return 0;
 }

خروجی برنامه به صورت زير خواهد بود:

1      2      3       4       5
2      4      6       8      10
3      6      9      12     15
4      8     12     16      20
5     10    15      20     25

در برنامه فوق حلقه شامل متغير x ، دارای دو دستور for و cout بود، به همين علت از { } استفاده شد. اما حلقه شامل متغير y تنها دارای يک دستور cout بود. اگر دقت کرده باشيد دستور ;"cout<<x*y<<"\t دارای علامت t\ بود. به کار بردن t\ باعث جدول بندی و مرتب شدن خروجی می شود. در حقيقت مکان نمای صفحه نمايش را در محل جدول بندی قرار می دهد. ضمناً در مثال فوق يک ساختار for در دل ساختار for ديگری استفاده شد به اين شيوه استفاده حلقه های تودرتو گفته می شود که در برنامه نويسی ها به کرات از آنها استفاده می شود. در ضمن توجه داشته باشيد که اگر از دستور ;cout <<endl استفاده نشود، خروجی به صورت نا مرتب زير خواهد بود:

1      2     3       4       5      2     4      6      8     10
3      6     9      12      15    4     8     12    16    20
5     10    15     20     25

نکته : در حلقه های تکرار ممکن است شرط حلقه را به اشتباه بنويسيم يا به عنوان مثال شمارنده حلقه را افزايش ندهيم در چنين حالاتی ممکن است پس از اجرای برنامه، برنامه به اتمام نرسد و حلقه همچنان تکرار شود. در صورت بروز چنين مشکلی با فشردن کليد Ctrl همراه با  Break    (Ctrl+Break) اجرای برنامه به صورت ناگهانی قطع می شود و به محيط ويرايشگر ++C باز می گرديد و می توانيد کد اشتباه را درست کنيد. سپس برنامه را مجدداً اجرا کنيد.

دستور های break و continue

دستور break هرگاه که در ساختارهای while و do/while و for يا switch اجرا گردد، باعث خروج فوری برنامه از آن ساختار خواهد شد و برنامه اولين دستور بعد از آن ساختار را اجرا خواهد کرد. به برنامه زير توجه کنيد:

#include <iostream.h>
 
 int main()
 {
   int n;
   for (n=10; n>0; n--)
   {
      cout << n << ",";
      if (n==3)
      {
        cout << "countdown aborted!";
        break;
      }
   }
   return 0;
 }

خروجی برنامه به صورت زير می باشد:

10,9,8,7,6,5,4,3,countdown aborted!

برنامه فوق اعداد 10 تا 4 را چاپ خواهد کرد و هنگامی که متغير n عدد 3 می شود، شمارش معکوس به پايان می رسد.

نکته : در برنامه فوق شمارنده حلقه يعنی n در خارج از دستور for تعريف شد. در چنين حالتی ، اين متغير خارج از حلقه نيز می تواند مورد استفاده قرار گيرد ولی اگر تنها در داخل حلقه تعريف شده بود ، تنها آنجا می توانستيم از آن استفاده کنيم و خارج حلقه تعريف نشده بود.

دستور continue هرگاه در ساختارهای while و do/while يا for اجرا گردد دستورات بعدی آن ساختار ناديده گرفته می شود و بار بعدی حلقه تکرار اجرا می شود. در دو ساختار while و do/while پس از اجرای دستور continue  شرط حلقه مورد بررسی قرار می گيرد، اما در ساختار for ابتدا مقدار شمارنده افزايش يا کاهش می يابد، سپس شرط حلقه بررسی می شود. توجه داشته باشيد که در حلقه while وdo/while دستور continue  همواره بعد از افزايش يا کاهش شمارنده به کار رود. به عنوان مثال برنامه زير مجموع اعداد 1 تا 20 به جز 10 را محاسبه می کند.

#include <iostream.h>
 
 int main( )
 {
   int n=0, sum=0;
   while (n < 20)
   {
     ++n; // n = n + 1;
     if (n==10) continue;
     sum += n; // sum = sum + n;
   }
   cout << "1+2+ ...(except 10)...+20=" <<sum << endl;
 
   return 0;
 }

خروجی برنامه به صورت زير می باشد.

1+2+ ...(except 10)...+20=200

برنامه عمل جمع را تا رسيدن به عدد 10 ادامه می دهد به محض اينکه n برابر 10 می شود دوباره به شرط حلقه منتقل می شود و چون شرط همچنان برقرار است وارد حلقه شده و n يک واحد افزايش می يابد و جمع اعداد ادامه می يابد.

+ نوشته شده در  جمعه 6 مهر1386ساعت 4:59 بعد از ظهر  توسط ریحانه  |