PDA

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



mahdi1373
جمعه 04 تیر 1389, 23:28 عصر
سلام،
مشکل من در مورد خلاصه کردن حلقه های تو در توست. مثلا فرض کنید می خواهیم همه اعداد 20 رقمی که با ارقام 1 تا 3 ساخته می شوند، بدست آوریم. یک راه اینه که 20 تا for تو در تو بگذاریم که از 1 تا 3 کار کنن، که خیلی طول می کشه! من دنبال یک راه ساده تر و کوتاه تر برای اینکار می گردم. اگه کمکم کنید ممنون می شم.

salehbagheri
جمعه 04 تیر 1389, 23:51 عصر
طبق قوانين احتمالات و جايگشت و ... تعدد اعداد 20 رقمي غير تكراري كه از 1 و 2 و 3 ساخته شده باشه خيلي زياده!

چه جوري در 20 حلقه تونستيد همش رو به دست بياريد؟

mahdi1373
شنبه 05 تیر 1389, 11:27 صبح
اینجوری:


Dim adad As String
For a = 1 To 3
For b = 1 To 3
For c = 1 To 3
For d = 1 To 3
For ee = 1 To 3
For f = 1 To 3
For g = 1 To 3
For h = 1 To 3
For i = 1 To 3
For j = 1 To 3
For k = 1 To 3
For l = 1 To 3
For m = 1 To 3
For n = 1 To 3
For o = 1 To 3
For p = 1 To 3
For q = 1 To 3
For r = 1 To 3
For s = 1 To 3
For t = 1 To 3
adad = a.ToString & b.ToString & c.ToString & d.ToString & ee.ToString & f.ToString & g.ToString & h.ToString & i.ToString & j.ToString & k.ToString & l.ToString & m.ToString & n.ToString & o.ToString & p.ToString & q.ToString & r.ToString & s.ToString & t.ToString
Next
Next
Next
Next
Next
Next
Next
Next
Next
Next
Next
Next
Next
Next
Next
Next
Next
Next
Next
Next


حالا یکی جواب منو بده!

nima898
یک شنبه 06 تیر 1389, 09:38 صبح
next های آخرش رو میتونی به این صورت بنویسی:


next t,s,r,q,p,o,n,m,l,k,j,i,h,g,f,ee,d,c,b,a

tabatabaeefar
یک شنبه 06 تیر 1389, 11:26 صبح
سلام
تعداد این ارقام 2 به توان 20 است.
که این برابر تعداد دفعاتی است که دستورات داخل حلقه بیستم تکرار میشود.
بنابراین فکر میکنم روش سریع تری وجود نداره.
موفق باشید

nima898
یک شنبه 06 تیر 1389, 12:46 عصر
من دنبال یک راه ساده تر و کوتاه تر برای اینکار می گردم
اگه منظورتون از ساده تر زمان پروسس کمتر باشه که باید بگم حدودا 3.5 میلیارد عدد با این شرایط وجود داره و کامپیوتر باید تک تکشون بدست بیاره و راهی سریع تر از اینی که نوشتید به نظر نمیرسه

mahdi1373
یک شنبه 06 تیر 1389, 19:19 عصر
ممنونم. نه، من از نظر زمان نمیگم. من نسبت به حجم و دسترسی به متغییر ها میگم. منظورم از دسترسی اینه که اگه میشد بجای ...،a،b،c،d،e یک آرایه میگذاشتم خیلی دسترسی به اونا آسون تر میشد، ولی error میده. کسی نمیدونه که چطور میشه بجای اونا آرایه گذاشت؟
چون من یه برنامه می نویسم که توش حدود 250 تا for باید وجود داشته باشه، برام حجم و آرایه بودن اونا خیلی مهمه.

nima898
سه شنبه 08 تیر 1389, 09:36 صبح
یه برنامه کم حجم نوشتم ولی از نظر زمان بیشتر میشه :


Const tool = 10
Dim a(tool), i, j, k AsInteger, s AsString
For i = 1 To tool
a(i) = 1
Next
Do
s = ""
For k = 1 To tool
s = a(k).ToString ' ***********output************
Next
a(tool) += 1
j = tool
DoWhile a(j) = 4
If j = 1 ThenExitDo
a(j) = 1
j -= 1
a(j) += 1
Loop
If a(j) <> 4 ThenExitDo
Loop