• 0

سؤال

انا مبتدئة في فيجوال بيسك دوت نت

لدي كود لترتيب الارقام يعمل على فيجوال بيسك 6

ولكن لا يعمل على دوت نت

برجاء تعديل الكود ليعمل على فيجوال بيسك دوت نت 2010

 وشكرا

 

 

 

 

 

Private Sub Command1_Click()

Cls

Dim X(1 To 20) As Single

Dim N, J, k, Temp, I As Single

N = InputBox("ادخل عدد القيم")

For J = 1 To N

X(J) = InputBox("ادخل القيم")

Next J

For J = 1 To N - 1

Temp = X(J)

For I = J + 1 To N

If X(I) < Temp Then

k = (I)
Temp = X(J)
X(J) = X(k)
X(k) = Temp
Temp = X(J)

End If

Next I
Next J

For I = 1 To N
Print , X(I);
Next I

End Sub

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

15 إجابة على هذا السؤال .

  • 0

تفضلي

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click        Dim X(20) As Single        Dim N, J, k, Temp, I As Single        N = InputBox("ادخل عدد القيم")        For J = 1 To N            X(J) = InputBox("ادخل القيم")        Next J        For J = 1 To N - 1            Temp = X(J)            For I = J + 1 To N                If X(I) < Temp Then                    k = (I)                    Temp = X(J)                    X(J) = X(k)                    X(k) = Temp                    Temp = X(J)                End If            Next I        Next J        For I = 1 To N            MsgBox(X(I))        Next I    End Sub

 

وهذا المثال التطبيقي:

WindowsApplication1.rar

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

متشكرة جدا استاذ فؤاد 

جربته وفعلا اشتغل

بعد اذنك ممكن تشرحلي الكود لاني مش فاهمة اوي وممكن تقولي لو عايزاه تصاعدي يكون ازاي 

وتقولي رايك في الكود 

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بكل سرور

 

بالنسبة للتغييرات فكل ما فعلته هو تغيير السطرين التاليين:

 

Dim X(1 To 20) As SinglePrint , X(I);

كما يلي:

        Dim X(20) As Single            MsgBox(X(I)) 

أما بالنسبة لشرح البرنامج:

 

فهو كما يلي:

بالبداية تعريف مصفوفة مؤلفة من عشرين عنصر من نوع single (رقم حقيقي), وتعريف خمس متغيرات لتخزين أرقام سنستغلها لاحقاً في البرنامج:

        Dim X(20) As Single        Dim N, J, k, Temp, I As Single

نشحن المتغير N برقم يدخله المستخدم حيث أن الدالة inputBox تعرض مربع حوار يحوي مربع نص ومن ثم يعيد قيمة الرقم الذي أدخله المستخدم, وهذا الرقم N يعبر عن عدد الأرقام المراد ترتيبها:

 N = InputBox("ادخل عدد القيم")

بعدها يتم تنفيذ حلقة تكرارية بعدد الأرقام المراد ترتيبها وبكل خطوة يتم عرض نفس مربع الحوار لإدخال رقم ومن ثم تخزينه في المصفوفة X

        For J = 1 To N            X(J) = InputBox("ادخل القيم")        Next J

ثم تبدأ الحلقة التكرارية التي تقوم بالترتيب وملخص عملها هو ترتيب العناصر في المصفوفة بوضع أصغر العناصر في بداية المصفوفة ويليه ثاني أصغر العناصر وهكذا حتى ينتهي ترتيب كامل عناصر المصفوفة:

        For J = 1 To N - 1            Temp = X(J)            For I = J + 1 To N                If X(I) < Temp Then                    k = (I)                    Temp = X(J)                    X(J) = X(k)                    X(k) = Temp                    Temp = X(J)                End If            Next I        Next J

وبالنهاية حلقة تكرارية تقوم بعرض عناصر المصفوفة بعد الترتيب:

        For I = 1 To N            MsgBox(X(I))        Next I

 

 

 

 

ولتغيير نوع الترتيب يكفي تغغير عبارة الشرط

للترتيب التصاعدي:

 If X(I) < Temp Then

 

للترتيب التنازلي:

If X(I) > Temp Then

 

 

وهذه الخوارزمية تدعى خوارزمية الترتيب الفقاعي

إنها خوارزمية جيدة وتعطي نتائج مقبولة بالنسبة لكمية الأرقام القليلة ولكن بالنسبة لكمية الأرقام الضخمة فيوجد العديد من الخوارزميات التي تعتبر أكثر فاعلية منها ولكنها أكثر تعقيداً

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

متشكرة جدا على مساعدتك ومجهود رائع

ممكن تديني فكرة لو كمية الارقام ضخمة وليه بتكون اكثر تعقيدا



وهل في طريقة ان اخلي الكود يعرضلي الارقام بعد ترتيبها ورا بعض يعني مش كل رقم في msgbox قصدي كلهم في msgbox واحدة مرتبين

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بالنسبة لخوارزميات البحث الترتيب أنصحك بقراءة هذا الموضوع

 

أما بالنسبة لطباعة جميع الأرقام برسالة واحدة فيمكنك استخدام الحلقة التكرارية التالية عوضاً عن السابقة:

 

 

Dim msgStr As String = ""        For I = 1 To N            msgStr = msgStr & X(I)        Next I MsgBox(msgStr)
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شكرا جدا 

مش عارفة اقولك ايه

انا جربت الكود التاني فعلا  اشتغل بس لما جيت اعمله تنازلي ما اشتغلش 

عملته كده 

 

Dim msgStr As String = ""
Dim X(20) As Single

Dim N As Single

N = InputBox("ادخل عدد القيم")
For I = N To 1
X(I) = InputBox("ادخل القيم")

msgStr = msgStr & X(I)
Next I
MsgBox(msgStr)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شكرا جدا 

مش عارفة اقولك ايه

انا جربت الكود التاني فعلا  اشتغل بس لما جيت اعمله تنازلي ما اشتغلش 

عملته كده 

 

Dim msgStr As String = ""Dim X(20) As SingleDim N As SingleN = InputBox("ادخل عدد القيم")For I = N To 1X(I) = InputBox("ادخل القيم")msgStr = msgStr & X(I)Next IMsgBox(msgStr)

 

إن المشكلة في الحلقة التكرارية التي اخترتيها: فهي من N إلى 1 وهذا خاطئ لأنها لن تعمل أي شيء فهي ستبدأ من القيمة N وتنتهي عندما تصل إلى قيمة أكبر من 1 (وهي بالأصل أكبر من القيمة 1)

والحل الصحيح أن تبدأ الحلقة التكرارية من 1 وتنتهي عند N

 

وكمت قلت من قبل أنه من أجل عملية الفرز التنازلي يجب فقط تغيير الشرط ضمن الحلقة التكرارية إما إشارة < أو > حسب نوع الترتيب

                If X(I) > Temp Then
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

كان قصدي اني اعمل تنازلي في الطريقة التانية للكود ان يطلع الترتيب كله في مسج بوكس واحدة

شكرا لوقتك في الرد عليا - ربنا يجازيك خير

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الاخ فؤاد شكرا لمجهودك

هل يمكن عمل الترتيب التنازلي ويظهر كله في رسالة واحدة

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

يبدو من ردك أنك حاولت كثيراً وفشلت

 

وبالتالي هذا هو البرنامج:

للترتيب التصاعدي:

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click        Dim X(20) As Single        Dim N, J, k, Temp, I As Single        N = InputBox("ادخل عدد القيم")        For J = 1 To N            X(J) = InputBox("ادخل القيم")        Next J        For J = 1 To N - 1            Temp = X(J)            For I = J + 1 To N                If X(I) < Temp Then                    k = (I)                    Temp = X(J)                    X(J) = X(k)                    X(k) = Temp                    Temp = X(J)                End If            Next I        Next JDim msgStr As String = ""        For I = 1 To N            msgStr = msgStr & X(I)        Next I MsgBox(msgStr)

 

وللترتيب التنازلي:

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click        Dim X(20) As Single        Dim N, J, k, Temp, I As Single        N = InputBox("ادخل عدد القيم")        For J = 1 To N            X(J) = InputBox("ادخل القيم")        Next J        For J = 1 To N - 1            Temp = X(J)            For I = J + 1 To N                If X(I) > Temp Then                    k = (I)                    Temp = X(J)                    X(J) = X(k)                    X(k) = Temp                    Temp = X(J)                End If            Next I        Next JDim msgStr As String = ""        For I = 1 To N            msgStr = msgStr & X(I)        Next I MsgBox(msgStr)
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شكرا ليك جدا يا اخ فؤاد على الرد والافادة

كان سؤالي اني طبقت ملحوظاتك على الكود علشان تظهر الارقام في رسالة واحدة 

وعملت الترتيب التصاعدي بالشكل التالي :

 

Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
Dim msgStr As String = ""
Dim X(20) As Single

Dim N As Single

N = InputBox("ادخل عدد القيم")
For I = 1 To N
X(I) = InputBox("ادخل القيم")

msgStr = msgStr & X(I)
Next I
MsgBox(msgStr)

End Sub

 

 

ولكني لم استطع بنفس الطريقة عمل ترتيب تنازلي لتظهر لي الارقام في رسالة واحدة 

فكيف يمكن التغيير في الكود السابق حتى يتم ترتيب الارقام تنازليا وتظهر في رسالة واحدة

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

يا اخ فؤاد اسفة لكثرة الاسئلة

بس ياريت تفيدني هل يمكن عمل الكود السابق للترتيب التنازلي ام لا 

للاسف حاولت وماعرفتش

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أعتذر عن الرد حتى الآن وذلك بسبب انقطاع الانترنت, وآمل أن لا يظن أحد أنني قد مللت أو سئمت من الأسئلة, ويسرني دائماً تقديم المساعدة متى طلبت مني واستطعت ذلك.

 

على كل حال بالنسبة لسؤالك فقد حاولت المساعدة بمشاركتي رقم #11 وكتبت البرنامج بالكامل حيث يتم طباعة الأرقام برسالة واحدة بالترتيب التصاعدي والتنازلي.

 

أما بالنسبة لتصحيح برنامجك:

Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.ClickDim msgStr As String = ""Dim X(20) As SingleDim N As SingleN = InputBox("ادخل عدد القيم")For I = 1 To NX(I) = InputBox("ادخل القيم")msgStr = msgStr & X(I)Next IMsgBox(msgStr)End Sub

فهذا البرنامج لا يقوم بأي ترتيب (لا تصاعدي ولا تنازلي) وإنما فقط يطلب من المستخدم إدخال عدة أرقام ومن ثم طباعتها برسالة.

يمكنك معرفة قطع الكود الناقصة بمقارنة هذا البرنامج مع البرنامج الموجود بالمشاركة رقم #11

 

بالتوفيق

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

جربت الكود في المشاركة 11 

التصاعدي اشتغل

بس التنازلي مش شغال 

مرفق البرنامج برجاء افادتي ما الخطا

WindowsApplication12.rar

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

لقد اطلعت على البرنامج, ويبدو البرنامج صحيحاً إلا أنه يوجد خطأ بسيط:

post-252722-0-44311600-1367163621_thumb.

 

أعتقد أنك كنت تختارين Yes وهذا يعني أن visualStudio سيشغل أحدث نسخة كانت تعمل من البرنامج, ولن يقوم بترجمة التغييرات الجديد.

 

الخطأ هو أنه قبل تعليمة End Class يجب أن تكون تعليمة End Sub فلا يمكن انهاء البرنامج قبل انهاء الدالة.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

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



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .