آکادمی سیم پاور

تند نويسي در عمليات رياضي #C

تند نويسي در عمليات رياضي #C

 

در بخش امتحان كنيد بعدي، شما كدهاي برنامه قبلي را به نحوي بسيار كوتاهتر خواهيد نوشت . البته مسلما در ابتدا اين نوع نوشـتننسبت به نوع طولاني آنها غير منطقي به نظر مي رسد، اما به زودي، بعد از مقداري كار، از آنها بيشتر استفاده خواهيد كرد .

 

استفاده از عملگر هاي مختصر شده

 

)1 به ويژوال استوديو 2005 برويد و فايل Form1.cs را مجددا باز كنيد. خطهاي مشخص شده در زير را تغيير دهيد :

 

private void btnIntMath_Click(object sender, EventArgs e)

{

// Declare variable

int intNumber;

// Set number, add numbers, and display results

intNumber = 16;

intNumber += 8;

MessageBox.Show(“Addition test… ” + intNumber,

“Integer Math”);

// Set number, subtract numbers, and display results

intNumber = 24;

intNumber -= 2;

MessageBox.Show(“Subtraction test… ” + intNumber,

“Integer Math”);

// Set number, multiply numbers, and display results

intNumber = 6;

intNumber *= 10;

MessageBox.Show(“Multiplication test… ” +

intNumber,”Integer Math”);

// Set number, divide numbers, and display results

intNumber = 12;

intNumber /= 6;

MessageBox.Show(“Division test… ” + intNumber,

“Integer Math”);

}

)2 برنامه را اجرا كنيد و روي دكمه Math Test كليك كنيد. مشاهده مي كنيد كه نتيجـه اي مـشابه برنامـه قبلـي رادريافت مي كنيد .

 

چگونه كار مي كند؟

 

براي استفاده از حالت مختصر شده عملگر ها كافي است كه نام متغيير را كه براي بار دوم تكرار شـده اسـت حـذف كنيـد و علامـت رياضي مرتبط با آن را نيز به قبل از مساوي انتقال دهيد. مثلا در حالت :

 

intNumber = intNumber + 8;

عبارت به صورت زير تبديل مي شود :

 

intNumber += 8;

 

محدوديت كار با اعداد صحيح :

 

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

 

// Try multiplying numbers

int intNumber = 34;

intNumber *= 10.234;

 

اجراي برنامه بالا به علت خطايي كه در قسمت كامپايل به وجود مي آيد متوقف مي شود زي. را متغيير intNumber از نوع عددصحيح است و شما نمي توانيد آن را در حالت عادي در يك عدد اعشاري ضرب كنيد .در تقسيم دو عدد هم اگر بخواهيد يك عدد صحيح را بر يك عدد اعشاري تقسيم كنيد، با خطايي مشابه حالت جمع روبـرو ميـشويد .

اما كد زير را در نظر بگيريد :

 

// Try deviding numbers…sim-power.ir

int intNumber = 12;

intNumber /= 7;

در اين كد مقدار متغيير intNumber ( را ) 12 كه يك عدد صحيح است بر 7 كه آن نيز يك عدد صحيح است تقسيم كرده ايمو جواب برابر 1,71 است. در اين مواقع كامپايلر خطايي توليد نميكند، اما مقدار كه در متغيير intNumber ذخيـره ميـشود بـاجوابي كه شما انتظار داريد تفاوت دارد . به عبارت ديگر، بعد از اجراي كد بالا، جواب 1,71 در intNumber نخواهد بـود، بلكـه قسمت اعشار اين عدد حذف ميشود و مقدار 1 در متغيير intNumber قرار ميگيرد . همانطور كه ممكن است تصور كنيـد، اگـربرنامه اي بنويسيد كه بخواهد با انواع مختلف داده ها كار كند و از اعداد صحيح استفاده كنيد با مشكل مواجه خواهيد شد .

 

اعداد اعشاري :

 

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

 

امتحان كنيد: اعداد اعشاري

 

)1 يك پروژه جديد در ويژوال استوديو 2005 به نام Floating-Pt Math ايجاد كنيد. قبـل از هـر چيـز، يـككنترل Button روي فرم قرار دهيد و خاصيت Name آ ن را برابـر btnFloatMath و خاصـيت Textآن را برابر Double Test قرار دهيد .

)2 روي دكمه btnFloatMath دو بار كليك كنيد و در متد مربوط به رويداد كليك آن كدي را كه در زير مشخص شده است وارد كنيد.

 

Private void btnFloatMath_Click(object sender,

EventArgs e)

{

// Declare variable

double dblNumber;

// Set number, multiply numbers, and display results

dblNumber = 45.34;

dblNumber *= 4.333;

MessageBox.Show(“Multiplication test… ” +

dblNumber, “Floating Points”);

// Set number, divide numbers, and display results

dblNumber = 12;

dblNumber /= 7;

MessageBox.Show(“Division test… ” + dblNumber,

“Floating Points”);

}

 

)3 برنامه را اجرا كنيد و روي كليد Double Test كليك كنيد. نتيجه اي مشابه شكل 3-5 را مشاهده خواهيد كرد .

sim-power.ir (029)

 

 شكل3-5

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

 

// Declare variable

double dblNumber;

 

به جاي اينكه براي تعريف متغيير از كلمه كليدي int استفاده كنيم، از كلمه double استفاده كرده ايم. اين كلمه بـه ويـژوال#2005 C ميگويد كه شما مي خواهيد در اين متغيير به جاي اعداد صحيح، اعداد با قسمت اعشار قرار دهيد . در نتيجه، هر عمليـاتيكه بر روي متغيير dblNumber انج ام دهيد از نوع اعشاري خواهد بود و ميتواند قسمت اعشاري را نيـز نگهـداري كنـد . نكتـه مهم ديگر در كد بالا اين است كه به جاي استفاده از پيشوند int از پيشوند dbl استفاده كرده ايم تا مشخص باشـد كـه متغييـربالا اعداد اعشاري از نوع Double را در خود نگهداري مي كنند .

البته با اين كه عمليات روي متغيير dblNumber قسمت اعشاري را نيز نگهداري مي كنند اما روش انجام عمليـات، همـانطوركه در كد زير مشاهده مي كنيد، با عمليات روي اعداد صحيح تفاوتي ندارد .

 

// Set number, multiply numbers, and display results

dblNumber = 45.34;

dblNumber *= 4.333;

MessageBox.Show(“Multiplication test… ” + dblNumber,

“Floating Points”);

 

اگر كد بالا را اجرا كنيد، نتيجه 196,45822 را مشاهده ميكنيد كه همانند دو عددي كه در هم ضرب شدند داراي قسمت اعشاري نيزهست. البته اعدادي كه در اين محاسبات به كار ميروند حتما نبايد داراي بخش صحيح باشند، بلكه مانند قسمت تقـسيم برنامـه قبـل مي توانند از دو عدد صحيح تشكيل شده باشند كه در صورت نياز حاصل عبارت با قسمت اعشاري نمايش داده خواهد شد . براي مثال به كد زير توجه كنيد :

 

// Set number, divide numbers, and display results

dblNumber = 12;

dblNumber /= 7;

MessageBox.Show(“Division test… ” + dblNumber,

“Floating Points”);

 

نتيجه اين تقسيم داراي قسمت اعشاري نيز خواهد بود زيرا متغيير dblNumber به گونه اي تعريف شده است كـه در صـورت نياز بتواند قسمت اعشاري اعداد را نيز نگهداري كند. بنابراين اگر برنامه بالا را اجرا كنيـد، عـدد 1,71428571428571 را بـه عنـوان نتيجه مشاهده خواهيد كرد .

 

نكته: به اعداد اعشاري، اعداد با مميز شناور نيز گفته ميشود . اين نامگذاري به اين دليل است كه اين اعداد بـه صـورت عـدد علمـي ذخيره مي شوند . در نماد گذاري علمي براي اعداد، يك عدد به صورت تواني از 10 و عـددي ديگـر بـين 1 تـا 10 وجـود دارد . بـراي محاسبه مقدار واقعي عدد، 10 به توان عدد اول مي رسد و سپس در عدد دوم ضرب مي شود . براي مثـال، عـدد 10001 بـه صـورت 104*1,0001 و عدد 0,0010001 به صورت3-*1,0001 10 نوشته مي شود . در اين گونه اعداد، مميـز بـين اعـداد بعـد از رقـم اول شناور است . اعداد اعشاري در كامپيوتر نيز با همين روش نگهداري مي شوند با اين تفاوت كه اين اعداد در مبناي 10 بودند اما اعـداد در كامپيوتر در مبناي 2 ذخيره مي شوند .

 

حالتهاي ديگر :

 

اعداد اعشاري علاوه بر مقادير عددي، ميتوانند حالتهاي خاص ديگري را نيز نگهداري كنند. بعضي از اين حالتها عبارتند از :

 

NaN – كه به معني “Not a Number” يا “عدد نيست” است.

بي نهايت منفي

بي نهايت مثبت

در مورد اين حالتها صحبت نخواهيم كرد، اما در نوشتن برنامه هاي محاسباتي و رياضـي ميتـوان از ايـن حالتهـا نيـزاستفاده كرد

سعید عربعامری
من سعید عربعامری نویسنده کتاب 28 گام موثر در فتح متلب مدرس کشوری متلب و سیمولینک و کارشناس ارشد مهندسی برق قدرتم . بعد از اینکه دیدم سایتهای متعدد یک مجموعه کامل آموزش متلب و سیمولینک ندارند به فکر راه اندازی این مجموعه شدم
http://sim-power.ir

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *