PDA

View Full Version : حرفه ای: تولید کد پویا ، حلقه پویا



alonmahdi
پنج شنبه 03 بهمن 1392, 21:15 عصر
سلام دوستان عزیز
من قصد دارم یک برنامه حسابداری بنویسیم ولی در اون به یک مشکلی بر خورد کردم و اونم نحوه نوشتن کد خودکار برنامه است !!!
با ذکر یک مثال توضیح می دم !
مثلا من می خوام افراد موجود رو در دسته بندی های مختلفی قرار بدم و حالات ممکنه رو بدست بیارم !
یعنی این :
اگه چهار نفر داشته باشم من می تونم با فرض این که این چهار نفر باهم باشند به 15 صورت دسته بندی کنم!
یعنی این ترکیب اون آنها رو بدست بیارم:

با فرض نام های ، مهدی ، محسن ، حسین ، نیما

اولین ترکیب 4 به 1:
1- مهدی 2- حسین 3- محسن 4- نیما

ترکیب 4 به 2 :
1- مهدی ، نیما
2- مهدی، محسن
3- مهدی ،حسین
4- نیما ، حسین
5- نیما ، محسن
6- حسین ، محسن

ترکیب 4 به 3 :
1- مهدی ، حسین ، نیما
2- مهدی ، محسن ، نیما
3- نیما ، حسین ، محسن
4- مهدی ، حسین ، محسن

و آخرین ترکیب :
که میشه یک ترکیب 4 نفری یعنی 4 به 4:
مهدی ، حسین ، نیما ، محسن

خب حالا سوال من اینه که چگونه کدی پویا بنویسیم که در صورتی که دسته بندی من از 4 نفر به 5 نفر تغییر کرد خب به طبع اون ترکیب های منم تغییر می کنه برای تولید ترکیب ها چگونه کدی رو بنویسیم که پویا باشه و خودش بتونه خودش رو تولید کنه !
مثلا اگه من برای ترکیب 4 به 2 بخوام کدی بنویسم این چنین کدی می نوسیم و داخل یک آرایه رشته ای ذخیره می کنم :
با فرض این که با کد های این اشخاص کار بکنیم نه با اسم اون ها :

string []a=new string[6];// چون ترکیب 4 به 2 جوابش میشه 6
for(int i=1;i<4;i++)
for(int j=i+1;j<=4;j++)
string[i-1]=i.+","+j;



که خروجی این کد چیزی شبیه به این میشه :
1,2
1,3
1,4
2,3
2,4
3,4

یعنی من می خوام این حلقه رو یک جوری پویا باشه یا این که با توجه به ترکیب تولید بشه و اجرا بشه !!! چون که با توجه به تعداد دسته ها تعداد حلقه ها هم فرق می کنه مسلما!!!
امیدوارم تونسته باشم منظورم رو رسونده باشم بازم سوالی بود بپرسید. :لبخندساده:

mehran6764
پنج شنبه 03 بهمن 1392, 21:29 عصر
الان اين عدد 4 نوشتين كه از وروديي جايي دريافت ميشه
مي تونين به جاي كه عدد 4 بنوييسين از يك متغير استفاده كنين
بهتره اين لينك هم كه در مورد ارايه پوياست مطالعه كنيد
http://barnamenevis.org/showthread.php?141445-%D8%AA%D8%B9%D8%B1%DB%8C%D9%81-%D8%A2%D8%B1%D8%A7%DB%8C%D9%87-%D8%A8%D8%A7-%D8%B7%D9%88%D9%84-%D9%85%D8%AA%D8%BA%DB%8C%D8%B1-%D8%AF%D8%B1-net.-C

alonmahdi
پنج شنبه 03 بهمن 1392, 21:41 عصر
الان اين عدد 4 نوشتين كه از وروديي جايي دريافت ميشه
مي تونين به جاي كه عدد 4 بنوييسين از يك متغير استفاده كنين
بهتره اين لينك هم كه در مورد ارايه پوياست مطالعه كنيد
http://barnamenevis.org/showthread.php?141445-%D8%AA%D8%B9%D8%B1%DB%8C%D9%81-%D8%A2%D8%B1%D8%A7%DB%8C%D9%87-%D8%A8%D8%A7-%D8%B7%D9%88%D9%84-%D9%85%D8%AA%D8%BA%DB%8C%D8%B1-%D8%AF%D8%B1-net.-C


ممنون از جواب شما ولی دوست من منظورم من نحوه تولید کد پویا هست نه آرایه پویا بهتره با ارائه جزیات بیشتر واضح تر توضیح بدم :
ببینید در صورتی که بخوام ترکیب 4 به 2 رو استفاده کنم باید از دو تا حلقه تو در تو استفاده کنم حالا در حالی که اگه بخوام ترکیب 4 به 3 رو استفاده کنم باید 3 تا حلقه تو در تو استفاده کنم و الی آخر !
منظورم اینه که تعداد حلقه های تو در تو و نوشتنش رو خود برنامه تشخصی بده و بنویسه آیا چنین امکانی هست؟

fmehrvarzi
پنج شنبه 03 بهمن 1392, 22:15 عصر
کدپراجکت: یک کلاس ساخته:
http://www.codeproject.com/Articles/14417/Combination-Generator

یک راه حل linq و خیلی جالب:
http://stackoverflow.com/questions/710670/c-sharp-permutation-of-an-array-of-arraylists

یک راه حل جنریک:
http://stackoverflow.com/questions/15485012/list-produces-specific-set-of-combinations

alonmahdi
جمعه 04 بهمن 1392, 17:07 عصر
کدپراجکت: یک کلاس ساخته:
http://www.codeproject.com/Articles/14417/Combination-Generator

یک راه حل linq و خیلی جالب:
http://stackoverflow.com/questions/710670/c-sharp-permutation-of-an-array-of-arraylists

یک راه حل جنریک:
http://stackoverflow.com/questions/15485012/list-produces-specific-set-of-combinations

ممنون دوست عزیز با بت این لینک ها ولی من چیزی سر در نیاوردم یعنی از کلاسی که بود نتونستم استفاده کنم اگه میشه یک راهنمای بکنی ؟ چگونه از این کلاس باید استفاده کرد؟

fmehrvarzi
جمعه 04 بهمن 1392, 17:41 عصر
----------------------------------------:لبخند:
ابتدا لایبراری ضمیمه شده زیر را از طریق مسیر زیر به پروژه تان اضافه کنید:
Solution Explorer>References>Add Reference>Browse>Combinations.dll
سپس فضای نام زیر را به پروژه اضافه کنید:
using CH.Combinations;
سپس این کدها را مثلاً در رویداد باتن کلیک قرار دهید
تعداد حالات ممکن انتخاب سه عدد از بین این چهار عدد:

int[] input = new int[] { 1, 2, 3, 4 };
Combinations<int> combinations = new Combinations<int>(input, 3);
foreach (int[] combination in combinations)
{
StringBuilder strItem =new StringBuilder("");
// Do something with "combination".
foreach (int item in combination)
{
strItem.Append(" "+item+" ");
}
MessageBox.Show(strItem.ToString());
}