Wednesday, June 21, 2006

The Frustating Statistics

Hari ini rencananya sih mau bikin algoritma buat menghubungkan spreadsheet digitasi dgn db access. Tadinya gw pikir buat ngebikin sistem perhitungan statistik digitasi curah hujan cukup simpel (soalnya sudah pernah gw kerjakan di sistem digitasi FKlim). Ternyata gw salah. Butuh 6 jam, cuman untuk membuat sistem perhitungan ini. Ribet jg algoritmanya, gw sampe sempat frustasi tadinya. Untungnya udah beres.

'Perhitungan Statistik Data
        For Kolom = 1 To .Cols - 1
            TotalCH = Empty
            TotalData = Empty
            NilaiMax = Empty
            NilaiMin = Empty
            NilaiMinPrev = Empty
            TotalPreVar = Empty
            StdDeviasi = Empty

            RangeData Kolom, JumlahBaris
            For Baris = 1 To JumlahBaris
                MinCount = Empty
                If .TextMatrix(Baris, Kolom) Empty Then
                    If .TextMatrix(Baris, Kolom) = 88888 Then
                        TotalData = TotalData + 1
                    Else
                        'Nilai Max
                        If .TextMatrix(Baris, Kolom) > NilaiMax Then
                            NilaiMax = .TextMatrix(Baris, Kolom)
                        End If
                        'Nilai Min
                        For MinCheck = 1 To Baris
                            If .TextMatrix(MinCheck, Kolom) = Empty Then
                                MinCount = MinCount + 1
                            End If
                        Next MinCheck
                        If MinCount = Baris - 1 Then
                            NilaiMin = .TextMatrix(Baris, Kolom)
                            NilaiMinPrev = NilaiMin
                        ElseIf .TextMatrix(Baris, Kolom) <= NilaiMinPrev Then
                            NilaiMin = .TextMatrix(Baris, Kolom)
                            NilaiMinPrev = NilaiMin
                        End If
                        'Total CH
                        TotalCH = TotalCH + .TextMatrix(Baris, Kolom)
                        'Total Data
                        TotalData = TotalData + 1
                    End If
                End If
            Next Baris
            'Rataan
            Rataan = TotalCH / TotalData
            'Cari StdDeviasi
            For Baris = 1 To JumlahBaris
            If .TextMatrix(Baris, Kolom) Empty Then
                If .TextMatrix(Baris, Kolom) 88888 Then
                    PreVar = (.TextMatrix(Baris, Kolom) - Rataan) ^ 2
                    TotalPreVar = TotalPreVar + PreVar
                End If
            End If
            Next Baris
           
            If TotalData Empty Then
                .TextMatrix(33, Kolom) = TotalCH
                .TextMatrix(34, Kolom) = Rataan
                .TextMatrix(35, Kolom) = TotalData
                .TextMatrix(36, Kolom) = NilaiMax
                .TextMatrix(37, Kolom) = NilaiMin
                Variansi = TotalPreVar / TotalData
                StdDeviasi = Sqr(Variansi)
                .TextMatrix(38, Kolom) = StdDeviasi
            End If
        Next Kolom

Statement yg dicetak hijau adalah komentar, sedangkan yg merah adalah variabel/perhitungan yg bermasalah. Bisa dilihat kalo yg paling bermasalah adalah perhitungan nilai minimum dan standar deviasi. Perhitungan nilai minimum ini yg td sukses bikin gw frustasi, sampe2 gw sempat nazar kalo bisa gw pecahkan, gw bakal mandi. (Hehehe ... td pagi gw langsung programming tanpa mandi, biasa ... programmer gitu lo emoticon). Akhirnya setelah kurang lebih 3 jam, masalahnya terpecahkan, dan ... gw benar2 mandi  setelah itu emoticon .

Setelah ditelusuri, masalahnya ada pd beberapa hal :

  1. Prosedur perhitungan ini ada di luar modul standar. Dengan kata lain, terletak dalam satu prosedur yg sama dgn proses yg mentriggernya. Jadi beda dgn digitasi FKlim yg trigger dan proses perhitungannya ada pada prosedur yg berbeda, dimana tiap prosedur dipanggil, nilai tiap variabel akan otomatis direset oleh program. Jadi untuk digitasi CH, gw harus mereset manual beberapa variabel yg akan diloop.
  2. Masih ada hubungannya dengan masalah pertama. Sekarang masalah looping. Ada sebagian variabel yg harus direset pada level loop baris, sedangkan sebagian lagi di level kolom. Salah satu contoh level baris adalah perhitungan nilai minimum td.

No comments:

Post a Comment