اذهب الي المحتوي
أوفيسنا

كيف يتم توليد رقم عشوائي غير مكرر في مربع نص


الردود الموصى بها

السلام عليكم ورحمة الله وبركاته

لدي نموذج عليه مربع نص اسمه ( Txt1 ) وزر أمر كتبت في حدث عند النقر لزر الأمر الكود التالي :

Me.Txt1 = Int((10 * Rnd) + 1)

المشكلة أن الأرقام تتكرر .

الســــــــــــــــــــــؤال :

ما هو الكود الذي يمنع تكرار الرقم حتى تنتهي الأرقام الواقعة بين ( 1 ) و ( 10 ) ثم تظهر رسالة بأنه سيتم تكرار الأرقام من جديد ؟

يا شباب تعبت وأنا أبحث في التعليمات وأحاول دون أي فائدة تذكر .

بالنسبة لمثال الأخ / ابو حمود والأخ / مهند في على السجلات ومثالي بدون سجلات ولم أتمكن من استخلاص فكرت عدم التكرار المثالين.

رابط هذا التعليق
شارك

أخي مصلح قرأت لك هذه الملومة حول الدالة Rnd أرجو أن تفيدك .

وتستخدم هذا الدالة في توليد أرقام عشوائية تقع ما بين الصفر و واحد بحد أقصي 15 رقما عشريا انظر المثال 1

-------------------------------------

التصريح Randomize : يعمل هذا التصريح مع الدالة Rnd ونستفيد منه عدم التكرارية و الحصول علي عشوائية افضل وذلك لأنه يعتمد علي ساعة النظام لديك .انظر المثال 2

في المثال 2 نعمل علي توليد أرقام عشوائية من واحد إلى عشرة .

أما إذا أردت أن تجعل هذه العشوائية نصوص وليس أرقاما فلك طريقتين لتحايل علي هذا أما أن تضع النصوص في قاعدة بيانات وفي شكل سجلات وتعطي لكل سجل رقم أو تضعه في مصفوفة وتعطي لكل نص رقم أيضا وأنا افضل الطريقة الأولى لسرعتها .. إنتهى كلامه .

المثال 1

myNumber = Rnd(عدد)
'فمثلا الدالة Rnd(10) قد تعطي رقما مثل 0.7055475 وعند تشغيل الدالة مرة أخري ينتج رقما آخر مثل 0.533424 وهكذا .
المثال 2
Randomize
MsgBox Int((10 * Rnd) + 1)
المثال 3
'مثال لتوليد الالون بطريقة عشوائية
Randomize
Label1.BackColor = QBColor(Int((16 * Rnd) + 0))
المثال 4
For i = 1 To 4
Print Rnd()
Next i

تحياتي ..

تم تعديل بواسطه فهد الدوسري
رابط هذا التعليق
شارك

أخي فهد

شكراً لك تسرني مشاركتك .

هل جربت الأمثلة لقد جربتها ولكن التكرار لا زال موجود ضع مربع نص وزر أمر وضع الأمثلة على زر الأمر الواحد تلو الأخر ثم جرب كل أمر منها ستجد التكرار موجود.

رابط هذا التعليق
شارك

هذه فكرة تعتمد على تكوين حقيبة أرقام فى متغير global

ثم نختار منها رقم عشوائى وبعد اختياره نحذفه من الحقيبة

وعند فراغ الحقيبة نعيد ملأها

أرجو الجرية والأفادة

مع خالص الحب والتقدير

Const BagMax = 10
Type RandomBag
n As Integer
X(BagMax) As Integer
End Type
Global RandBag As RandomBag
Function RandX() As Integer
Dim Index As Integer
If RandBag.n < 1 Then
 'Insialize ......
  For i = 0 To BagMax - 1
   RandBag.X(i) = i + 1
  Next i
  RandBag.n = BagMax
End If
  Index = Int(Rnd * RandBag.n)
   RandX = RandBag.X(Index)
  'Remove Void ..........
   For i = Index To RandBag.n - 1
    RandBag.X(i) = RandBag.X(i + 1)
   Next
 'Decrease Bag Count
  RandBag.n = RandBag.n - 1
End Function
Sub test()
Debug.Print RandX()
End Sub

رابط هذا التعليق
شارك

هذا التعديل يمنع التكرار الذى قديحدث فى بعض الحالات

Const BagMax = 10
Type RandomBag
n As Integer
X(BagMax) As Integer
End Type
Global RandBag As RandomBag


Function RandX() As Integer
Dim Index As Integer
If RandBag.n < 1 Then
 'Insialize ......
 MsgBox ("Bag Empty .." & BagMax & " No.s Will be added to Bag.")
  For i = 0 To BagMax - 1
   RandBag.X(i) = i + 1
  Next i
  RandBag.n = BagMax
End If
  Index = Round(Rnd * (RandBag.n - 1))
   RandX = RandBag.X(Index)
  'Remove Void ..........
   For i = Index To RandBag.n - 1
    RandBag.X(i) = RandBag.X(i + 1)
   Next
 'Decrease Bag Count
  RandBag.n = RandBag.n - 1
End Function
Private Sub AddRndX_Click()
Text01 = RandX()
End Sub

رابط هذا التعليق
شارك

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان
  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information