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

آموزش C++ عبارت تکرار do while و تمرینات عبارات کنترلی (قسمت بیست چهارم)

259 بازدید

با سلام. آموزش C++ عبارت تکرار do while و تمرینات عبارات کنترلی (قسمت بیست چهارم) را براتون آماده کردیم از سایت ام اس پی سافت. امیدوارم مفید باشد.

do while

۵-۵  عبارت تکرار do while

عملکرد عبارت تکرار do while همانند عبارت while است. در عبارتwhile ، شرط تکرار حلقه در ابتدای حلقه تست می شود، قبل از اینکه بدنه حلقه به اجرا درآید. عبارت do while شرط تکرار حلقه را پس از اجرای حلقه تست می کند. از اینرو، در یک عبارت do while، همیشه بدنه حلقه حداقل یکبار به اجرا در می آید. اگر فقط یک عبارت در بدنه وجود داشته باشد، استفاده از براکت‌ها در do…whilewhile و do while از براکت‌ها استفاده می شود. برای مثال، ضرورتی ندارد. با این همه، معمولا برای اجتناب از سردرگمی مابین عبارات

while (شرط)

نشان‌دهنده سرآیند عبارت while است. یک عبارت do while بدون براکت‌ها در اطراف بدنه خود (با یک عبارت) بصورت زیر خواهد بود

do

عبارت

while ( شرط );

که میتواند باعث اشتباه شود. خط آخر، میتواند توسط خواننده به غلط بعنوان یک عبارت while با عبارت تهی تفسیر شود (وجود سیمکولن در انتهای شرط). از اینرو، برای اجتناب از اشتباه، بهتر است در یک عبارت do…while با یک عبارت از براکت‌ها استفاده شود:

do {

عبارت;

} while ( شرط );

در برنامه شکل ۷-۵ از یک عبارت do while برای چاپ مقادیر از ۱۰ تا ۱ استفاده شده است. عبارت do…while در خطوط ۱۱-۱۵ اعمال شده است. در اولین برخورد برنامه با این عبارت، خط ۱۳ اجرا شده و مقدار متغیر counter (با مقدار ۱) چاپ شده، سپس counter یک واحد افزایش می یابد (خط ۱۴). سپس شرط در خط ۱۵ ارزیابی می شود. اکنون متغیر counter حاوی مقدار ۲ است که کمتر یا مساوی با ۱۰ می باشد، چون شرط برقرار است، عبارت do while مجدداً اجرا می شود. در بار دهم که عبارت اجرا شد، عبارت خط ۱۳ مقدار ۱۰ را چاپ کرده و در خط ۱۴، مقدار counter به ۱۱ افزایش می یابد. در این لحظه، شرط موجود در خط ۱۵، نادرست ارزیابی شده و برنامه از عبارت do…while خارج می شود و برنامه به سراغ عبارت پس از حلقه می رود (خط ۱۷).

cpp-ch5-7

شکل ۷-۵ | عبارت تکرار do…while

دیاگرام فعالیت UML عبارت do…while

شکل ۸-۵ حاوی دیاگرام فعالیت UML برای عبارت do…while است. این دیاگرام به وضوح نشان می دهد که شرط تکرار حلقه حداقل پس از یک بار اجرای عبارات موجود در بدنه حلقه، ارزیابی نخواهد شد. این دیاگرام فعالیت را با عبارت while بکار رفته در شکل ۶-۴ مقایسه کنید. مجدداً، توجه کنید که این دیاگرام حاوی یک نماد وضعیت عمل و تصمیم‌گیری است.

cpp-ch5-8

شکل ۸-۵ | دیاگرام فعالیت UML عبارت تکرار do…while

۶-۵   عبارت چند انتخابی switch

در فصل گذشته، در ارتباط با عبارت تک انتخابی if و دو انتخابی if…else صحبت کردیم. زبان C++ دارای عبارت چند انتخابی switch برای رسیدگی به چنین شرایطی است.

کلاس GradeBook با عبارت switch

در مثال بعدی، مبادرت به عرضه یک نسخه بهبود یافته از کلاس GradeBook معرفی شده در فصل سوم و فصل چهارم می کنیم. نسخه جدید از کاربر می خواهد تا مجموعه‌ای از امتیازات حرفی را وارد کرده، سپس تعداد دانشجویانی که هر کدام امتیازی دریافت کرده‌اند، به نمایش در می آورد. این کلاس از یک عبارت switch برای تعیین اینکه امتیاز وارد شده یک A، B، C، D یا F می باشد و افزایش مقدار شمارنده امتیاز وارد شده، استفاده می کند. کلاس GradeBook در برنامه شکل ۹-۵ تعریف شده و تعریف تابع عضو آن در برنامه شکل ۱۰-۵ قرار دارد. شکل ۱۱-۵ نمایشی از اجرای نمونه برنامه همراه ورودی ها و خروجی برنامه main است که از کلاس GradeBook برای پردازش امتیازات استفاده می کند. همانند نسخه‌های قبلی تعریف کلاس، تعریف کلاس GradeBook در شکل ۹-۵ حاوی نمونه اولیه تابع برای توابع عضو setCourseName در خط ۱۳، getCourseName در خط ۱۴ و displayMessage در خط ۱۵ به همراه سازنده کلاس در خط ۱۲ است. همچنین در تعریف کلاس عضو داده courseName بصورت private اعلان شده است (خط ۱۹).

کلاس GradeBook در شکل۹-۵ دارای پنج عضو داده private است (خطوط ۲۰-۱۴)، متغیرهای شمارنده برای هر امتیاز (یعنی برای A، B، C، D و F). همچنین کلاس دارای دو تابع عضو public بنام‌های inputGrades و displayGradeReport است. تابع عضو inputGrade (اعلان شده در خط ۱۶) مبادرت خواندن حروف امتیازی به تعداد اختیاری از طرف کاربر با روش مقدار مراقبتی می کند و شمارنده امتیاز مقتضی را برای هر امتیاز وارد شده به روز می نماید. تابع عضو displayGradeReport (اعلان شده در خط ۱۷) گزارشی از تعداد دانشجویان دریافت‌کننده هر امتیاز به نمایش در می آورد.

cpp-ch5-9

شکل ۹-۵ | تعریف کلاس GradeBook.

فایل کد منبع GradeBook.cpp در شکل۱۰-۵ حاوی تعریف تابع عضو کلاس GradeBook است. توجه کنید زمانیکه یک شی GradeBook برای اولین بار ایجاد می شود و هنوز هیچ امتیازی وارد نشده است، خطوط ۱۶-۲۰ در سازنده مبادرت به مقداردهی اولیه پنج شمارنده امتیاز با صفر می کنند. همانطوری که بزودی خواهید دید، این شمارنده‌ها در تابع عضو inputGrade و بعنوان امتیازهای ورودی کاربر افزایش می یابند. تعاریف توابع عضو setCourseName، getCourseName و displayMessage با نسخه‌های قبلی موجود در کلاس GradeBook یکسان هستند. اجازه دهید تا نگاهی به توابع عضو جدید در GradeBook داشته باشیم.

cpp-ch5-101

cpp-ch5-102

cpp-ch5-103

cpp-ch5-104

شکل۱۰-۵ | کلاس GradeBook از عبارت switch برای شمارش امتیازات A, B, C, D و F استفاده میکند.

خواندن کاراکترهای ورودی

کاربر مبادرت به وارد کردن امتیازات حرفی برای یک واحد درسی در تابع inputGrades میکند (خطوط ۵۲-۱۰۱). در سرآیند حلقه while در خط ۶۰، ابتدا عبارت تخصیصی قرار گرفته در درون پرانتز ( grade = cin.get() ) اجرا میشود. تابع cin.get() یک کاراکتر از صفحه کلید خوانده و آن را در متغیر grade از نوع صحیح ذخیره میسازد (اعلان شده در خط ۵۴). معمولاً کاراکترها در متغیرهای از نوع char ذخیره میشوند، با این همه، میتوان کاراکترها را در هر نوع داده صحیحی ذخیره کرد، چرا که نشاندهنده ۱ بایت صحیح در کامپیوتر هستند. از اینرو، میتوانیم براساس استفاده، با یک کاراکتر همانند یک مقدار صحیح یا بعنوان یک کاراکتر رفتار کنیم. برای مثال، عبارت

cout << “The character (” << ‘a’ << “) has the value”

<< static_cast< int > ( ‘a’ ) << endl;

مبادرت به چاپ کاراکتر a و مقدار صحیح آن بصورت زیر می‌کند:

The character (a) has the value 97

عدد صحیح ۹۷ نشاندهنده شماره عددی کاراکتر a در کامپیوتر است. اکثر کامپیوترها از مجموعه کاراکتری ASCII (American Standard Code for Information Interchange) استفاده می‌کنند، که در این مورد ۹۷ نشاندهنده حرف کوچک ‘a’ است.

بطور کلی عبارات تخصیص‌دهنده مبادرت به تخصیص مقدار قرار گرفته در سمت راست به متغیر قرار گرفته در سمت چپ علامت = میکنند. بنابر این مقدار عبارت تخصیصی grade=cin.get() همان مقدار برگشتی از سوی cin.get() بوده و به متغیر grade تخصیص مییابد. میتوان از عبارات تخصیص‌دهنده برای تخصیص یک مقدار به چندین متغیر استفاده کرد. برای مثال در عبارت زیر

a=b=c=0;

ابتدا تخصیص c=0 صورت می‌گیرد چرا که عملگر = دارای شرکت‌پذیری از سمت راست به چپ است. سپس به متغیر b مقدار تخصیصی c=0، تخصیص می‌یابد (که صفر است). سپس متغیر a حاوی مقدار تخصیصی b=(c=0) خواهد شد که آن هم صفر است. در برنامه، مقدار عبارت تخصیصی grade=cin.get() با مقدار EOF مقایسه می‌شود (نمادی که کوتاه شده عبارت “end-of-file” است). ما از EOF (که معمولاً دارای مقدار است) بعنوان مقدار مراقبتی استفاده‌ کرده‌ایم. با این همه، نیازی به تایپ مقدار -۱ یا تایپ حروف EOF بعنوان مقدار مراقبتی ندارید. بجای آن از یک ترکیب کلیدی استفاده کرده‌ایم، که نشاندهنده EOF در سیستم است. EOF یک ثابت سمبولیک سیستم است که در سرآیند فایل <iostream> تعریف شده است. اگر مقداری به grade تخصیص دهید که معادل با EOF باشد، حلقه while در خطوط ۶۰-۱۰۰ بکار خود خاتمه می‌دهد. نمایش کاراکترهای وارد شده به این برنامه را بصورت مقادیر صحیح انتخاب کرده‌ایم، چرا که EOF دارای یک مقدار صحیح است.

در سیستم‌های UNIX/Linux و برخی از سیستم‌های دیگر، EOF با تایپ

<ctrl> d

در یک خط وارد می‌شود. این عبارت به این معنی است که کلید ctrl را فشار و پایین نگه داشته و سپس کلید d فشار داده شود. در سیستم‌های دیگر همانند Microsoft Windows، می‌توان EOF را با تایپ

<ctrl> z

وارد کرد.

در این برنامه، کاربر امتیازها را توسط صفحه کلید وارد می‌کند. زمانیکه کاربر کلیدEnter  را فشار دهد، کاراکترها توسط تابع cin.get() خوانده می‌شوند، یک کاراکتر در یک زمان. اگر کاراکتر وارد شده EOF نباشد، برنامه وارد عبارت switch می‌شود (خط ۶۳-۹۹) که شمارنده امتیاز را متناسب با حرف وارد شده، یک واحد افزایش می‌دهد.

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

نظرات

2 نظر در مورد آموزش C++ عبارت تکرار do while و تمرینات عبارات کنترلی (قسمت بیست چهارم)

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

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

  1. سلام و خسته نباشید
    من سورس آژانس مسافربری رو دانلود کردم و وقتی میخوام اجراش کنم رمز میخواد که نمیدونم کجاست
    لطفا راهنمائی کنید
    ممنون

    ۱