/* */

Tuesday, September 28, 2010

Re: Sudah Solve.. Bls: [belajar-access] Re: mohon bantuan function pecah angka



Semula gua sangka itu soal tes untuk calon programmer tempatmu, win ....
ealah ...
ternyata memang untuk kasus riil ...

:)


aksan kurdin


On 9/28/2010 3:45 PM, Erwin Sugiawan wrote:
 
Terima kasih semua.. udah ketemu ,Function di bawah adalah modifikasi dari function yang di buat oleh Bang Aksan.


Masalah :
1. Jumlah Order terkirim dalam 1 PO tidak boleh lebih dari 10.000 item
2. Jika jumlah Order di bagi oleh Split > 10000, maka perintah di abaikan, misalkan Jumlah Order=30000 jika di split 2 maka hasil
data(1)=10000 dan data(2) > 10000, hal ini tidak di ijinkan
3. Sesuai dengan petunjuk dari Bang Aksan, harus di mungkinkan hasil split mempunyai data yang sama, contoh
Jumlah Order 30000 di split 3 , maka data(1)=10000,data(2)=10000 dan data(3)=10000


 Public Function SplitAngka(JmlOrder As Long, JmlSplit As Long)
   
    ReDim arr(JmlSplit) As Long
    Dim i As Integer
    Dim maxNilai As Long
    Dim MaxOrder As Long
    Dim OrderRataRata As Long
 
    Randomize
    maxNilai = JmlOrder
    MaxOrder = 10000
    'Jika JmlOrder < 10k, maka MaxOrder mengikuti yang terkecil
    If JmlOrder < MaxOrder Then MaxOrder = JmlOrder
    OrderRataRata = (JmlOrder / JmlSplit)
    If OrderRataRata > MaxOrder Then
        MsgBox ("Order hasil Split harus lebih kecil dari 10 rb")
        Exit Function
    End If
   
    If OrderRataRata = MaxOrder Then
         For i = 0 To JmlSplit - 1
            arr(i) = OrderRataRata
         Next i
    Else
        For i = 0 To JmlSplit - 2
            If maxNilai > MaxOrder Then
                arr(i) = MaxOrder
            Else
                Do While True
                    arr(i) = CLng(Rnd() * (MaxOrder - (JmlSplit - 2) - 1)) + 1
                    If arr(i) > 0 And arr(i) * JmlSplit < 10000 Then Exit Do
                Loop
            End If
           
            maxNilai = maxNilai - arr(i)
            If maxNilai < MaxOrder Then MaxOrder = maxNilai
        Next
       
        arr(JmlSplit - 1) = maxNilai - arr(i)
    End If
   

   
    Dim runNilai As Long
    runNilai = 0
    For i = 0 To (JmlSplit - 1)
        Debug.Print i + 1, arr(i)
        runNilai = runNilai + arr(i)
    Next
    Debug.Print "total : " & runNilai
End Function


 
Best regard
Erwin Sugiawan






__._,_.___


SPAM IS PROHIBITED



Your email settings: Individual Email|Traditional
Change settings via the Web (Yahoo! ID required)
Change settings via email: Switch delivery to Daily Digest | Switch to Fully Featured
Visit Your Group | Yahoo! Groups Terms of Use | Unsubscribe

__,_._,___

No comments:

Post a Comment