تبليغاتX
فناوري‌اطلاعات ، برنامه‌نويسي

برنامه نويسي ، شبكه ، سيستم عامل ، پايگاه داده ، سيستم اطلاعات جغرافيايي ، مديريت و كنترل پروژه

Information
سلام دوست عزيز . اين وبلاگ در مورد فناوري اطلاعات و علوم مرتبط با اون هست و داراي آموزش كامل و گام به گام برنامه نويسي به زبان ++C .
************************
پيشنهاد مي‌كنم از لينك‌هاي بخش مقالات فناوري اطلاعات ديدن كنيد .
************************
به اميد اينكه مطالب مفيد واقع بشه . با ارائه نظرات سازنده ي خودتون من رو در هرچه پربارتر كردن اين وب ياري كنيد .
متشكرم

مقالات فناوري اطلاعات
پیوندها
جستجوگر

طراح قالب

Powered By
BLOGFA.COM
لینک RSS
برنامه نويسي به زبان ++C (پست 60)

دستورهاي انتخاب تودرتو

دستورهاي انتخاب مي‌توانند مانند دستورالعمل‌هاي مركب بكار روند . به اينصورت كه يك دستور انتخاب مي‌تواند درون دستور انتخاب ديگر استفاده شود . به اين روش ، جمله‌هاي تودرتو (Nested Statements) مي‌گويند .

مثال : دستورهاي انتخاب تودرتو

int main()
{   int  n,d ;
    cout << " enter two positive integers : " ;
    cin >> n >> d ;
    if ( d != 0 )
        if ( n%d == 0 )  cout << d << " divides " << n << endl ;
        else  cout << d << " does not divide " << n << endl ;
    else  cout << d << " does not divide " << n << endl ;
}

در برنامه‌ي بالا ، دستور if..else دوم درون دستور if..else اول قرار گرفته است . پس if..else دوم وقتي اجرا مي‌شود كه d صفر نباشد . توجه كنيد كه در اينجا مجبوريم دو بار از عبارت does not divide استفاده كنيم . اولي در اولين دستور if..else قرار گرفته و زماني اجرا مي‌شود كه d صفر نباشد و n%d صفر گردد . دومي هم وقتي اجرا مي‌شود كه d صفر باشد .

وقتي دستور if..else به شكل تودرتو بكار مي‌رود ، كامپايلر از قانون زير جهت تجزيه‌ي اين دستورالعمل مركب استفاده مي‌كند :

هر else با آخرين if تنها جفت مي‌شود .

با بكارگيري اين قانون ، كامپايلر به راحتي مي‌تواند كد پيچيده‌ي زير را رمزگشايي كند :

if ( a>0 ) if ( b>0 ) ++a ; else if ( c>0 )           // BAD CODING STYLE
if ( a>4 ) ++b ; else if ( b<4 ) ++c ; else -a ;   // BAD CODING STYLE
else if ( c<4 ) --b ; else --c ; else a=0 ;           // BAD CODING STYLE

براي اينكه كد بالا را خواناتر و قابل فهم‌تر كنيم ، مي‌توانيم آن را به شكل زير بنويسيم :

if ( a>0 )
     if ( b>0 )  ++a ;
   else 
          if ( c>0 )
               if ( a<4 )  ++b ;
               else
                    if ( b<4 )  ++c ;
                    else  -a ;
          else
               if ( c<4 )  -b ;
               else  -c ;
else  a=0 ; 
      

 

نوشته شده توسط: مرضيه در یکشنبه بیستم مرداد 1387|+|
برنامه نويسي به زبان ++C (پست 59)

مثال : يك خطاي منطقي ديگر

اين برنامه خطادار است :

int main()
{   int  n1,n2,n3 ;
    cout << " enter three integers : " ;
    cin >> n1 >> n2 >> n3 ;
    if ( n1 >= n2 >= n3 )  cout << " max = " << n1 ;  // LOGICAL ERROR !
}

خروجي برنامه :

enter three integers : 0  0  1
max = 0

منشأ خطا در برنامه‌ي بالا اين است كه عبارات منطقي مقدارهاي عددي دارند . چون عبارت (n1>=n2>=n3) از چپ به راست ارزيابي مي‌شود ، به ازاي ورودي‌هاي فوق ، اولين بخش ارزيابي يعني n1>=n2 درست است چون 0=<0 اما درست به شكل عدد 1 در حافظه نگهداري مي‌شود . سپس اين مقدار با مقدار n3 كه 1 مي‌باشد مقايسه مي‌شود . يعني عبارت 1=<1 ارزيابي مي‌شود كه اين هم درست است . نتيجه اين است كه كل عبارت به عنوان درست تفسير مي‌شود گرچه در حقيقت اين طور نيست ! (0 ماكسيمم 0 و 1 نيست)

ايراد كار اينجاست كه خط اشتباه بطور نحوي صحيح است . بنابراين نه كامپايلر مي‌تواند خطا بگيرد و نه سيستم عامل . اين نوع ديگري از خطاي منطقي است . نتيجه‌ي اين مثال آن است كه :

هميشه به خاطر داشته باشيد عبارات منطقي مقدار عددي دارند .

بنابراين شرط هاي مركب مي‌توانند گول زننده باشند .

 

نوشته شده توسط: مرضيه در شنبه نوزدهم مرداد 1387|+|
برنامه نويسي به زبان ++C (پست 58)

عبارات منطقي

يك عبارت منطقي شرطي است كه يا درست است يا نادرست . در مثال قبلي عبارات d>0 و n%d==0 و (d>0 && n%d==0) عبارات منطقي هستند . قبلاٌ ديديم كه عبارات منطقي با مقادير صحيح ارزيابي مي‌شوند . مقدار صفر به معناي نادرست و هر مقدار غير صفر به معناي درست است . به عبارات منطقي عبارات بولي هم مي‌گويند .

چون همه‌ي مقادير صحيح ناصفر به معناي درست تفسير مي‌شوند ، عبارات منطقي اغلب تغيير قيافه مي‌دهند . براي مثال دستور :

if ( n )  cout << " n is not zero " ;

وقتي n غير صفر است عبارت n is not zero را چاپ مي‌كند زيرا عبارت منطقي (n) وقتي مقدار n غير صفر است به عنوان درست تفسير مي‌گردد . كد زير را نگاه كنيد :

if ( n%d )  cout << " n is not a multiple of d " ;

دستور خروجي فقط وقتي كه n%d ناصفر است اجرا مي‌شود و n%d وقتي ناصفر است كه n بر d بخش‌پذير نباشد . گاهي ممكن است فراموش كنيم كه عبارات منطقي مقادير صحيح دارند و اين فراموشي باعث ايجاد نتايج غير منتظره و نامتعارف شود .

 

نوشته شده توسط: مرضيه در جمعه هجدهم مرداد 1387|+|
برنامه نويسي به زبان ++C (پست 57)

ارزيابي ميان‌بري

عملگرهاي && و || به دو عملوند نياز دارند . يعني به دو مقدار نياز دارند تا مقايسه را روي آن دو انجام دهند . شرط هاي مركب كه از && و || استفاده مي‌كنند عملوند دوم را بررسي نمي‌كنند مگر اينكه لازم باشد . گفتيم كه p&&q نادرست است اگر p نادرست باشد . در اين حالت ديگر نيازي نيست كه q بررسي شود . همچنين p||q درست است اگر p درست باشد و در اين حالت هم نيازي نيست كه q بررسي شود . در هر دو حالت گفته شده ، با ارزيابي عملوند اول به سرعت نتيجه معلوم مي‌شود . اين كار ارزيابي ميان‌بري گفته مي‌شود .

مثال : ارزيابي ميان‌بري

برنامه‌ي زير بخش‌پذيري اعداد صحيح را بررسي مي كند :

int main()
{   int  n,d ;
    cout << " enter two positive integers : " ;
    cin >> n >> d ;
    if ( d != 0 && n == 0 ) cout << d << " divides " << n << endl ;
    else  cout << d << " does not divide " << n << endl ;
}

در اجراي زير ، d مثبت و n%d صفر است . بنابراين شرط مركب درست است :

enter two integers : 300  5
5 divide 300

در اجراي بعدي ، d مثبت است اما n%d صفر نيست . بنابراين شرط مركب نادرست است :

enter two integers : 300  7
7 does not divide 300

در آخرين اجرا ، d صفر است . پس به سرعت برآورد مي‌شود كه شرط مركب نادرست است بدون اينكه عبارت دوم يعني : n%d==0 ارزيابي شود :

enter two integers : 300  0
0 does not divide 300

ارزيابي ميان‌بري در مثال بالا از خرابي برنامه جلوگيري مي‌كند زيرا وقتي d صفر است ، رايانه نمي‌تواند عبارت n%d را محاسبه كند .

 

نوشته شده توسط: مرضيه در پنجشنبه هفدهم مرداد 1387|+|
Technology
آرشیو
آمار وبلاگ
» تعداد بازدیدها:
» مرورگر:
امکانات اضافي

© All Rights Reserved by mrz-it.Blogfa.com ©