# Native Code > برنامه نویسی در Delphi > مباحث عمومی دلفی و پاسکال >  یافتن تمام  حالات بدون تکرار

## devil00x

من تعدادی کاراکتر رو از کاربر می گیریم حالا می خوام تمام حالات  این چند کاراکتر رو برگردونم البته بدون تکرار.
مثلا اگه A,B,C رو وارد کرد حالات ممکن بدون تکرار به این صورت هستش
A
AB
AC
B
BC
ABC
حالت های تکرار اینه که مثلا AC=CA  و اگه یک کدوم از اینها بود دیگه بعدی رو نیاره.

----------


## mortezakiaee

7 تا حالته نه 6 تا
c هم یه حالت دیگه است.
بیشتر مربوط به پاسکال می شه تا دلفی

----------


## vcldeveloper

> یافتن تمام  حالات بدون تکرار


سوال بیشتر به بخش الگوریتم ها مربوط میشه تا به یک زبان برنامه نویسی خاص. اگر الگوریتمش را داشتید و می خواستید با دلفی پیاده سازی کنید، اونوقت به دلفی مربوط میشد.




> بیشتر مربوط به پاسکال می شه تا دلفی


یعنی همچین  برنامه ایی توی دلفی جایگاه نداره؟! بگذریم...

کاربران می تونند توی بخش دلفی سوالات پاسکال هم مطرح کنند.

----------


## Cave_Man

این سوالا خیلی جالبه و علمی هستن دقیقا من تاکید میکنم اونجا بزاریدش و منتقلش کنید لطفا.
مرتبط : https://barnamenevis.org/showth...ht=permutation

----------


## devil00x

دوست عزیز حالا 6 یا 7 چه فرقی میکنه بله حق با شماست C هم جز آونهاست/
لطفا راهنمایی کنید که چطور میشه این الگوریتم رو طراحی کرد از اینکه اینجامطرح شد چون من دارم تو دلفی کد رو می نویسم و گیر افتادم.

----------


## Cave_Man

الگوریتم با کد اون الگوریتم فرق میکنه :چشمک: 
اگه الگوریتم رو بدست اوردید بعدش باید شروع به کدنویسی کنید.لطفا الگوریتیمی که توی پیاده سازیش مشکل دارید اینجا بزارید.
با انگلیسی یا سودوکد الگوریتم رو بنویسید و بزارید اینجا.  فارسی هم قبوله.

----------


## mortezakiaee

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

n: number of characters
s = n!/1!*(n-1)! + n!/(2!*(n-2)!)+ ...+n!/(n!*1!)
 
 به ترتیب کارکتر های با طول 1 تا n 

حالا دو آرایه به طول n و s تعریف کن با یه حلقه  میتونی جواب رو تو آرایه دوم ذخیره کنی
الان کدش به ذهنم نمی رسه ولی اصولش اینه
کاراکتر  1 تا n رو ذخیره کن --------> رشته با طول یک
کاراکتر1 رو با کاراکتر های 2 تا n رو کنار هم بذار، کاراکتر 2 رو با کاراکتر های 3 تا n رو کنار هم بذار، ......، کاراکتر n-1 رو با کاراکتر n رو کنار هم بذار ---------> رشته با طول دو
.
.
.
.
n کاراکتر رو کنار هم بذار ----------> رشته با طول n

----------


## gbg

میدونم خیلی قدیمی هست تاپیک
ولی یکی لطف کنه فرمول رو برای n-1 هم بگه که نکته کلیدی اینجا خوابیده

----------


## Ananas

فرمولش رو دستی برای هر عددی جدا بنویسیم بهتره چون مثلا اگه n  باشه 10 اونوقت 10 فاکتوریل میشه : 3628800 یعنی 3628800 حالت از ترکیب های مختلف. پس نهایتا 10 تا فرمول نیاز باشه بنویسیم.
اصلا شما حساب کن با 32 تا بیت که هر کدوم 2 تا حالت می گیرن چند تا عدد میشه ساخت!

----------


## gbg

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

----------


## Ananas

یه راهی به نظرم میاد که یکم پیچیدس حوصله ندارم بنویسم. از این قراره:
یک تابع داشته باشی که یک آرایه میگیره و تو یک حلقه عضو اول اون رو به ترتیب عوض میکنه و تو هر چرخه هم بعد از عوض کردن عدد اول آرایه، خودش رو فراخونی کنه ولی از شروع آرایه + 1 (هر دفعه مجموعه 1 واحد کوچکتر میشه تا آخر برسه به یک عضو) البته نتیجه هم باید در جایی نوشته بشه و وقتی حالت های مختلف درست میشن که این تابع رسیده باشه به آخر آرایه. یعنی خودش رو اونقدر فراخونی کنه که برسه به انتهای آرایه. راستی یک آرایه ی دیگه هم باید همزمان به عنوان ورودی براش بفرستی که در هر مرحله عدد های تکراری رو حذف کرده باشی (عدد هایی که تو ابتدای لیست ازشون استفاده کردی). نمی دونم جواب میده یا نه فقط یک ایده هست.

----------


## Ananas

فرمول جایگشت های n شی :
http://irancplusplus.blogspot.com/2010/07/n.html
به C++‎‎ هست.

----------


## mehdi_moosavi

وقت دوستان بخیر
من احتیاج به کدی دارم که تمام جای گشتهای rتایی از یک مجموعه nتایی رو برگردونه. سرچ هم کردم ولی کدی در دلفی پیدا نشد.
لطفا راهنمایی کنید
خیلی متشکرم

----------


## یوسف زالی

سلام.
در اینجا تابعی نوشتم که اساس اون همین کاریه که شما لازم دارید:
https://barnamenevis.org/showthread.p...ght=bruteforce

باید طبق خروجی خودتون بهش ورودی بدید.

----------

