PDA

View Full Version : یک راه حل اصولی و درست و قشنگ برای این مسئله میخوام



amirjalili
یک شنبه 25 مهر 1389, 09:55 صبح
سلام.
مسئله من اینه :
فرض کنید 3 تا حق انتخاب داریم داریم که در ترکیب با هم 8 حالت رو به وجود میارن.
نمونه این مسئله رو در مسئله"جستجوی پیشرفته" میشه دید.
حالت های انتخابی شامل موارد زیر میشن.

* 1 و 2 و 3 هر سه انتخاب شده باشن.
* 1 با 2 انتخاب شده باشه.
* 1 با 3 انتخاب شده باشه
* 2 با 3 انتخاب شده باشه
* فقط 1 انتخاب شده باشه
* فقط 2 انتخاب شده باشه
* فقط 3 انتخاب شده باشه
* هیچکدام انتخاب نشده باشه

فرض کنید در همون مسئله جستجوی پیشرفته با توجه به هر یک از این انتخاب ها باید بریم و از دیتابیس داده های خاصی رو بیاریم و نشون بدیم.
من نمیخوام از 8 تا if استفاده کنم چون به نظرم کد بدبویی میشه. راه حل قشنگش چیه؟
ممنون

ASKaffash
یک شنبه 25 مهر 1389, 11:40 صبح
سلام
به زبان C# :


public void x()
{
bool a = true, b = false, c = false;
if (a)
{
if (b)
{
if (c)
{
//1,2,3
}
else
{
//1,2
}
}
else
{
if (c)
{
//1,3
}
else
{
//1
}
}
}
else
{
if (b)
{
if (c)
{
//2,3
}
else
{
//2
}
}
else
{
if (c)
{
//3
}
else
{
//Other
}
}
}
}

amirjalili
یک شنبه 25 مهر 1389, 12:49 عصر
سلام
به زبان C#‎ :
کد:

public void x()
{
bool a = true, b = false, c = false;
if (a)
{
if (b)
{
if (c)
{
//1,2,3
}
else
{
//1,2
}
}
else
{
if (c)
{
//1,3
}
else
{
//1
}
}
}
else
{
if (b)
{
if (c)
{
//2,3
}
else
{
//2



با تشکر از شما.
اما من تاکید کردم که نمیخوام از اینهمه if و else استفاده کنم.



من نمیخوام از 8 تا if استفاده کنم چون به نظرم کد بدبویی میشه. راه حل قشنگش چیه؟

راه حل قشنگ مد نظرم بود. این کد رو که هر کسی که یه کلاس سی شارپ رفته باشه میتونه بنویسه. این همه شرط های پیاپی به نظرم جالب نیست.

tooraj_azizi_1035
دوشنبه 26 مهر 1389, 15:02 عصر
سلام،
فرض کن که هر انتخاب بیانگر یه بیت هست: 111 و بعد معادل Decimal اون رو پیدا کن و مستقیماً رکورد مورد نظر رو پیدا کن مثلاً id=7(111). :خجالت:

amirjalili
سه شنبه 27 مهر 1389, 10:33 صبح
اگه میشه کمی بیشتر توضیح بدید.
با تشکر

Gold_cpp
چهارشنبه 28 مهر 1389, 10:36 صبح
سلام
ببین کد زیر می تونه بهت کمک کنه :چشمک:
کلا سه تا if و else داره !




//in the name of allah
#include<iostream.h>
#include<conio.h>
#include<string.h>
//using namespace std;
int temp[3];
char str[3];
int print(int);
void set(int ,int);
main ()
{

strcpy(str , "123");
set(3 , 0);
getch();
return 0;
}

void set(int n , int i)
{
if(i==n)
print(n);
else
{
temp [i] = 1;
set(n,i+1);
temp [i] = 0;
set(n,i+1);
}
}
int print(int n)
{
int i;
for (i = 0;i < n;i++)
if (temp[i])
cout << str[i];
cout << endl;
return 0;
}

xxxxx_xxxxx
چهارشنبه 28 مهر 1389, 12:57 عصر
سلام،
حداقل به 3 تا if نیاز دارید.
شما فرض رو بر این بزارید که هر سه حالت انتخاب شده اند. (یعنی کوئری جستجو رو کامل بنویسید) بعد با سه تا if، هر سه حالت رو بررسی کنید، هر کدام که انتخاب نشده بود، فقط قسمتی از کوئری که مربوط به اون حال هست رو از توی کوئری حذف کنید. اینطوری با سه if همه هشت حالت رو پوشش میدید.