مساء الخير
اخواني اذا سمحتو اي حد خبير يساعدني بتعديل هالمشروع
المشروع عبارة عن برنامج مسابقة مع قاعدة بيانات
تم اضافة 15 سؤال في قاعدة البيانات مع رقم تسلسلي 1 2 3 4 5 .....
ومهمة البرنامج عرض هذه الاسئلة للمتسابق ولكن بطريقة عشوائية
في اللود للمسابقة يتم جلب جميع الارقام المتسلسلة للاسئلة وحفظها في جدول الارراي
ويتم توليد رقم عشوائي من 1 إلى اكبر رقم تسلسلي
ويتم جلب معلومات السؤال من جددول الاسئلة بناءا على الرقم العشوائي الذي تم توليده ويتم عرضه للمستخدم وبعدها يحذف الرقم المتسلسل الخاص بالسؤال من جدول الارراي لكي لا يتكرر السؤال
وايضا الاجابات يتم ترتيبها على الازرار بطريقة عشوائية
وهكذا يتم عرض الاسئلة بطريقة عشوائية وليست مرتبة
ولكن هناك مشكلة .. وهي انه في آخر 5 اسئلة من ال 15 سؤال قد يتكرر بعضهم ولكن لا اعرف السبب
اذا ممكن حد يساعدني مشان نلغي التكرار نهائيا ..
رابط المشروع :
http://www.mediafire.com/download/ed9n65...ation1.rar
حسب وصف البرنامج ... حتما الاسئلة مكررة من مصدر البيانات.
المشروع كبير ويحتاج تدقيق .. ان شالله احد الاخوة يقدم المساعدة.
أنت تحتاج الي مصفوفتان الأولي سيتم تخزين جميع الاسئلة بها و في المصفوفة الثانية سيتم تخزين الاسئلة العشوائية
عليك فقط ان تختار السؤال من المصفوفة العشوائية ثم تحذفه منها بعد أن تختاره
و من الاسهل لك أن تحذف اخر سؤال في القائمة العشواية او تحذف اول سؤال
لنحاول تنفيذ الفكرة في مشروع منفصل ختي يتضح الامر لك
افتح شروع عادي به فورم واحد و اضف للفورم عدد إثنان LiistBox الي الفورم ثم اكتب الكود بالشكل التالي
PHP كود :
Public Class Form1
Private originalList As List(Of Integer) = New List(Of Integer)
Dim randomizedList As List(Of Integer) = CType(Nothing, List(Of Integer))
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' Fill original list with Values
For i As Integer = 1 To 15
' be sure the values is not repeated in list
If Not originalList.Contains(i) Then
' add originalList to list
originalList.Add(i)
End If
Next
' for testing purpose only
For Each item In originalList
Me.ListBox1.Items.Add(item)
Next
randomizedList = RandomizeIntegers(originalList)
' get the question which shall equals to thop value in randoized list
Dim selectedQuestion As Integer = GetTopQuestionValue()
' remove the top value from randomized list
randomizedList.Remove(randomizedList.Count - 1)
' for testing purpose only
For Each item In randomizedList
Me.ListBox2.Items.Add(item)
Next
' for testing purpose only
Me.Text = (ListBox1.Items.Count - 1) - (ListBox2.Items.Count - 1)
End Sub
Private Function GetTopQuestionValue() As Integer
Return randomizedList(randomizedList.Count - 1)
End Function
Private Function RandomizeIntegers(items As List(Of Integer)) As List(Of Integer)
Dim result = items
Dim r = New Random()
For i As Integer = items.ToArray.Length To 2 Step -1
Dim j As Integer = r.Next(i)
Dim t = result(j)
result(j) = result(i - 1)
result(i - 1) = t
Next
Return result
End Function
End Class
عليك ان تقوم بتطبيق نفس الفكرة في مشروعك
ملحوظة:
الدالة الخاصة بتوليد ارقام عشوائية يمكن استخدامها مع اي شئ غير الارقام فقط عليك بتغيير نوع المدخلات الخاصة بها
(13-12-15, 07:07 AM)silverlight كتب : [ -> ]أنت تحتاج الي مصفوفتان الأولي سيتم تخزين جميع الاسئلة بها و في المصفوفة الثانية سيتم تخزين الاسئلة العشوائية
عليك فقط ان تختار السؤال من المصفوفة العشوائية ثم تحذفه منها بعد أن تختاره
و من الاسهل لك أن تحذف اخر سؤال في القائمة العشواية او تحذف اول سؤال
لنحاول تنفيذ الفكرة في مشروع منفصل ختي يتضح الامر لك
افتح شروع عادي به فورم واحد و اضف للفورم عدد إثنان LiistBox الي الفورم ثم اكتب الكود بالشكل التالي
PHP كود :
Public Class Form1
Private originalList As List(Of Integer) = New List(Of Integer)
Dim randomizedList As List(Of Integer) = CType(Nothing, List(Of Integer))
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' Fill original list with Values
For i As Integer = 1 To 15
' be sure the values is not repeated in list
If Not originalList.Contains(i) Then
' add originalList to list
originalList.Add(i)
End If
Next
' for testing purpose only
For Each item In originalList
Me.ListBox1.Items.Add(item)
Next
randomizedList = RandomizeIntegers(originalList)
' get the question which shall equals to thop value in randoized list
Dim selectedQuestion As Integer = GetTopQuestionValue()
' remove the top value from randomized list
randomizedList.Remove(randomizedList.Count - 1)
' for testing purpose only
For Each item In randomizedList
Me.ListBox2.Items.Add(item)
Next
' for testing purpose only
Me.Text = (ListBox1.Items.Count - 1) - (ListBox2.Items.Count - 1)
End Sub
Private Function GetTopQuestionValue() As Integer
Return randomizedList(randomizedList.Count - 1)
End Function
Private Function RandomizeIntegers(items As List(Of Integer)) As List(Of Integer)
Dim result = items
Dim r = New Random()
For i As Integer = items.ToArray.Length To 2 Step -1
Dim j As Integer = r.Next(i)
Dim t = result(j)
result(j) = result(i - 1)
result(i - 1) = t
Next
Return result
End Function
End Class
عليك ان تقوم بتطبيق نفس الفكرة في مشروعك
ملحوظة:
الدالة الخاصة بتوليد ارقام عشوائية يمكن استخدامها مع اي شئ غير الارقام فقط عليك بتغيير نوع المدخلات الخاصة بها
شكرا إلك اخي الغالي .. بس اذا ممكن اخي بتقدر تطبقلي اياها على المشروع يلي انا رافعو ؟؟
لانه يمكن انت خبرتك اكثر مني ومشان افهم الفكرة منيح لما تكون مطبقة عالمشروع
وشكراا إلك اخي الغالي
قم بكتابة هذا الكود وقم بأضافة ListBox
Dim randomnum As New Random
For i As Int16 = 0 To (c - 1)
start:
x = randomnum.Next(0, c)
If (ListBox1.Items.Contains(x)) Then
GoTo start
End If
Next
ListBox1.Items.Add(x)
If ListBox1.Items.Count = c Then MessageBox.Show("انتهت أسئلة " & CLevel.Text) : ListBox1.Items.Clear() : Exit Sub
[url=http://www.mediafire.com/download/ed9n653ah2blhom/WindowsApplication1.rar][/url]