ورود / ثبت نام
0
0

آموزش C++ تمرینات for (قسمت بیست سوم)

258 بازدید

مثال‌های مطرح شده در این بخش، متدهای متنوعی از کاربرد متغیر کنترلی در یک عبارت for هستند. در هر مورد، سرآیند for نوشته شده است.

for

a) متغیر کنترلی که از ۱ تا ۱۰۰ با گام ۱ افزایش می یابد.

for ( int i = 1; i <= 100; i++)

b) متغیر کنترلی که از ۱۰۰ تا ۱ با گام -۱ افزایش می یابد (با کاهش ۱).

for ( int i = 100; i >= 1; i–)

c) متغیر کنترلی که از ۷ تا۷۷ ، با گام ۷ افزایش می یابد.

for ( int i = 7; i <= 77; i += 7)

d) متغیر کنترلی که از ۲۰ تا ۲ با گام -۲ افزایش می یابد.

for ( int i = 20; i >= 2; i -=2)

e) متغیر کنترلی، که توالی از مقادیر ۲۰، ۱۷، ۱۴، ۱۱، ۸، ۵ و ۲ به خود می گیرد.

for ( var j = 2; j <= 20; j += 3)

f) متغیر کنترلی که توالی از مقادیر ۰، ۱۱، ۲۲، ۳۳، ۴۴، ۵۵، ۶۶، ۷۷، ۸۸ و ۹۹ به خود می گیرد.

for ( var j = 99; j >= 20; j -=11)

برنامه: مجموع اعداد زوج از ۲ تا ۲۰

دو مثال بعدی برنامه‌های ساده‌ای هستند که به توضیح عبارت for می پردازند. برنامه ۵-۵ از عبارت for برای بدست آوردن مجموع اعداد زوج ۱۰۰ تا ۲ استفاده می کند. در هر بار تکرار حلقه (خطوط ۱۲-۱۳) مقدار جاری متغیر کنترل number به متغیر total افزوده می شود.

cpp-ch5-5

شکل ۵-۵ | عبارت for بکار رفته برای محاسبه مجموع اعداد زوج.

به بدنه عبارت for در برنامه ۵-۵ توجه نمائید. در واقع می توان این بدنه را با سمت راسترین بخش سرآیند for و با استفاده از کاما ادغام کرد، بصورت زیر:

for ( int number = 2; // initialization

number <= 20; // loop continuation condition

total += number, number += 2 ) // total and increment

;// empty body

برنامه:محاسبه سود

مثال بعدی در ارتباط با محاسبه یک مسئله ترکیبی با استفاده از عبارت for است. صورت مسئله به شرح زیر است:

شخصی ۱۰۰۰.۰۰ دلار در یک حساب پس انداز با سود ۵% سرمایه‌گذاری کرده است. با فرض اینکه کل سود نیز ذخیره میشود، مقدار پول موجود در حساب را در پایان هر سال در یک مدت ۱۰ ساله محاسبه و چاپ کنید. برای بدست آوردن این مقادیر، از فرمول زیر کمک بگیرید:

a = p(1 + r)n 

در این فرمول 

p میزان سرمایه اولیه

r نرخ سود

n تعداد سال‌ها

a مقدار سرمایه در پایان سال nام است.

این مسئله مستلزم حلقه‌ای است که دلالت بر انجام محاسبه‌ای برای هر سال در مدت ده سال پول باقیمانده در حساب پس‌انداز است. این راه حل در برنامه شکل ۶-۵ آورده شده است.

عبارت for (خطوط ۲۸-۳۵) مبادرت به اجرای بدنه خود به میزان ۱۰ بار می کند. مقدار متغیر کنترلی از ۱ تا ۱۰ به میزان یک واحد در هر بار افزایش می یابد. زبان C++ حاوی عملگر توان نیست، از اینرو از تابع کتابخانه‌ای استاندارد pow به همین منظور استفاده کرده‌ایم (خط ۳۱). تابع pow(x,y) مبادرت به محاسبه مقدار x به توان y میکند. در این مثال، عبارت جبری (۱+r)n بصورت pow(1.0+rate,year) نوشته شده است، که متغیر rate نشاندهنده r و متغیر year نشاندهنده n است. تابع pow دو آرگومان از نوع double دریافت و یک مقدار double برگشت می‌دهد.

این برنامه بدون سرآیند فایل <cmath> کامپایل نمیشود. تابع pow نیازمند دو آرگومان از نوع double است. دقت کنید که متغیر year از نوع صحیح است. سرآیند <cmath> حاوی اطلاعاتی است که به کامپایلر میگوید تا مقدار year را بطور موقت تبدیل به نوع double کند، قبل از اینکه تابع فراخوانی شود. این اطلاعات در نمونه اولیه تابع pow وجود دارند. در فصل ششم با چندین تابع کتابخانه math آشنا خواهید شد.

cpp-ch5-6

شکل ۶-۵ | عبارت for برای محاسبه سود سرمایه‌گذاری. 

دقت به هنگام استفاده از نوع double در محاسبات مالی 

دقت کنید که متغیرهای amount و principal و rate از نوع double هستند. به این دلیل از این نوع استفاده کرده‌ایم که می‌خواهیم به بخش‌های کسری رسیدگی کرده و به نوعی نیاز داریم که امکان انجام محاسبات دقیق در زمینه مسائل مالی را فراهم آوریم. متاسفانه این نوع میتواند مشکل‌ساز شود. در این بخش با یک توضیح ساده شاهد خواهید بود که چگونه به هنگام استفاده از نوع float یا double در نمایش‌های مالی می توانیم دچار اشتباه شویم (فرض کنید از setprecision(2) برای مشخص کردن دو رقم دقت به هنگام چاپ استفاده کرده‌ایم): دو مبلغ دلاری ذخیره شده در ماشین میتواند ۱۴.۲۳۴ (که ۱۴.۲۳ چاپ می شود) و ۱۸.۶۷۳ (که ۱۸.۶۷ چاپ خواهد شد) را تولید کند. زمانیکه این مبالغ با هم جمع شوند، مجموع داخلی ۳۲.۹۰۷ تولید میشود که بصورت ۳۲.۹۱ چاپ میگردد. از اینرو نتیجه چاپی به صورت زیر ظاهر خواهد شد.

۱۴.۲۳

۱۸.۶۷ +

۳۲.۹۱

اما در صورتیکه خودمان این اعداد را با هم جمع کنیم مجموع ۳۲.۹۰ را بدست خواهیم آورد. پس مشکلی در کار است.

کنترل کننده‌های جریان برای قالب‌بندی کردن خروجی عددی

عبارت خروجی در خط ۲۵ قبل از حلقه for و عبارت خروجی در خط ۳۴ در حلقه for ترکیب شده‌اند تا مقادیر متغیرهای year و amount با قالب‌بندی (فرمت) تصریح شده توسط کنترل‌کننده‌های جریان پارامتری شده setprecision و setw و کنترل‌کننده استریم غیرپارامتری fixed چاپ شوند. کنترل‌کننده استریم setw(4) مشخص می کند که باید مقدار خروجی بعدی به طول فیلد مشخص شده یعنی ۴ به نمایش درآید، یعنی، cout مقدار را با حداقل ۴ موقعیت کاراکتری چاپ خواهد کرد. اگر مقداری که چاپ میشود، کمتر از ۴ کاراکتر طول داشته باشد، مقدار از سمت راست تراز می شود (بطور پیش‌فرض). اگر مقدار خروجی بیش از ۴ کاراکتر طول داشته باشد، طول فیلد گسترش می یابد تا به کل مقدار جا دهد. برای تاکید بر این نکته که مقادیر در خروجی باید از سمت چپ تراز شوند، کافیست از کنترل‌کننده استریم غیرپارامتری left استفاده شود (در سرآیند <iostream> قرار دارد). ترازبندی از سمت راست را می توان با استفاده از کنترل‌کننده استریم غیرپارامتری right بدست آورد.

قالب‌بندی های دیگر، در عبارات خروجی بر این نکته دلالت می کنند که متغیر amount بصورت یک مقدار با نقطه ثابت با یک نقطه دیسمال (تصریح‌ شده در خط ۲۵ با کنترل‌کننده استریم fixed) تراز از سمت راست در فیلدی به میزان ۲۱ کاراکتر (تصریح شده در خط ۳۴ با setw(21)) و با دقت دو رقم در سمت راست نقطه دیسمال (تصریح شده در خط ۲۵ با کنترل‌کننده setprecision(2)) چاپ خواهد شد. کنترل‌کننده‌های استریم fixed و setprecision را بر روی استریم خروجی (یعنی cout) و قبل از حلقه for اعمال کرده‌ایم چرا که این تنظیمات قالب‌بندی تا زمانیکه تغییر نیافته‌اند ثابت باقی می مانند، به چنین تنظیماتی، تنظیمات چسبنده می گویند. از اینرو، نیازی ندارند در هر بار تکرار حلقه بکار گرفته شوند. با این همه، طول فیلد (میدان) مشخص شده با setw فقط بر مقدار بعدی در خروجی بکار گرفته می شود. در فصل پانزدهم در ارتباط با قابلیت‌های قالبندی ورودی/خروجی زبان C++ صحبت خواهیم کرد.

به عبارت ۱.۰ + rate که بصورت یک آرگومان در تابع pow و در بدنه عبارت for قرار دارد، توجه کنید. در واقع، این محاسبه همان نتیجه را در زمان هر تکرار حلقه تولید می کند، از اینرو تکرار بی موردی صورت گرفته و باید این عبارت یکبار و قبل از حلقه محاسبه شود.

  • پسورد: www.mspsoft.com
آیا این مطلب را می پسندید؟
https://www.mspsoft.com/?p=2974
اشتراک گذاری:
واتساپتوییترفیسبوکپینترستلینکدین
مسعود شریفی پور
از سال 88 که با برنامه نویسی آشنا شدم خیلی علاقه مند بودم یک بستر آموزشی بسازم در فضای وب و به انتشار آموزش های در این زمینه بپردازم.حالا یک تیم داریم و با قدرت رو به جلو حرکت میکنیم.
مطالب بیشتر
برچسب ها:

نظرات

1 نظر در مورد آموزش C++ تمرینات for (قسمت بیست سوم)

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

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