دستوری برای مرتب کردن در Vb

Majid 3D

Member
با سلام.
آیا وی بی دستوری برای مرتب کردن داده ها به صورت تعریف شده ای داره ؟
مثلا بین 3 تا عدد میخوایم بزرگترینش رو نشون بده ، خوب برای این کار میتونیم خودمون به راحتی یه برنامه بنویسیم ولی اگه این اعداد صد تا باشه چی ؟ فکر کنم دستوری داشته باشه.
 

the_king

مدیرکل انجمن
دستور از قبل تعریف شده ای وجود نداره.
اگر هدف شما پیدا کردن مقدار ماکزیمم بین چند مقدار (عددی یا رشته string) است از این تابع استفاده کنید :

کد:
Public Function [B]Maximum[/B](ParamArray Values() As Variant) As Variant
    Dim Index As Long
    Maximum = Values(0)
    For Index = 1 To UBound(Values)
        If Values(Index) > Maximum Then Maximum = Values(Index)
    Next
End Function

مثلا برای پیدا کردن مقدار ماکزیمم بین سه عدد اعشاری 0.3 و سینوس عدد 1 و لگاریتم عدد 2 :
کد:
    MsgBox [B]Maximum[/B](0.3, Sin(1), Log(2))

و برای پیدا کردن مقدار ماکزیمم بین چهار متغیر A و B و C و D :
کد:
    MsgBox [B]Maximum[/B](A, B, C, D)

ولی اگر متغیرهای شما درون یک آرایه قرار دارند از این تابع استفاده کنید :
کد:
Public Function [B]MaximumArray[/B](ByRef Values As Variant) As Variant
    Dim Index As Long
    MaximumArray = Values(LBound(Values))
    For Index = LBound(Values) + 1 To UBound(Values)
        If Values(Index) > MaximumArray Then MaximumArray = Values(Index)
    Next
End Function

مثلا برای پیدا کردن مقدار ماکزیمم در آرایه 100 عنصری List :
کد:
    Dim List(1 To 100) As Long
    MsgBox [B]MaximumArray[/B](List)
 

the_king

مدیرکل انجمن
برای مرتب کردن یک آرایه با الگوریتم مرتب سازی سریع Quick Sort از این روتین استفاده کنید :

کد:
Public Sub [B]QuickSort[/B](ByRef List As Variant, ByVal First As Long, ByVal Last As Long)
    Dim LeftIndex As Long, RightIndex As Long, BaseItem As Variant, TempItem As Variant
    If Last > First Then
        LeftIndex = First
        RightIndex = Last + 1
        BaseItem = List(First)
        Do
            Do
                LeftIndex = LeftIndex + 1
            Loop While List(LeftIndex) < BaseItem And LeftIndex < Last
            Do
                RightIndex = RightIndex - 1
            Loop While List(RightIndex) > BaseItem And RightIndex > First
            If LeftIndex < RightIndex Then
                TempItem = List(LeftIndex)
                List(LeftIndex) = List(RightIndex)
                List(RightIndex) = TempItem
            Else
                Exit Do
            End If
        Loop
        TempItem = List(First)
        List(First) = List(RightIndex)
        List(RightIndex) = TempItem
        QuickSort List, First, RightIndex - 1
        QuickSort List, RightIndex + 1, Last
    End If
End Sub

این روتین سه پارامتر دارد، اولی نام آرایه است (نوع داده ای آرایه اهمیتی ندارد)
دومین و سومین پارامتر این روتین اندیس اولین عضو و آخرین عضو آرایه هستند.

مثلا برای مرتب کردن آرایه 100 عضوی List که از اندیس 1001 تا 1100 ادامه دارد می نویسیم :
کد:
    Dim List(1001 To 1100) As Double
    [B]QuickSort[/B] List, 1001, 1100
 
آخرین ویرایش توسط مدیر:

seyedvahid67

New Member
با سلام من یه برنامه میخوام که مثلا 3 عدد را دریافت کند و میانگینش(معدل) را به دست بیاورد و نتایج معدل رو به صورت
مرتب در لیست باکس چاپ نمایید. فکر کنم باید درش از آرایه استفاده شود
فقط سریع بهم جواب بدید
منتظرم

البته به زبان vb6
دوستان من منتظرم فقط سریع بهم جواب بدید
 

جدیدترین ارسال ها

بالا