در قسمت قبل اصول اولیه برنامه نویسی در ++c معرفی شد. در این نوشته قصد داریم که ساختار شرط در سی پلاس پلاس را مورد بررسی قرار دهیم.

در ++c ساختار تصمیم را با if و else پیاده سازی میکنیم. چنانچه با الگوریتم و فلوچارت آشنایی داشته باشید می‌توان معادلسازی زیر را در نظر گرفت:

دانشگاه برنامه نویسان جلسه 2 - ساختار شرط در سی پلاس پلاس

با یک مثال شروع می‌کنیم

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

#include <iostream>
using namespace std;

int main()
{
	int x,y;
	cout<<"Enter two numbers:" ;
	cin>>x>>y;
	if(x>y)
	{
		cout<<"Maximum is: "<<x<<endl;
	}
	else
	{
		cout<<"Maximum is: "<<y<<endl;
	}
	return 0;
}

توضیح کد:

در خط 9 شرط x>y چک می‌شود. چنانچه درست باشد خط 11 اجرا می‌شود و چنانچه غلط باشد خط 15 اجرا می‌شود.

مثال 2: برنامه‌ای بنویسید که یک عدد از ورودی دریافت و زوجیت آن را چاپ کند.

#include <iostream>
using namespace std;

int main()
{
	int x;
	cin>>x;
	if(x%2==0)
	{
		cout<<x<<" is even "<<endl;
	}
	else
	{
		cout<<x<<" is odd "<<endl;
	}
	return 0;
}


خط 8: در ++c شرط تساوی را با == نمایش می‌دهند. وقتی در شرط مینویسیم x%2==0 به این معناست که اگر باقیمانده x بر 2 صفر شد مقدار این عبارت برابر true شود و چنانچه برابر صفر نباشد یعنی مقدار این عبارت false است. (توجه داشته باشید = در ++c به معنی انتساب است مثلا x=2 به این معنی است که 2 را در x ذخیره کن.)

مثال 3: بنویسید که بزرگترین عدد بین 3 عدد حقیقی را چاپ کند.

#include <iostream>

using namespace std;

int main()
{
	double a,b,c;
	cout<<"Enter three numbers:";
	double Max;
	cin>>a>>b>>c;
	Max=a;
	if(b>Max)
	{
		Max=b;
	}
	if(c>Max)
	{
		Max=c;
	}
	cout<<"Maximum is: "<<Max<<endl;
	return 0;
}


در این مثال در ابتدا فرض میکنیم عدد اول بزرگترین عدد است و آن را در max ذخیره میکنیم. سپس اعداد بعدی را با max مقایسه میکنیم. چنانچه هر کدام از اعداد از max بزرگتر باشد آن عدد را در max ذخیره میکنیم. اگر کد را با دقت خوانده باشید حتما متوجه شده‌اید که میتوانیم if را بدون else بنویسیم و لزومی ندارد که برای هر if حتما else تعریف شود.

مثال 4: برنامه‌ای بنویسید که از ورودی ضرایب یک معادله درجه 2 را دریافت کند و ریشه های آن را چاپ کند

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
	double a,b,c;
	cin>>a>>b>>c;
	double delta=pow(b,2)-4*a*c;
	if (delta>0)
	{
		cout<<"2 answers:"<<endl;
		double x1=(-b+sqrt(delta))/(2*a);
		double x2=(-b-sqrt(delta))/(2*a);
		cout<<x1<<endl<<x2<<endl;
	}
	else if(delta==0)
	{
		cout<<"1 answers:"<<endl;
		double x1=(-b)/2*a;
		cout<<x1<<endl;
	}
	else
	{
		cout<<"No answer!"<<endl;
	}
	return 0;
}



توضیح کد:

در این کد با ساختار جدیدی آشنا می‌شوید: else if. ممکن است این سوال برایتان پیش بیاید که چه موقع از else if استفاده میکنیم؟

در پاسخ باید گفت چنانچه شما با متغیری روبرو هستید که مقدار آن در دو حالت برایتان مهم است از if و else استفاده میکنید. مثلا میخواهید بدانید x زوج است یا خیر، x مثبت است یا خیر …
اما اگر در وضعیتی باشید که چند مقدار برای متغیر متصورید باید از if ، else if (و در صورت نیاز else) استفاده کنید. مثلا در مثال بالا مقدار دلتا درا 3 حالت امکان‌پذیر است: مثبت، منفی و صفر.

در کانال یوتیوبم ساختار شرط رو در قالب 3 جلسه آموزش دادم. if، else if، switch case و شرطهای تو در تو. میتونید از اینجا ببینید:

یوتیوب

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

#include <iostream>
#include <cmath>

using namespace std;

int main()
{
	int x;
	cin>>x;
	if(x<=93)
	{
		cout<<"Bahar"<<endl;
	}
	else if(x<=186)
	{
		cout<<"Tabestan"<<endl;
	}
	else if(x<=276)
	{
		cout<<"Paeiz";
	}
	else
	{
		cout<<"Zemestan";
	}

	return 0;
}

توضیح کد:

در این کد برای عددی که از ورودی دریافت می‌شود 4 حالت امکان‌پذیر است. بنابراین باید از if و else if استفاده کرد. نکته مهمی که در این کد در نظر گرفته نشده است صحت عدد ورودی است. مثلا اگر عدد ورودی کاربر عدد نامعتبر 1- باشد در خروجی بهار چاپ می‌شود. (چرا؟) همچنین اگر عدد 400 وارد کند زمستان چاپ می‌شود. (چرا؟) برای حل این مشکل می‌توان شرط اول را به این صورت بازنویسی کنیم:

if(x>0 && x<=93)

و برای حل مشکل دوم نیز کد زیر را جایگزین خط 22 تا 25 میکنیم:

else if(x<=365)
{
	cout<<"Zemestan";
}
else
{
	cout<<"invalid day";
}

همچنان تاکید بر این موضوع دارم که مثالهایی که تا اینجا مطرح شده‌اند مثالهای بسیار ساده ای هستند و در این مثالها این هدف را دنبال می‌کنیم که سینتکس ++c را به زبان ساده توضیح دهیم. در ادامه با بیان چند نکته در مورد ساختار if این قسمت از آموزش را به پایان می‌رسانیم.

1- ممکن است در برخی مسائل نیاز به بررسی چند شرط همزمان باشد. به طور مثال اعدادی که هم بر 3 و هم بر 5 بخش‌پذیرند. برای حل این مسائل می‌توان از if های تو در تو استفاده کرد که خوانایی برنامه را کاهش می‌دهند. روش بهتر این است که از ترکیب شرطها استفاده کنیم. برای این کار می‌توان از عملگرهای && یا || استفاده کرد. عملگر && به معنی “و” و عملگر || به معنی “یا” است. مثلا شرط زیر به این معنی است که x هم بر 5 بخش‌پذیر باشد و هم بر 3:

if ((x%3==0) && (x%5==0))

و شرط زیر به این معنی است که x یا بر 5 بخش‌پذیر باشد یا بر 3:

if ((x%3==0) ||(x%5==0))

2- علامت ! (بخوانید نقیض) برای برعکس کردن حاصل یک عبارتست، یعنی اگر مقدار آن true باشد آن را false و اگر false باشد، آن را true می‌کند. مثلا شرط (1<2)! یک عبارت false است.

3- اولویت && بیشتر از || است و اولویت ! از هر دو اولویت && و || بیشتر است. مثلا حاصل شرط زیر true است: (چرا؟)

true    || true   && !true   ||    true

در جلسه بعدی در مورد ساختار تکرار در سی پلاس پلاس صحبت می کنیم:

اگه دوست دارید به آموزش کامل سی پلاس پلاس دسترسی داشته باشید میتونید از لینک زیر این دوره رو دریافت کنید: