آموزش الگوریتم نویسی در C++

دوشنبه 21 اسفند 1396

تعریف الگوریتم: الگوریتم یعنی مجموعه دستوراتی که برای روش حل یک مساله از شروع تا پایان در نظر میگیریم. میتوان گفت الگوریتم مهمترین بخش برنامه نویسی است. معمولاً برای نوشتن یک برنامه، ابتدا مساله را در ذهن خود حل میکنیم، سپس الگوریتم آن را به زبان روان و فارسی از شروع تا پایان مینویسیم. در انتها الگوریتم نوشته شده را به زبان برنامه نویسی تبدیل میکنیم…

الگوریتم

تعریف الگوریتم:

الگوریتم یعنی مجموعه دستوراتی که برای روش حل یک مساله از شروع تا پایان در نظر میگیریم. میتوان گفت الگوریتم مهمترین بخش برنامه نویسی است. معمولاً برای نوشتن یک برنامه، ابتدا مساله را در ذهن خود حل میکنیم، سپس الگوریتم آن را به زبان روان و فارسی از شروع تا پایان مینویسیم. در انتها الگوریتم نوشته شده را به زبان برنامه نویسی تبدیل میکنیم…

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

حل:

۱ – شروع

۲ – ابتدا عدد A را بگیر.

۳ – عدد B را بگیر.

۴ – عدد A و B را با هم جمع کن

۵ – حاصل جمع را در خروجی نمایش بده (حاصل جمع A و B)

۶ – پایان

توضیح: منظور از “عدد را بگیر” این است که عددی را از ورودی کیبورد رایانه دریافت کنیم. و منظور از “در خروجی نمایش بده” یعنی نمایش دادن در مانیتور است. حال میخواهیم این الگوریتم را به زبان ++C تبدیل کنیم. اعداد استفاده شده را اعداد صحیح در نظر میگیریم:

int A, B;
cin >> A;
cin >> B;
cout << A + B;

مثال: الگوریتم برنامه ای که میانگین سه عدد را بگیرد و نمایش دهد.

۱ – شروع

۲ – عدد A را بگیر

۳ – عدد B را بگیر

۴ – عدد C را بگیر

۵ – اعداد A و B و C را با هم جمع کن و حاصل را در D ذخیره کن.

۶ – عدد D را بر ۳ تقسیم کن و حاصل را در D ذخیره کن.

۷ – حاصل (D) را نمایش بده.

۸ – پایان.

برای تبدیل الگوریتم به زبان برنامه نویسی ++C بایست به این نکته توجه کنیم که در اینجا چون از تقسیم استفاده میکنیم عدد D را از نوع float تعریف میکنیم تا قابلیت ذخیره و نمایش اعشار را داشته باشد اما میتوانیم اعداد A و B و C را به صورت عدد صحیح (int) تعریف کنیم چون در صورت مساله از ما خواسته نشده که این اعداد قابلیت نمایش اعشار داشته باشند:

int A, B, C;
float D;
cin >> A;
cin >> B;
cin >> C;
D = A + B + C;
D = D / 3;
cout << D;

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

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

۱- شروع

۲- عدد A را از ورودی دریافت کن.

۳- عدد A را بر ۲ تقسیم کن و باقیمانده تقسیم را در B ذخیره کن.

۴- اگر B برابر با صفر بود در خروجی چاپ کن “زوج است” در غیر اینصورت چاپ کن “فرد است”

۵- پایان

برای تبدیل این الگوریتم به زبان ++C میبایست از دستور شرطی if و همچنین از عملگر باقیمانده تقسیم (%) استفاده کنیم:

int A, B;
cin >> A;
B = A % 2;
if (B == 0)
{
   cout << "Zoj Ast";
}
else
{
   cout << "Fard Ast";
}

رسم فلوچارت این برنامه به صورت زیر خواهد بود:

فلوچارت و الگوریتم

 مثال: الگوریتم برنامه ای که اعداد کوچکتر از ۱۰ را در خروجی چاپ کند.

حل: در اینجا نیاز به یک شمارنده داریم که از عدد ۱ تا ۹ را به صورت یکواحد به یکواحد شمرده و در خروجی نمایش دهد. باید یک شرط قرار دهیم که هر زمان این شمارنده از ۱۰ بزرگتر شد برنامه متوقف شود.

۱- شروع

۲- عدد A را برابر با ۱ قرار بده.

۳- عدد A را در خروجی چاپ کن.

۴- عدد A را با ۱ جمع کن و حاصل را در A ذخیره کن.

۵- اگر A کوچکتر از ۱۰ بود به مرحله ی ۳ برگرد.

۶- پایان.

دقت داشته باشید که در مرحله ۵ اگر A بزرگتر از ۱۰ باشد، برنامه به مرحله ۶ یعنی پایان میرود ولی اگر A کوچکتر از ۱۰ باشد به مرحله ۳ برمیگردد یعنی یک تکرار که به تکرار در برنامه نویسی در اصطلاح “حلقه” میگوییم. نمایش این برنامه (حلقه) به زبان ++C به این صورت است:

for (int A=1; A  < 10; A++)
{
   cout << A;
}

 مثال: الگوریتم برنامه ای که اعداد زوج کوچکتر از ۲۰ را در خروجی چاپ کند.

حل: ابتدا به یک شمارنده (A) نیاز داریم که بتواند اعداد ۱ تا ۱۹ تا بشمارد و اعداد زوج آن را در خروجی نمایش دهد. در مثال های قبلی دیدیم که وقتی باقیمانده تقسیم یک عدد بر ۲ برابر با صفر بود یعنی آن عدد زوج است. پس در اینجا یک عدد دیگر (B) تعریف میکنیم که بتواند باقیمانده تقسیم A بر ۲ را در خود ذخیره کند. اگر B برابر با صفر بود میفهمیم عدد زوج است.

۱- شروع

۲- عدد A را برابر با ۱ قرار بده.

۳- عدد A را با ۱ جمع کن و حاصل را در A ذخیره کن.

۴- عدد A را بر ۲ تقسیم کن و باقیمانده تقسیم را در B ذخیره کن.

۵- اگر A بزرگتر یا مساوی ۲۰ بود برو به مرحله ۸٫

۶- اگر B برابر با صفر بود در خروجی A را چاپ کن.

۷- برگرد به مرحه ۳٫

۸- پایان.

توجه داشته باشید که در مرحله ۵ تنها زمانی که هر دو شرط برقرار باشد یعنی هم B برابر با صفر باشد و هم A کوچکتر از ۲۰ باشد، عمل چاپ و رفتن به مرحله ۳ انجام میشود در غیراینصورت از مرحله ۵ گذر میکند و به مرحله ۶ یعنی پایان میرود.

int A, B;
for (A=1; A  < 20; A++)
{
   B = A % 2;
   if (B == 0)
   {
      cout << A;
   }
}

فلوچارت برنامه فوق به صورت زیر است:

فلوچارت و الگوریتم

 مثال: الگوریتم برنامه ای که عددی را از ورودی بگیرد و یکان آن را در خروجی چاپ کند.

حل: برای اینکه یکان یک عدد صحیح را بتوانیم مشخص کنیم، کافیست باقیمانده تقسیم آن عدد بر ۱۰ را بگیریم. برای مثال اگر عدد صحیح ۳۵۲ را در نظر بگیریم و آن را بر ۱۰ تقسیم کنیم خارج قسمت عدد ۳۵ و باقیمانده عدد ۲ میشود که همان یکان آن است.

۱- شروع

۲- عدد A را از ورودی دریافت کن.

۳- عدد A را بر ۱۰ تقسیم کن و باقیمانده تقسیم را در B ذخیره کن.

۴- عدد B را در خروجی چاپ کن.

۵- پایان.

int A, B;
cin >> A;
B = A % 10;
cout << B;

جهت شناخت بیشتر انواع داده ها آموزش داده ها و متغیرها را مطالعه کنید.

مثال: الگوریتم برنامه ای که اعداد کوچکتر از ۱۰ را با هم جمع کند و حاصل را نمایش دهد.

حل: نیاز به یک شمارنده داریم که اعداد ۱ تا ۹ را بشمارد (توسط یک حلقه تکرار) و همچنین نیاز به یک متغیر دیگر داریم که بتواند مجموع این اعداد را در خود ذخیره کند. نام شمارنده را A میگذاریم و حاصل جمع را B مینامیم.

۱- شروع

۲- مقدار ۱ را در عدد A قرار بده و مقدار ۰ را در B قرار بده.

۳- مقدار A را با B جمع کن و حاصل را در B ذخیره کن.

۴- عدد A را با ۱ جمع کن و حاصل را در A ذخیره کن.

۵- اگر A کوچکتر از ۱۰ بود برگرد به مرحله ۳٫

۶- عدد B را در خروجی نمایش بده.

۷- پایان.

int B = 0;
for (int A = 1; A  < 10; A++)
{
   B = A + B;
}
cout << B;

لطفاً توجه داشته باشید که ما مقدار اولیه ۰ را به B نسبت دادیم. دلیل این است که برای اولین بار که حلقه انجام میشود یعنی زمانی که دستور B=A+B میخواهد اجرا شود در سمت راست تساوی متغیر B باید دارای یک مقدار اولیه باشد تا بتواند در محاسبات ریاضی استفاده شود. به یاد داشته باشید که در کار با اعداد، سمت راست تساوی همیشه یک عملیات ریاضی است و در عملیات ریاضی تمام متغیرها باید دارای مقدار باشند.

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

حل: به یک حلقه نیاز داریم که ۱۰ بار تکرار شود. پس به یک شمارنده حلقه نیاز داریم که آن را A مینامیم. متغیری به نام B داریم که اعدادی که از ورودی میگیریم را در آن قرار میدهیم. به یک متغیر دیگر به نام C نیاز داریم که هر بار که عددی را از ورودی میگیرد آن را در C جمع کند تا در نهایت با استفاده از آن بتوانیم میانگین را حساب کنیم.

۱- شروع

۲- عدد A را برابر با ۰ قرار بده.

۳- عدد C را برابر با ۰ قرار بده.

۴- عدد B را از ورودی بگیر.

۵- عدد B را با C جمع کن و حاصل را در C ذخیره کن.

۶- عدد A را با ۱ جمع کن و حاصل را در A ذخیره کن.

۷- اگر A کوچکتر از ۱۰ بود برو به مرحله ۴٫

۸- عدد C را در خروجی نمایش بده.

۹- پایان.

int A, B, C=0;
for (A=0; A <10; A++) { cin >> B;
    C = C + B;
}
C = C / 10;
cout << C;

لطفاً توجه داشته باشید که در مثال فوق ما شمارنده A را از صفر شروع کردیم و در شرط حلقه A <10 را استفاده کردیم یعنی از ۰ تا ۹ که در مجموع میشود ۱۰ عدد.

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

حل: به یک شمارنده برای ذخیره تعداد دانشجویان قبول شده نیاز داریم و به یک حلقه با تکرار ۲۰ بار نیاز داریم که در هر بار تکرار یک نمره از ورودی بگیرد و بررسی کند که آیا آن نمره ۱۰ یا بیشتر (نمره قبولی) بوده است یا خیر. شمارنده تعداد قبول شده ها را Count مینامیم و شمارنده حلقه را K و نمره ای که از ورودی میگیرد را Num نامگذاری میکنیم.

۱- شروع

۲- عدد Count را برابر با ۰ قرار بده.

۳- عدد K را برابر با ۰ قرار بده.

۴- عدد Num را از ورودی دریافت کن.

۵- اگر Num بزرگتر یا مساوی ۱۰ بود یکواحد به Count اضافه کن.

۶- یک واحد به K اضافه کن.

۷- اگر K کوچکتر از ۲۰ بود برو به مرحله ۴٫

۸- عدد Count را در خروجی نمایش بده.

۹- پایان.

میدانیم که نمرات درسی دارای اعشار هم هستند، پس متغیر Num را از نوع float تعریف میکنیم که قابلیت دریافت اعشار هم داشته باشد.

int Count = 0,
float Num;
for (int K=0; K  < 20; K++) { cin >> Num;
     if (Num >= 10)
     {
         Count = Count + 1;
     }
}
cout << Count;

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

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

۱- شروع

۲- عدد A را از ورودی دریافت کن.

۳- عدد A را بر ۱۰۰ تقسیم کن و حاصل را در A ذخیره کن.

۴- باقی مانده تقسیم عدد A بر ۱۰ را در B ذخیره کن.

۵- عدد B را در خروجی نمایش بده.

۶- پایان.

int A, B;
cin >> A;
A = A / 100;
B = A % 10;
cout >> B;

برای مثال اگر عدد صحیح ۱۲۵۶ را در نظر بگیریم، میخواهیم صدگان آن یعنی عدد ۲ را در خروجی نمایش دهیم. حال اگر یکبار آن را بر ۱۰۰ تقسیم کنیم عدد ۱۲ باقی میماند. اگر باقیمانده تقسیم عدد ۱۲ بر ۱۰ را در نظر بگیریم، عدد ۲ باقی میماند که همان جواب مساله است. *واضح است که این برنامه فقط برای اعداد بزرگتر از ۱۰۰ (که دارای صدگان هستند) جواب میدهد.

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

حل: در اینجا به یک شمارنده و یک حلقه نیاز داریم. شمارنده تعداد ارقام را مشخص میکند که در اینجا با نام Counter تعریف کرده ایم. میدانیم که با تقسیم هر عدد بر ۱۰ میتوانیم یکان آن عدد را حذف کنیم. در اینجا به کمک حلقه، عدد مورد نظر را n بار بر ۱۰ تقسیم میکنیم تا جایی که عدد صفر شود و با هر تقسیم یک واحد به شمارنده اضافه میکنیم.

۱- شروع.

۲- عدد A را از ورودی دریافت کن.

۳- عدد A بر ۱۰ تقسیم کن و حاصل را در A ذخیره کن.

۴- عدد Counter را با ۱ جمع کن و در Counter ذخیره کن.

۵- اگر A بزرگتر از صفر بود، برو به مرحله ۳٫

۶- عدد Counter را در خروجی نمایش بده.

۷- پایان.

int A, Counter=0;
while (A > 0)
{
    A = A / 10;
    Counter = Counter + 1;
}
cout << Counter;

Behzad Yazdi

نویسنده 1 مقاله در برنامه نویسان
  • C++
  • 14k بازدید
  • 6 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید