18-08-20, 02:16 AM
(آخر تعديل لهذه المشاركة : 18-08-20, 05:30 PM {2} بواسطة عبد الهادي بهاب.)
(17-08-20, 11:42 PM)مصمم هاوي كتب : برنامج رائع أتمنى أن تكمله للنهاية، فهذا هو مجال تخصصي لغة عربية
حاضر استاذ
ان شاء الله يكون مبدا البرنامج مفهوم
يعني ممكن تحضر عدة انماط حسب تعقيداتها
و تضع لكل منها ملف تكست تضع فيه جملا اعرابها هو نفسه
يعني يمكن ننتج 100 الجمل او المتسويات من اللعب
ارجو ان تصحح ما اخطأت فيه
فالبعكس فليس مجالي اللغة و ادابها
نتابع الشرح :
في form_load
سنحفظ في مصفوفات الكوومبكس و الليبالات و الصور
PHP كود :
Combox = {ComboBox1, ComboBox2, ComboBox3, ComboBox4, ComboBox5}
Labl = {Label1, Label2, Label3, Label4, Label5}
Labl2 = {Label6, Label7, Label8, Label9, Label10}
pict = {PictureBox1, PictureBox2, PictureBox3, PictureBox4, PictureBox5}
الانماط التي ذكرناها هي كالتالي
PHP كود :
p1 = {"فعل ماض", "فاعل مرفوع", "حرف جر", "اسم مجرور"}
p2 = {"فعل ماض ناقص", "اسم كان و اخواتها", "خبر كان و اخواتها"}
p3 = {"حرف ناسخ", "اسم إن و اخواتها", "خبر إن و اخوانها"}
p4 = {"فعل ماض", "فاعل مرفوع", "مفعول به منصوب", "صفة منصوبة"}
p5 = {"فعل مضارع", "فاعل مرفوع", "حال منصوبة", "حرف جر", "اسم مجرور"}
p6 = {"فعل ماض", "فاعل مرفوع", "مفعول به اول", "مفعول به ثان"}
p7 = {"فعل ماض", "فاعل مرفوع", "مفعول به منصوب و هو مضاف", "مضاف اليه"}
p8 = {"فعل ماض", "فاعل مرفوع", "مفعول مطلق", "صفة منصوبة"}
p9 = {"مبتدأ مرفوع ", "خبر مرفوع", "صفة مرفوعة"}
p10 = {"حرف نصب", "فعل مضارع منصوب", "فاعل مرفوع", "صفة مرفوعة"}
يعني من اجل ملف تكست 1 حلها هو المصفوفة p1
وهي التي نقارن بها بين اجابة الطالب و الاعراب
نجمعها في مصفوفة ايضا
PHP كود :
Rpp = {p1, p2, p3, p4, p5, p6, p7, p8, p9, p10}
الان كل ما سبق سنجمعه في مصفوفة واحدة و نحذف المتشابهات
لنضمن ان لا نخطئ في الكتابة
لانه يمكن ان نملا الكومبوكس لكن اي خطا و لو في الهمزة او المسافات سيعتبر خطا
ثم نرتب ما تم جمعه ابجديا
PHP كود :
For Each gh As Array In Rpp
For i = 0 To gh.Length - 1
somme.Add(gh(i))
Next
Next
For i = 0 To somme.Count - 2
For p = somme.Count - 1 To i + 1 Step -1
If somme(i).ToString = somme(p).ToString Then
somme.RemoveAt(p)
End If
Next
Next
' ترتيب العناصر
somme.Sort()
الان تم التحضير للبرنامج
الان مع الدة توليد الاسئلة : question()
سنخفي كل الكومبوكسات و نفرغها من محتواها
اليبلات و كل الصور و ايضا نرجعها الى فراغ
PHP كود :
For p = 0 To 4
Combox(p).Visible = False
Combox(p).Items.Clear()
Labl(p).Visible = False
Labl2(p).Text = Nothing
Labl2(p).Visible = False
pict(p).Visible = False
Next
ثم سنعبئ الكومبوكسات من المصفوفة التي جمعنا فيها الاجابات كلها
PHP كود :
For f = 0 To somme.Count - 1
For p = 0 To 4
Combox(p).Items.Add(somme(f))
Next
Next
سنضع كل عناصر الاجابة فارغة
PHP كود :
reponses = {"", "", "", "", ""}
ثم سنختار عشوائيا رقم من 1 الى 10 وهو الذي ويافق ملف التكست
PHP كود :
Dim NmberQ = Nrandom.Next(1, 10)
Dim Hafs As String = Application.StartupPath & "\" & NmberQ & ".txt"
الان سننشئ مصفوفة تتكون من اسطر هذا التكست
PHP كود :
Dim readH As StreamReader
Dim Harr() As String = Nothing
''''''''''''
readH = New StreamReader(Hafs)
Dim I As Integer
Do Until readH.EndOfStream
ReDim Preserve Harr(I)
Harr(I) = readH.ReadLine()
I += 1
Loop
readH.Close()
ايضا سنختار عشوائيا من بين هذه الجمل من المصفوفة و نضعها في textrich
PHP كود :
Dim Nmberphrase = Nrandom.Next(0, Harr.Length)
RichTextBox1.Text = Harr(Nmberphrase)
RichTextBox1.SelectionAlignment = HorizontalAlignment.Center
بعدها سنقسم كلماتها في مصفوفة
PHP كود :
txtQ = Harr(Nmberphrase).Split(" ")
و من خلال ذلك سنعطي لكل ليبال كلمة و بالتالي يهر ان الجملة قد فسمت في جدول للاعراب
PHP كود :
For p = 0 To txtQ.Length - 1
Combox(p).Visible = True
Labl(p).Visible = True
Labl(p).Text = txtQ(p)
Next
نتابع :
كما تذكرون قد جمعنا الحلول في مصفوفة
لما اخترنا رقم ملف التكست فالحل هو رقم مصفوفة الاجابة في المجموعة - 1
PHP كود :
Dim sol = Rpp(NmberQ - 1)
ثم نملا بها ليبالات الحل الحمراء التي تهر في حالى الخطا
PHP كود :
For I = 0 To sol.Length - 1
Labl2(I).Text = sol(I)
Next
حينها نضيف 1 لرقم السؤال لعرض ابلسؤال الموالي
و بالتالي تكون دالة توليد الاسئلة الكلية هي
PHP كود :
Sub questions()
' اخفاء الكومبوكس و كالكلمات و الصور
For p = 0 To 4
Combox(p).Visible = False
Combox(p).Items.Clear()
Labl(p).Visible = False
Labl2(p).Text = Nothing
Labl2(p).Visible = False
pict(p).Visible = False
Next
' ملء الكومبوكس
For f = 0 To somme.Count - 1
For p = 0 To 4
Combox(p).Items.Add(somme(f))
Next
Next
'تفريغ الاجابات
reponses = {"", "", "", "", ""}
' اختيار عشوائي للملف ووضعه في مصفوفة
Dim NmberQ = Nrandom.Next(1, 10)
Dim Hafs As String = Application.StartupPath & "\" & NmberQ & ".txt"
Dim readH As StreamReader
Dim Harr() As String = Nothing
''''''''''''
readH = New StreamReader(Hafs)
Dim I As Integer
Do Until readH.EndOfStream
ReDim Preserve Harr(I)
Harr(I) = readH.ReadLine()
I += 1
Loop
readH.Close()
' اختيار عوائي للجملة من المصقوقة
Dim Nmberphrase = Nrandom.Next(0, Harr.Length)
RichTextBox1.Text = Harr(Nmberphrase)
RichTextBox1.SelectionAlignment = HorizontalAlignment.Center
txtQ = Harr(Nmberphrase).Split(" ")
' اظهار عدد الكلمات و الكومبوكس وفق عدد كلمات الجملة
For p = 0 To txtQ.Length - 1
Combox(p).Visible = True
Labl(p).Visible = True
Labl(p).Text = txtQ(p)
Next
' الحل
Dim sol = Rpp(NmberQ - 1)
For I = 0 To sol.Length - 1
Labl2(I).Text = sol(I)
Next
NmberQ += 1
End Sub
نتابع :
الان في الكومبوكسات سنجعل كل ما يختار كومبوكس يسجل clic +1
و يسجل اختياره في مصفوفة الاجابات
لطلك من اجل الحدث ComboBox1_SelectedIndexChanged سنضع الكود
PHP كود :
clic += 1
reponses(0) = ComboBox1.Text
و نكرره لكل كومبوكس مع تغيير رقمه في الكود
و بالتالي من اجل 5 كوبموكس سنجد التالي
PHP كود :
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
clic += 1
reponses(0) = ComboBox1.Text
End Sub
Private Sub ComboBox2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox2.SelectedIndexChanged
clic += 1
reponses(1) = ComboBox2.Text
End Sub
Private Sub ComboBox3_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox3.SelectedIndexChanged
clic += 1
reponses(2) = ComboBox3.Text
End Sub
Private Sub ComboBox4_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox4.SelectedIndexChanged
clic += 1
reponses(3) = ComboBox4.Text
End Sub
Private Sub ComboBox5_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox5.SelectedIndexChanged
clic += 1
reponses(4) = ComboBox5.Text
End Sub
الان في زر التالي سنضع ببساطة
PHP كود :
questions()
اما في زر التصحيح نضع دالة التصحيح
PHP كود :
verfications()
ماذا نضع في دالة التصحيح ؟؟؟؟
مباشرة سنقارن محتوى مصفوفة الاجابة reponses مع مصفوفة الحلول Labl2
اذا وجد النصين متساوين يضيف رقم 1 الى متغير reusi وهو عدد الكلمات الصحيحة
و يعطي الصورة شكل صح
و الا سيعطي الصورة شكل خطا
اذا كان متغير reusi هو نفسه عدد كلمات الجملة فهو قد اجاب على كل الكلمات فنعطيه 1 للنقاط scor +1 من 10
ثم نهر كل الصور
اذا وصل الى 10/10 فهو قد اجاب جيدا نظهر له رسالة تهنئة
اذن الكود لكه للتصحيح كالتالي
PHP كود :
Sub verfications()
Dim reusi As Integer = 0
For i = 0 To 4
If reponses(i) = Labl2(i).Text Then
reusi += 1
pict(i).Image = My.Resources.yes
Else
Labl2(i).Visible = True
pict(i).Image = My.Resources.no
End If
Next
If reusi = 5 Then
score += 1
Labscore.Text += 1
End If
For i = 0 To txtQ.Length - 1
pict(i).Visible = True
Next
If reusi >= 10 Then
MessageBox.Show(" ما شاء الله انت في طريقك لاحتراف الاعراب", "عبد الهادي بهاب", MessageBoxButtons.OK, MessageBoxIcon.Information)
restart()
End If
End Sub
بعد 10 /10
سنعيد من جديد و نفعل دالة الاعادة restart
PHP كود :
Sub restart()
score = 0
Labscore.Text = 0
NmberQ = 0
questions()
End Sub
اخيرا مع الملف
اولا حمل الملفات هذه وهي ملفات تكست من 1 الى 10
يمكن ان تيف لها جملا لكن بنفس سياق الاعراب
i3rab_ txt.rar (الحجم : 2.51 ك ب / التحميلات : 39)
ثم حمل ملف برنامج الاعراب المختصر
i3rab.rar (الحجم : 159.38 ك ب / التحميلات : 57)
mp = vb4arb.com
ضعه في مجلد \bin\Debug
و استمتع بالبرنامج
بالتوفيق في مشاريعكم
لا تنسونا بدعوة خالصة
لعل الكلمة التي تنفعني لم أكتبها بعد
عبد الله بن المبارك

