Что нового

[Найти ошибку] Функция поиска наименьшего значения в массиве координат

iamOmg

Новичок
Сообщения
97
Репутация
2
Есть некий массив, в нулевой строчке по оси X в каждом чётном значении Y есть число, нужно среди них найти наименьшее. Обнаружил что при таком условии функция выдаёт ошибку. Помогите найти её

Код:
#include <Array.au3>
Global $dddddd[10][16] = [[1, "", "", "", "", "", "", "", 5, "", "", "", 5, "", "", ""], _
                   [14434, 14434, 13434, 14434, 134434, 14434, 34341, 14434, 14343, 14434, 14343, 14434, 134434, 14434, 43431, 14434], _
			       [14434, 14434, 13434, 14434, 134434, 14434, 34341, 14434, 14343, 14434, 14343, 14434, 134434, 14434, 43431, 14434], _
				   [14434, 14434, 13434, 14434, 134434, 14434, 34341, 14434, 14343, 14434, 14343, 14434, 134434, 14434, 43431, 14434], _
				   [14434, 14434, 13434, 14434, 134434, 14434, 34341, 14434, 14343, 14434, 14343, 14434, 134434, 14434, 43431, 14434], _
				   [14434, 14434, 13434, 14434, 134434, 14434, 34341, 14434, 14343, 14434, 14343, 14434, 134434, 14434, 43431, 14434], _
				   [14434, 14434, 13434, 14434, 134434, 14434, 34341, 14434, 14343, 14434, 14343, 14434, 134434, 14434, 43431, 14434], _
				   [14434, 14434, 13434, 14434, 134434, 14434, 34341, 14434, 14343, 14434, 14343, 14434, 134434, 14434, 43431, 14434], _
				   [14434, 14434, 13434, 14434, 134434, 14434, 34341, 14434, 14343, 14434, 14343, 14434, 134434, 14434, 43431, 14434], _
				   [14434, 14434, 13434, 14434, 134434, 14434, 34341, 14434, 14343, 14434, 14343, 14434, 134434, 14434, 43431, 14434]]



_ArrayDisplay($dddddd)
$fffffff = _Poisk_grafa_s_min_stepenju_vershin($dddddd)
If $fffffff = 00000000000 Then
	MsgBox(0, "", "не нашли")

Else
	_ArrayDisplay($fffffff)
EndIf
Func _Poisk_grafa_s_min_stepenju_vershin(ByRef $Massiv_s_koordinatami)
	Local $Min_Stepen_vershin = 999999999
	Local $Nomer_stolba[2]
	Local $razmer_massiva = UBound($Massiv_s_koordinatami, 2)-2
	For $s1 = 0 To $razmer_massiva Step 2
		$Stepen_vershin = $Massiv_s_koordinatami[0][$s1]
		If $Stepen_vershin <= $Min_Stepen_vershin And $Stepen_vershin <> "" Then
			$Min_Stepen_vershin = $Massiv_s_koordinatami[0][$s1]
			$Nomer_stolba[0] = $s1
			$Nomer_stolba[1] = $Min_Stepen_vershin
		EndIf
	Next
	If $Nomer_stolba[0] = "" Then
		Return 00000000000
	Else
	Return $Nomer_stolba
	EndIf
EndFunc
 

Prog

Осваивающий
Сообщения
335
Репутация
31
iamOmg [url_ex=javascript:qq.OpenLink('http://autoit-script.ru/index.php?topic=20575.msg121575#msg121575')][?][/url_ex]
есть число, нужно среди них найти наименьшее.
Тогда зачем проверять что в массив на наличие строки?
If $Stepen_vershin <= $Min_Stepen_vershin And $Stepen_vershin <> "" Then
Числа и строки это не одно и тоже.
 
АТ
iamOmg

iamOmg

Новичок
Сообщения
97
Репутация
2
не понял, как правильно избежать пустых значений тогда?
 

Prog

Осваивающий
Сообщения
335
Репутация
31
Что подразумевается под пустым значением? Отсутствие строки? Тогда зачем сравнивать числа с строковом виде? Это будет не сравнение чисел, а сравнение строк.
В массиве точно строки?
 
АТ
iamOmg

iamOmg

Новичок
Сообщения
97
Репутация
2
нет, сравнивает не всю строку, а только ячейку
 

inververs

AutoIT Гуру
Сообщения
2 135
Репутация
462
Код:
Local $y = -1, $min = ''
For $i = 0 To UBound($dddddd, 2) - 1 Step 2
	$value = $dddddd[0][$i]
	If $value == '' Then ContinueLoop
	If $min == '' Then $min = $value
	If $value <= $min Then
		$min = $value
		$y = $i
	EndIf
Next
If $y = -1 Then
	MsgBox(0,0,'не найдено')
Else
	MsgBox(0,'Минимальное', 'Значение: ' & $min & @CRLF & 'Стобец: ' & $y)
EndIf
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
963
iamOmg [?]
нужно среди них найти наименьшее
Код:
#include <Array.au3>
Global $dddddd[10][16] = [[1, "", "", "", "", "", "", "", 5, "", "", "", 5, "", "", ""], _
                   [14434, 14434, 13434, 14434, 134434, 14434, 34341, 14434, 14343, 14434, 14343, 14434, 134434, 14434, 43431, 14434], _
                   [14434, 14434, 13434, 14434, 134434, 14434, 34341, 14434, 14343, 14434, 14343, 14434, 134434, 14434, 43431, 14434], _
                   [14434, 14434, 13434, 14434, 134434, 14434, 34341, 14434, 14343, 14434, 14343, 14434, 134434, 14434, 43431, 14434], _
                   [14434, 14434, 13434, 14434, 134434, 14434, 34341, 14434, 14343, 14434, 14343, 14434, 134434, 14434, 43431, 14434], _
                   [14434, 14434, 13434, 14434, 134434, 14434, 34341, 14434, 14343, 14434, 14343, 14434, 134434, 14434, 43431, 14434], _
                   [14434, 14434, 13434, 14434, 134434, 14434, 34341, 14434, 14343, 14434, 14343, 14434, 134434, 14434, 43431, 14434], _
                   [14434, 14434, 13434, 14434, 134434, 14434, 34341, 14434, 14343, 14434, 14343, 14434, 134434, 14434, 43431, 14434], _
                   [14434, 14434, 13434, 14434, 134434, 14434, 34341, 14434, 14343, 14434, 14343, 14434, 134434, 14434, 43431, 14434], _
                   [14434, 14434, 13434, 14434, 134434, 14434, 34341, 14434, 14343, 14434, 14343, 14434, 134434, 14434, 43431, 14434]]

Local $iMin[1][2]
Local $iMax[1][2]

For $x = 1 To UBound($dddddd, 1) -1
	For $y = 1 To UBound($dddddd, 2) -1
		If $dddddd[$x][$y] < $dddddd[$iMin[0][0]][$iMin[0][1]] Then
			$iMin[0][0] = $x
			$iMin[0][1] = $y
		EndIf
		If $dddddd[$x][$y] > $dddddd[$iMax[0][0]][$iMax[0][1]] Then
			$iMax[0][0] = $x
			$iMax[0][1] = $y
		EndIf
	Next
Next

ConsoleWrite(StringFormat('Минимум = %s\n', $dddddd[$iMin[0][0]][$iMin[0][1]]))
ConsoleWrite(StringFormat('Максимум = %s\n', $dddddd[$iMax[0][0]][$iMax[0][1]]))
 
АТ
iamOmg

iamOmg

Новичок
Сообщения
97
Репутация
2
Спасибо, заработало
 
Верх