PDA

View Full Version : حلقه تو در تو در تو در تو ...



BEHESHT*
سه شنبه 24 فروردین 1389, 02:17 صبح
سلام

من می خوام تعداد نا مشخصی حلقه تو در تو ایجاد کنم

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

مثلا اگر مشخص شد 300 حلقه چطور می تونم برنامه ای بنویسم که 300 حلقه تو در تو داشته باشه و از یک تا ده بشماره

ممنون

Mahmood_M
سه شنبه 24 فروردین 1389, 03:58 صبح
برای اینکه N تا حلقه ی تو در تو داشته باشید که هرکدوم تا 10 بشمرن می تونید یک حلقه با مقدار 10 به توان N داشته باشید که البته با بزرگ شدن N عدد حاصل بسیار بزرگ شده و تقریبا غیرممکن به نظر میاد !!!

بهتره توضیح بدید که هدفتون از ایجاد این حلقه ها چیه یا این حلقه ها چه کاری درونشون انجام می گیره ؟ اینطوری نمیشه جواب مناسبی داد !

...

Alishr
سه شنبه 24 فروردین 1389, 09:51 صبح
از بازگشتی ها استفاده کن




void recursive(int N){
if(N==0)return;
for(int i=0;i<X;i++){
//do something
recursive(N-1);
}
}

Felony
سه شنبه 24 فروردین 1389, 10:27 صبح
از بازگشتی ها استفاده کن




void recursive(int N){
if(N==0)return;
for(int i=0;i<X;i++){
//do something
recursive(N-1);
}
}



دوست عزیز ، اینجا بخش دلفی هست نه ++C

BEHESHT*
سه شنبه 24 فروردین 1389, 11:33 صبح
سلام بسیار ممنون از لطفتون:قلب:

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

مثلا بدست آوردن تمام زیر مجموعه های یک فولدر خوب اگه آدم بخواد همه رو لیست کنه تو فلودر ممکنه چندین فولدر دیگه باشه و داخل اون فولدر ها هم شاید دو باره فولدر باشه و ...

مثلا اگر دقت کرده باشید برنامه winamp یه فلودر با یک فایل MP3 بگیرید و Play in winamp رو بزنید اون فولدر 100 تا فولدر تو در تو داشته باشه هر چی فایل صوتی زیر مجموعه باشه لیست می کنه برای پخش می کنه:متفکر:

خب منم سر حلقه تو در تو به بن بست خوردم اساسی:چشمک:

البته عرض کردم مشکل فقط فقط این نیست چندین مشکل دارم:گریه:

Felony
سه شنبه 24 فروردین 1389, 12:15 عصر
اگر مشکلتون این ها هست پس روی الگوریتم ها و توابع بازگشتی مطالعه کنید ، اینها کارهایی نیستند که به کد نویسی ربط خاصی داشته باشند و باید شما بتونید الگوریتمش رو پیاده سازی کنید .

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

procedure FindFiles(FilesList: TStringList; StartDir, FileMask: string);
var
SR: TSearchRec;
DirList: TStringList;
IsFound: Boolean;
i: integer;
begin
if StartDir[length(StartDir)] <> '\' then
StartDir := StartDir + '\';

{ Build a list of the files in directory StartDir
(not the directories!) }

IsFound :=
FindFirst(StartDir+FileMask, faAnyFile-faDirectory, SR) = 0;
while IsFound do begin
FilesList.Add(StartDir + SR.Name);
IsFound := FindNext(SR) = 0;
end;
FindClose(SR);

// Build a list of subdirectories
DirList := TStringList.Create;
IsFound := FindFirst(StartDir+'*.*', faAnyFile, SR) = 0;
while IsFound do begin
if ((SR.Attr and faDirectory) <> 0) and
(SR.Name[1] <> '.') then
DirList.Add(StartDir + SR.Name);
IsFound := FindNext(SR) = 0;
end;
FindClose(SR);

// Scan the list of subdirectories
for i := 0 to DirList.Count - 1 do
FindFiles(FilesList, DirList[i], FileMask);

DirList.Free;
end;

BEHESHT*
سه شنبه 24 فروردین 1389, 14:10 عصر
ممنون اما گفتم چندین مشکل با حلقه تو در تو دارم این فقط یکیش بود

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

vcldeveloper
سه شنبه 24 فروردین 1389, 18:25 عصر
با استفاده از توابع بازگشتی ( کتابخانه ImageHlp رو اضافه کنید ) توابع بازگشتی چه ربطی به ImageHlp دارند؟


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

پس یعنی تنها راهش اینه که الگورتیم نویسی یاد بگیرم؟ چیزی که شما نوشتید و در آن به این نتیجه رسیدید که باید تعداد نامشخصی حلقه تو در تو داشته باشید، یعنی روشی که برای حل مشکلتان انتخاب کردید، روش غلطی هست، و باید در آن بازنگری جدی کنید.

Felony
سه شنبه 24 فروردین 1389, 18:37 عصر
توابع بازگشتی چه ربطی به ImageHlp دارند؟
اول یه کد دیگه گزاشته بودم این برای اون کد بود بعد از تعویض کد یادم رفت این قسمت رو ویرایش کنم ...

BEHESHT*
سه شنبه 24 فروردین 1389, 19:05 عصر
چیزی که شما نوشتید و در آن به این نتیجه رسیدید که باید تعداد نامشخصی حلقه تو در تو داشته باشید، یعنی روشی که برای حل مشکلتان انتخاب کردید، روش غلطی هست، و باید در آن بازنگری جدی کنید.

نه قبول ندارم اگه شما یه آرایه n بعدی داشته باشین و یه وروردی که به خواین تو خونه های این آرایه به ترتیب بنویسین و n عددی نا مشخص باشه شما مجبور نیستید چندین حلقه تو در تو بنویسین وب تعداد نا مشخص؟ :متفکر:

یه روش هایی دارم پیدا می کنم:چشمک:

vcldeveloper
سه شنبه 24 فروردین 1389, 19:35 عصر
اگه شما یه آرایه n بعدی داشته باشین و یه وروردی که به خواین تو خونه های این آرایه به ترتیب بنویسین و n عددی نا مشخص باشه شما مجبور نیستید چندین حلقه تو در تو بنویسین وب تعداد نا مشخص؟
نه مجبور نیستم. یک لیست یا یک آرایه دینامیک تعریف می کنم که هر عضوش خودش یک لیست یا یک آرایه باشه. برای خواندنش هم یک تابع بازگشتی می نویسم.

SAASTN
سه شنبه 24 فروردین 1389, 21:49 عصر
اگه شما یه آرایه n بعدی داشته باشین
وقتی از n بعد صحبت می کنی شکی نیست که باید بری سراغ توابع بازگشتی.

چندین حلقه تو در تو بنویسین وب تعداد نا مشخص
خودت یه بار دیگه به این جمله فکر کن، میشه تو یه برنامه تعداد نامشخصی حلقه نوشت؟!
میشه یه حلقه نوشت که تعداد نا مشخصی اجرا بشه ولی وقتی صحبت حلقه تو در تو میشه دیگه نمیشه کاری کرد و شما فقط باید حلقتو بذاری توی یه روال جدا گونه و به تعداد نامشخصی اون روال رو فرا خونی کنی، اینم تعریف همون توابع بازگشتیه.


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

BEHESHT*
چهارشنبه 25 فروردین 1389, 01:02 صبح
خب من هم مشکل ام همین جا بود که نمی دونستم چطور باید این کار انجام بدم

و ظاهر هیچ کس بهم کمکی نکرد که چطور می تونم ، همچین مشکلی رو حل کنم

اما خودم نشستم یه تابع نوشتم که باهاش هر چند تا حله تو در تو می خوام رو بشماره

شاید یکی یه روزی به دردش خورد

دوستان می تونند برای صحت قضیه تستش کنن کاملا جواب میده


function halghe ( Len : Byte ): Integer ;
var
k,I: Integer;

begin
k:=0;
if Len=0 then
begin
for I := 0 to 10 do
begin
inc(k);
end;
Result := k ;
end
else
begin
Dec(len) ;
for I := 0 to 10 do
begin
inc(k);
k:= k + halghe(Len);
end;
Result := k;
end;
end;