Jump to content

Recommended Posts

Posted (edited)

oook, so for those of you who have answered my earlier myriad of questions, Im building a script that would find the mean, meadian and mode for a set of numbers... Im almost done, i just need to find out how to use arrays to find the most occuring number ( mode ), here is my attempt at this:

Dim $array[10]
    $array1=_ArraySearch($avArray,$avArray[1])
    $array2=_ArraySearch($avArray,$avArray[2])
    $array3=_ArraySearch($avArray,$avArray[3])
    $array4=_ArraySearch($avArray,$avArray[4])
    $array5=_ArraySearch($avArray,$avArray[5])
    $array6=_ArraySearch($avArray,$avArray[6])
    $array7=_ArraySearch($avArray,$avArray[7])
    $array8=_ArraySearch($avArray,$avArray[8])
    $array9=_ArraySearch($avArray,$avArray[9])
    If $array1 > 1 Then
        $array[1]=Number($array1)
    Else
        $array[1]=Number(0)
    EndIf
    
    If $array2 > 1 Then
            $array[2]=Number($array2)
    Else
        $array[2]=Number(0)
    EndIf
    
    If $array3 > 1 Then
                $array[3]=Number($array3)
    Else
        $array[3]=Number(0)
    EndIf
    
        If $array4 > 1 Then
        $array[4]=Number($array4)
    Else
        $array[4]=Number(0)
    EndIf
    
    If $array5 > 1 Then
            $array[5]=Number($array5)
    Else
        $array[5]=Number(0)
    EndIf
    
    If $array6 > 1 Then
                $array[6]=Number($array6)
    Else
        $array[6]=Number(0)
    EndIf
    
        If $array7 > 1 Then
        $array[7]=Number($array7)
    Else
        $array[7]=Number(0)
    EndIf
    
    If $array8 > 1 Then
            $array[8]=Number($array8)
    Else
        $array[8]=Number(0)
    EndIf
    
    If $array9 > 1 Then
                $array[9]=Number($array9)
    Else
        $array[9]=Number(0)
    EndIf
    _ArraySort($array,1)
    $mode=$array[1]
    GUICtrlSetData($Input_15,$mode)

*EDIT: this was failure, of course

Edited by P a R a D o X

If I hadn't said thank you yet, and you deserve it, than thank you...

Posted (edited)

Maybe something like:

#include <Array.au3>

Dim $a_array[20], $a_total

For $x = 0 To UBound($a_array) - 1
    $a_array[$x] = Random(1, 50, 1)
Next

$a_DupeCount = _ArrayCountOccurance($a_array)

For $x = 0 To UBound($a_total) - 1
    ConsoleWrite("Number (" & $a_DupeCount[$x][0] & ") : Count (" & $a_DupeCount[$x][1] & ")" & @LF)
Next

ConsoleWrite(@LF & "Highest: " & $a_DupeCount[0][0] & " : " & $a_DupeCount[0][1] & @LF)

Func _ArrayCountOccurance(ByRef $a_array)
    _ArraySort($a_array)
    Dim $a_total[1][2]
    $a_total[0][0] = $a_array[0]
    $a_total[0][1] = 1

    $hold = $a_array[0]
    For $x = 1 To UBound($a_array) - 1
        If $a_array[$x] = $hold Then
            $a_total[UBound($a_total) - 1][1] = $a_total[UBound($a_total) - 1][1] + 1
        Else
            ReDim $a_total[UBound($a_total) + 1][2]
            $a_total[UBound($a_total) - 1][0] = $a_array[$x]
            $a_total[UBound($a_total) - 1][1] = 1
            $hold = $a_array[$x]
        EndIf
    Next
    _ArraySort($a_total,1,0,0,2,1)
    Return $a_total
EndFunc   ;==>_ArrayCountOccurance
Edited by gafrost

SciTE for AutoItDirections for Submitting Standard UDFs

 

Don't argue with an idiot; people watching may not be able to tell the difference.

 

  • Moderators
Posted

Example

#include <array.au3>
Dim $aNum[11] = [1,3,8,3,4,6,2,2,1,1]
$Max = _ArrayReturnMax($aNum)
_ArrayDisplay($Max, '')oÝ÷ Ù«­¢+ÙÕ¹}ÉÉåIÑÕɹ5à ÀÌØíÉÉä°ÀÌØí¥  ÍôÀ¤($ìÀÌØí¥  ÍÉÉ䥹àÍÑÉÑÌÐÀäÕ±Ð($íÉÑÕɹÌÄ¥´ÉÉäÝ¥Ñ ¡¥¡ÍС½Õ±µÕ±Ñ¥Á±Ì¥Ñ¡äÁÁÈѡ͵µ½Õ¹Ð½Ñ¥µÌ¤(%%9½Ð%ÍÉÉä ÀÌØíÉÉä¤Q¡¸IÑÕɸMÑÉÉ½È Ä°À°À¤(%1½°ÀÌØíÍѽMÑÈôÌäìÌäì(%½ÈÀÌØí¥
ôÀÌØí¥    ÍQ¼U  ½Õ¹ ÀÌØíÉÉ䤴Ä($$ÀÌØíÍѽMÑȵÀìôÀÌØíÉÉålÀÌØí¥

tµÀì
¡È Ĥ(%9áÐ(%1½°ÀÌØíÍ!½±°ÀÌØí¹!¥ ôÀ°ÀÌØí¹áÐôÀ(%½ÈÀÌØí¥
ôÀÌØí¥    ÍQ¼U  ½Õ¹ ÀÌØíÉÉ䤴Ä($%MÑÉ¥¹IÁ± ÀÌØíÍѽMÑȰMÑÉ¥¹ ÀÌØíÉÉålÀÌØí¥

t¤°ÌäìÌäì¤($$ÀÌØí¹áÐôáѹ($%%ÀÌØí¹áÐÐìôÀÌØí¹!¥ ¹9½Ð|($$$%MÑÉ¥¹%¹MÑÈ¡
¡È ĤµÀìÀÌØíÍ!½±°
¡È ĤµÀìÀÌØíÉÉålÀÌØí¥

tµÀì
¡È Ĥ°Ä¤Q¡¸($$%%ÀÌØí¹áÐôÀÌØí¹!¥ Q¡¸($$$$ÀÌØíÍ!½±µÀìôÀÌØíÉÉålÀÌØí¥

tµÀì
¡È Ĥ($$%±Í($$$$ÀÌØíÍ!½±ôÀÌØíÉÉålÀÌØí¥

tµÀì
¡È Ĥ($$%¹%($$$ÀÌØí¹!¥ ôÀÌØí¹áÐ($%¹%(%9áÐ(%%ÀÌØíÍ!½±Q¡¸IÑÕɸMÑÉ¥¹MÁ±¥Ð¡MÑÉ¥¹QÉ¥µI¥¡Ð ÀÌØíÍ!½±°Ä¤°
¡È Ĥ¤(%IÑÕɸMÑÉÉ½È È°À°À¤)¹Õ¹

Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer.

  • Moderators
Posted

Here's another way showing it returning a 2 dim array [0] has the item that was found the most (could be multiple) and [1] holds the number of times it was found

Dim $aNum[11] = [1,3,8,2,4,6,2,2,1,1]
$Max = _ArrayReturnMax($aNum)
_ArrayDisplay2D($Max, '')
Func _ArrayReturnMax($aArray, $iBase = 0)
    ;$iBase Array index starts at 0 by default
    ;returns a 2 dim array with [0] holds item found [1] number of times
    If Not IsArray($aArray) Then Return SetError(1, 0, 0)
    Local $sAtoStr = ''
    For $iCC = $iBase To UBound($aArray) - 1
        $sAtoStr &= $aArray[$iCC] & Chr(1)
    Next
    Local $nHigh = 0, $nExt = 0, $aTemp[1][2], $iAdd, $sHold
    For $iCC = $iBase To UBound($aArray) - 1
        StringReplace($sAtoStr, String($aArray[$iCC]), '')
        $nExt = @extended
        If $nExt >= $nHigh And Not _
                StringInStr(Chr(1) & $sHold, Chr(1) & $aArray[$iCC] & Chr(1), 1) Then
            If $nExt = $nHigh Then
                $iAdd += 1
                ReDim $aTemp[$iAdd + 1][2]
                $aTemp[$iAdd][0] = $aArray[$iCC]
                $aTemp[$iAdd][1] = $nExt
                $sHold &= $aArray[$iCC] & Chr(1)
            Else
                $iAdd = 1
                ReDim $aTemp[$iAdd + 1][2]
                $aTemp[$iAdd][0] = $aArray[$iCC]
                $aTemp[$iAdd][1] = $nExt
                $sHold = $aArray[$iCC] & Chr(1)
            EndIf
            $nHigh = $nExt
        EndIf
    Next
    If $iAdd Then Return $aTemp
    Return SetError(2, 0, 0)
EndFunc

Func _ArrayDisplay2D($aArray, $sTitle = 'Array Display 2Dim', $iBase = 1, $sToConsole = 0)
    If Not IsArray($aArray) Then Return SetError(1, 0, 0)
    Local $sHold = 'Dimension 1 Has:  ' & UBound($aArray, 1) -1 & ' Element(s)' & @LF & _
            'Dimension 2 Has:  ' & UBound($aArray, 2) - 1 & ' Element(s)' & @LF & @LF
    For $iCC = $iBase To UBound($aArray, 1) - 1
        For $xCC = 0 To UBound($aArray, 2) - 1
            $sHold &= '[' & $iCC & '][' & $xCC & ']  = ' & $aArray[$iCC][$xCC] & @LF
        Next
    Next
    If $sToConsole Then Return ConsoleWrite(@LF & $sHold)
    Return MsgBox(262144, $sTitle, StringTrimRight($sHold, 1))
EndFunc

Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer.

  • 3 weeks later...
Posted

uhh, yea thanks smok n for reminding me I never replied to this thread... I lost the thread after about a day... and yea that did help, thanks!

If I hadn't said thank you yet, and you deserve it, than thank you...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...