Vindicator Posted November 7, 2006 Share Posted November 7, 2006 (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: expandcollapse popupDim $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 November 7, 2006 by P a R a D o X If I hadn't said thank you yet, and you deserve it, than thank you... Link to comment Share on other sites More sharing options...
Vindicator Posted November 7, 2006 Author Share Posted November 7, 2006 any ideas? If I hadn't said thank you yet, and you deserve it, than thank you... Link to comment Share on other sites More sharing options...
GaryFrost Posted November 7, 2006 Share Posted November 7, 2006 (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 November 7, 2006 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. Link to comment Share on other sites More sharing options...
Moderators SmOke_N Posted November 7, 2006 Moderators Share Posted November 7, 2006 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. Link to comment Share on other sites More sharing options...
Moderators SmOke_N Posted November 7, 2006 Moderators Share Posted November 7, 2006 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 foundexpandcollapse popupDim $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. Link to comment Share on other sites More sharing options...
Vindicator Posted November 24, 2006 Author Share Posted November 24, 2006 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... Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now