الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

inserting sort

بدأه betna في 9 أبريل 2013 · 15 رد · 2,474 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

لدي كود لترتيب الارقام يعمل على فيجوال بيسك 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

#2

تفضلي

    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

#3

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

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

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

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

#4

بكل سرور

 

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

 

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

 

 

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

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

#5

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

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



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

#6

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

 

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

 

 

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

شكرا جدا 

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

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

عملته كده 

 

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)

#8
betna كتب:

شكرا جدا 

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

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

عملته كده 

 

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)

 

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

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

 

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

                If X(I) > Temp Then
#9

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

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

#10

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

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

#11

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

 

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

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

    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

Dim 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 J

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

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

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

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

 

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

 

 

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

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

#13

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

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

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

#14

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

 

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

 

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

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

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

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

 

بالتوفيق

#15

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

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

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

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

WindowsApplication12.rar

#16

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

post-252722-0-44311600-1367163621_thumb.

 

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

 

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

مواضيع مشابهة