تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] مساعدة في برنامج مسابقة بأسئلة عشوائية
#1
مساء الخير
اخواني اذا سمحتو اي حد خبير يساعدني بتعديل هالمشروع
المشروع عبارة عن برنامج مسابقة مع قاعدة بيانات
تم اضافة 15 سؤال في قاعدة البيانات مع رقم تسلسلي 1 2 3 4 5 .....
ومهمة البرنامج عرض هذه الاسئلة للمتسابق ولكن بطريقة عشوائية
في اللود للمسابقة يتم جلب جميع الارقام المتسلسلة للاسئلة وحفظها في جدول الارراي
ويتم توليد رقم عشوائي من 1 إلى اكبر رقم تسلسلي
ويتم جلب معلومات السؤال من جددول الاسئلة بناءا على الرقم العشوائي الذي تم توليده ويتم عرضه للمستخدم وبعدها يحذف الرقم المتسلسل الخاص بالسؤال من جدول الارراي لكي لا يتكرر السؤال
وايضا الاجابات يتم ترتيبها على الازرار بطريقة عشوائية
وهكذا يتم عرض الاسئلة بطريقة عشوائية وليست مرتبة
ولكن هناك مشكلة .. وهي انه في آخر 5 اسئلة من ال 15 سؤال قد يتكرر بعضهم ولكن لا اعرف السبب
اذا ممكن حد يساعدني مشان نلغي التكرار نهائيا ..
رابط المشروع : http://www.mediafire.com/download/ed9n65...ation1.rar
الرد }}}
تم الشكر بواسطة: sherf
#2
حسب وصف البرنامج ... حتما الاسئلة مكررة من مصدر البيانات.
المشروع كبير ويحتاج تدقيق .. ان شالله احد الاخوة يقدم المساعدة.
الرد }}}
تم الشكر بواسطة:
#3
أنت تحتاج الي مصفوفتان الأولي سيتم تخزين جميع الاسئلة بها و في المصفوفة الثانية سيتم تخزين الاسئلة العشوائية
عليك فقط ان تختار السؤال من المصفوفة العشوائية ثم تحذفه منها بعد أن تختاره
و من الاسهل لك أن تحذف اخر سؤال في القائمة العشواية او تحذف اول سؤال

لنحاول تنفيذ الفكرة في مشروع منفصل ختي يتضح الامر لك
افتح شروع عادي به فورم واحد و اضف للفورم عدد إثنان 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 ObjectAs EventArgsHandles 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(iThen
                
' 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(1)
 
           result(1) = t
        Next
        Return result
    End 
Function


End Class 

 عليك ان تقوم بتطبيق نفس الفكرة في مشروعك

ملحوظة:

الدالة الخاصة بتوليد ارقام عشوائية يمكن استخدامها مع اي شئ غير الارقام فقط عليك بتغيير نوع المدخلات الخاصة بها
الرد }}}
تم الشكر بواسطة:
#4
(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 ObjectAs EventArgsHandles 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(iThen
                
' 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(1)
 
           result(1) = t
        Next
        Return result
    End 
Function


End Class 

 عليك ان تقوم بتطبيق نفس الفكرة  في مشروعك

ملحوظة:

الدالة الخاصة بتوليد ارقام عشوائية يمكن استخدامها مع اي شئ غير الارقام فقط عليك بتغيير نوع المدخلات الخاصة بها


شكرا إلك اخي الغالي .. بس اذا ممكن اخي بتقدر تطبقلي اياها على المشروع يلي انا رافعو ؟؟

لانه يمكن انت خبرتك اكثر مني ومشان افهم الفكرة منيح لما تكون مطبقة عالمشروع

وشكراا إلك اخي الغالي
الرد }}}
تم الشكر بواسطة:
#5
قم بكتابة هذا الكود  وقم بأضافة 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]
الرد }}}
تم الشكر بواسطة:
#6
جميل جدا بارك الله فيك
الرد }}}
تم الشكر بواسطة:



التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم