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

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

قام بنشر

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

لدي نموذج عليه مربع نص اسمه ( 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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

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

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

Important Information