PDA

View Full Version : مبتدی: if و else if.



Faraz Mehraien
دوشنبه 16 دی 1392, 21:13 عصر
با سلام ببخشید یه سوال ساده داشتم , واقعا توش گیر کردم.وقتی از if و else if های متعدد استفاده می کنیم امکانش هست یه else آخر بدیم که اگر هیچ کدام از شرط های بالا برقرار نبود یه سری دستور انجام بده. آخه من امتحان کردم ولی else فقط به دستور آخر نسبت داد.
ممنون می شم اگه راهنمایی کنید.

کامبیز اسدزاده
دوشنبه 16 دی 1392, 21:28 عصر
با سلام ببخشید یه سوال ساده داشتم , واقعا توش گیر کردم.وقتی از if و else if های متعدد استفاده می کنیم امکانش هست یه else آخر بدیم که اگر هیچ کدام از شرط های بالا برقرار نبود یه سری دستور انجام بده. آخه من امتحان کردم ولی else فقط به دستور آخر نسبت داد.
ممنون می شم اگه راهنمایی کنید.

بستگی به نوع Statement هاتون داره.
مثلا فرض کن 5 تا if - else داری امکان این هست که در دومینش عملیات بیفته رو حلقه و اصلا else های بعدی کار نکنه ! کلا بستگی داره Statement چجوری پیاده سازی شده باشه.

Faraz Mehraien
دوشنبه 16 دی 1392, 22:01 عصر
بستگی به نوع Statement هاتون داره.
مثلا فرض کن 5 تا if - else داری امکان این هست که در دومینش عملیات بیفته رو حلقه و اصلا else های بعدی کار نکنه ! کلا بستگی داره Statement چجوری پیاده سازی شده باشه.
می خوام بدونم اگه هیچ کدوم از اون 5 تا اجرا نشه دستور آخر اجرا بشه باید چی کار کنم.؟؟.نه اینکه فقط دستور 4 برقرار نباشه و بعد دستور آخر اجرا بشه اینو نمی خوام.

Azar.099
دوشنبه 16 دی 1392, 22:25 عصر
ببین برنامه به ترتیب کامپایل میشه
پس اگر اون else را در اخر else if ها و برنامت گذاشته باشی اگر هیچ کدوم از if ها برقرار نبود else اجرا میشه

کامبیز اسدزاده
دوشنبه 16 دی 1392, 22:41 عصر
می خوام بدونم اگه هیچ کدوم از اون 5 تا اجرا نشه دستور آخر اجرا بشه باید چی کار کنم.؟؟.نه اینکه فقط دستور 4 برقرار نباشه و بعد دستور آخر اجرا بشه اینو نمی خوام.

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


if(boolean_expression 1)
{
// اجرا هنگامی که عبارات بولین 1 درست است
}
else if( boolean_expression 2)
{
// اجرا هنگامی که عبارات بولین 2 درست است
}
else if( boolean_expression 3)
{
// اجرا هنگامی که عبارات بولین 3 درست است
}
else
{
// اجرا زمانی که هیچ یک از شرایط فوق درست نیست.
}


در غیر این صورت باید از switch استفاده کنید.

Faraz Mehraien
چهارشنبه 18 دی 1392, 17:42 عصر
به اینصورت ترتیب رعایت میشه و از اول تا آخر کد خونده میشه به صورت زیر.


if(boolean_expression 1)
{
// اجرا هنگامی که عبارات بولین 1 درست است
}
else if( boolean_expression 2)
{
// اجرا هنگامی که عبارات بولین 2 درست است
}
else if( boolean_expression 3)
{
// اجرا هنگامی که عبارات بولین 3 درست است
}
else
{
// اجرا زمانی که هیچ یک از شرایط فوق درست نیست.
}


در غیر این صورت باید از switch استفاده کنید.

من همین کدو می زنم ولی else اخر فقط else if آخر رو بررسی می کنه..؟؟

Faraz Mehraien
چهارشنبه 18 دی 1392, 17:45 عصر
به اینصورت ترتیب رعایت میشه و از اول تا آخر کد خونده میشه به صورت زیر.


if(boolean_expression 1)
{
// اجرا هنگامی که عبارات بولین 1 درست است
}
else if( boolean_expression 2)
{
// اجرا هنگامی که عبارات بولین 2 درست است
}
else if( boolean_expression 3)
{
// اجرا هنگامی که عبارات بولین 3 درست است
}
else
{
// اجرا زمانی که هیچ یک از شرایط فوق درست نیست.
}


در غیر این صورت باید از switch استفاده کنید.

من همین کدو می زنم ولی else اخر فقط else if آخر رو بررسی می کنه..؟؟

کامبیز اسدزاده
چهارشنبه 18 دی 1392, 20:04 عصر
من همین کدو می زنم ولی else اخر فقط else if آخر رو بررسی می کنه..؟؟

ببینید در 3 شرط اول اگر عبارات بولی هر کدام درست بود اجرا خواهند شد ولی اگه هیچ یک از این ها درست نباشه مثلا همش false باشه 100% میره شرط آخر یعنی else رو بررسی میکنه.

کامبیز اسدزاده
چهارشنبه 18 دی 1392, 20:09 عصر
این مثال رو ببینید :


bool me = false;

if (me == true)
{
cout << "True";
}
else if (me == true)
{
cout << "True";
}
else if (me == true)
{
cout << "True";
}
else
{
cout << "False";
}


ابتدا من یه مقدار false دادم به me که در 3 شرط اول برابری اون رو با true بررسی میکنند و چون برابر true نیست مستقیم میره else و کد داخلی else رو اجرا میکنه.

کامبیز اسدزاده
چهارشنبه 18 دی 1392, 20:10 عصر
البته اینم بگم که در عبارت های شرطی if else به صورت ترتیبی دستورات و شرایط بررسی میشه.

Faraz Mehraien
چهارشنبه 18 دی 1392, 21:19 عصر
البته اینم بگم که در عبارت های شرطی if else به صورت ترتیبی دستورات و شرایط بررسی میشه.
من تو این کد:if(strcmp(func,"add")==0 || strcmp(func,"ADD")==0)
else if(strcmp(func,"multiply")==0 || strcmp(func,"MULTIPLY")==0)
else if(strcmp(func,"sort")==0 || strcmp(func,"SORT")==0)
else
cout<<"you have entered wrong answer\n";

اگر کاربر add هم وارد کنه else آخر اجرا می شه چون با sort برابر نیست

کامبیز اسدزاده
چهارشنبه 18 دی 1392, 21:49 عصر
من تو این کد:if(strcmp(func,"add")==0 || strcmp(func,"ADD")==0)
else if(strcmp(func,"multiply")==0 || strcmp(func,"MULTIPLY")==0)
else if(strcmp(func,"sort")==0 || strcmp(func,"SORT")==0)
else
cout<<"you have entered wrong answer\n";

اگر کاربر add هم وارد کنه else آخر اجرا می شه چون با sort برابر نیست

به دلیل اینکه روش شما روش if های تو در تو هستش و باید از {آکولاد ها} ها استفاده کنید.

درستش این هست :


if (strcmp(func, "add") == 0 || strcmp(func, "ADD") == 0)
{
//دستورات اجرایی در این قسمت
}
else if (strcmp(func, "multiply") == 0 || strcmp(func, "MULTIPLY") == 0)
{
//دستورات اجرایی در این قسمت

}
else if (strcmp(func, "sort") == 0 || strcmp(func, "SORT") == 0)
{
//دستورات اجرایی در این قسمت

}

else
{

cout << "you have entered wrong answer\n";

}

Ananas
چهارشنبه 18 دی 1392, 23:31 عصر
به اینصورت ترتیب رعایت میشه و از اول تا آخر کد خونده میشه به صورت زیر.


if(boolean_expression 1)
{
// اجرا هنگامی که عبارات بولین 1 درست است
}
else if( boolean_expression 2)
{
// اجرا هنگامی که عبارات بولین 2 درست است
}
else if( boolean_expression 3)
{
// اجرا هنگامی که عبارات بولین 3 درست است
}
else
{
// اجرا زمانی که هیچ یک از شرایط فوق درست نیست.
}


در غیر این صورت باید از switch استفاده کنید.
این چیزی که نوشتید لزوما درست نیستا! درستش اینه:

if(boolean_expression 1)
{
// اجرا هنگامی که عبارات بولین 1 درست است
}
else if( boolean_expression 2)
{
// اجرا هنگامی که عبارات بولین 2 درست است و عبارت 1 درست نیست
}
else if( boolean_expression 3)
{
// اجرا هنگامی که عبارات بولین 3 درست است و عبارت 1 و 2 درست نیستند
}
else
{
// اجرا زمانی که هیچ یک از شرایط فوق درست نیست.
}

در کل برای دستور if همیشه دو راه هست: یا شرط بر قراره یا نیست. پس if ها و else if های پشت سر هم همیشه به بلاک های دوتایی تقسیم میشن. مثلا برای عبارت بالا داریم:

if (boolean_expression 1)
{
// اجرا هنگامی که عبارات بولین 1 درست است
}
else
{
if (boolean_expression 2)
{
// اجرا هنگامی که عبارات بولین 2 درست است و عبارت 1 درست نیست
}
else
{
if (boolean_expression 3)
{
// اجرا هنگامی که عبارات بولین 3 درست است و عبارت 1 و 2 درست نیستند
}
else
{
// اجرا زمانی که هیچ یک از شرایط فوق درست نیست.
};
};
};

هیچ وقت بیشتر از دو تا حالت نداریم!

کامبیز اسدزاده
چهارشنبه 18 دی 1392, 23:38 عصر
این چیزی که نوشتید لزوما درست نیستا!
در صورتی که بخواد به صورت انتخابی چیزیرو شرطی کنه if هم میشه ولی ترجیها بهترین گزینه switch برای انتخاب کردن شرط مورد نظر هست‌! !‌:) در غیر این صورت از if های تو در تو که خودتونم اشاره کردین میشه استفاده کرد.

Ananas
پنج شنبه 19 دی 1392, 00:16 صبح
در صورتی که بخواد به صورت انتخابی چیزیرو شرطی کنه if هم میشه ولی ترجیها بهترین گزینه switch برای انتخاب کردن شرط مورد نظر هست‌! !‌:) در غیر این صورت از if های تو در تو که خودتونم اشاره کردین میشه استفاده کرد.
درسته. من تاکیدم به این هست که اگر if ها رو همراه }{ ننوشتیم، باز هم به دودویی بودنشون توجه کنیم. منظورم اولویتشونه.

کامبیز اسدزاده
پنج شنبه 19 دی 1392, 00:23 صبح
درسته. من تاکیدم به این هست که اگر if ها رو همراه }{ ننوشتیم، باز هم به دودویی بودنشون توجه کنیم. منظورم اولویتشونه.
دقیقا بله طبق فرمایش شما اولویت مهمه... بدون آکولاد ها اولویت درواقع اولین چیزی هست که کامپایلر بهش توجه داره.

Faraz Mehraien
پنج شنبه 19 دی 1392, 11:31 صبح
یعنی الان کدمو اینجوری کنم. else اخر همه ی شرط ها رو بررسی می کنه؟؟
if(strcmp(func,"add")==0 || strcmp(func,"ADD")==0)
{
// ////////////
}

else
{
if(strcmp(func,"multiply")==0 || strcmp(func,"MULTIPLY")==0)
{
///////////////
}

else
{
if(strcmp(func,"sort")==0 || strcmp(func,"SORT")==0)
{
//////////////
}
else
{
cout<<"you have entered wrong answer\n";
}
}
}

کامبیز اسدزاده
پنج شنبه 19 دی 1392, 12:13 عصر
یعنی الان کدمو اینجوری کنم. else اخر همه ی شرط ها رو بررسی می کنه؟؟

من دارم میگم به صورت ترتیبی بررسی میشه و در صورت true نبودن در نهایت else بررسی میشه شما میگید else همرو بررسی میکنه ؟ یعنی چی‌‌؟‌ else فقط زمانی اجرا میشه که دستورات و شرایط اول true یا برابر با مقادیر نباشند.

در دستور بالا اگر هیچ یک از if های شما برابر با ورودی شما نباشد else بررسی و اجرا میشود.

else \ واگرنا ! از معنیش مشخصه که کی اجرا میشه دیگه.