Что нового

[Массивы] поиск, и сравнение числа

Kasol

Новичок
Сообщения
27
Репутация
0
Доброго времени суток.Без вашей помощи не куда!
Есть двумерный массив.
Нужно найти волка в массиве..Но массив всегда меняется в размере,а волк всегда в нём присутствует.
[0]|Имя Животного|Осталось|Болеют|Вес|Корм/ед|Карантин|Здоровы.

Код:
$aTest[7][7] = [[Слон,36,9,3000,95,-,10],_
                [Лис,16,4,40,95,"-",5],_
                [Собака,6,289,15,95,"-",1],_
                [Кот,1006,289,3,95,"-",3],_
                [Волк,556,289,30,43,"-",12]]

Т.е на выходе должно получится лишь число.Из данного примера 12
Код:
$aTest[5][7] = [[Слон,36,9,3000,95,"-",10],_
                [Лис,16,4,40,95,"-",5],_
                [Волк,6,20,30,95,"-",100],_
                [Кот,1006,289,3,95,"-",3]]

Тут 20
Каким способом можно найти Волка, с наименьшем числом больных или здоровых.
Запутал вас? :stars:
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Начнём с того, что все строки в массиве пишутся в кавычках!
Код:
$aTest[7][7] = [["Слон",36,9,3000,95,"-",10],_
                ["Лис",16,4,40,95,"-",5],_
                ["Собака",6,289,15,95,"-",1],_
                ["Кот",1006,289,3,95,"-",3],_
                ["Волк",556,289,30,43,"-",12]]


Kasol [?]
Нужно найти волка в массиве
Код:
Local $aTest[5][7] = [["Слон",36,9,3000,95,"-",10], _
                ["Лис",16,4,40,95,"-",5], _
                ["Собака",6,289,15,95,"-",1], _
                ["Кот",1006,289,3,95,"-",3], _
                ["Волк",556,289,30,43,"-",12]]

For $i = 0 To UBound($aTest) -1
   If $aTest[$i][0] == 'Волк' Then ConsoleWrite(StringFormat("| %s | %s | %s | %s | %s | %s | %s |\r\n", _
															   $aTest[$i][0],  $aTest[$i][1],  $aTest[$i][2], _
															   $aTest[$i][3],  $aTest[$i][4],  $aTest[$i][5], _
															   $aTest[$i][6]))
Next


Дальше я честно говоря смутно понимаю вашу задачу.


Добавлено:
Сообщение автоматически объединено:

Kasol [?]
с наименьшем числом больных или здоровых
Что является критерием истины "Здоровы" и "Болеют" Const $iMin = ???


Добавлено:
Сообщение автоматически объединено:

Если из списка Волков, берём с наименьшим показателем, если Волк один то... Смотрим выше.
 
Автор
K

Kasol

Новичок
Сообщения
27
Репутация
0
Garrett Извиняюсь! Не углядел,поправил.
Код:
Local $aTest[5][7] = [["Слон",36,9,3000,95,"-",10], _
                ["Лис",16,4,40,95,"-",5], _
                ["Собака",6,289,15,95,"-",1], _
                ["Кот",1006,289,3,95,"-",3], _
                ["Волк",556,289,30,43,"-",12]]

For $i = 0 To UBound($aTest) -1
   If $aTest[$i][0] == 'Волк' Then ConsoleWrite(StringFormat("| %s | %s | %s | %s | %s | %s | %s |\r\n", _
                                                               $aTest[$i][0],  $aTest[$i][1],  $aTest[$i][2], _
                                                               $aTest[$i][3],  $aTest[$i][4],  $aTest[$i][5], _
                                                               $aTest[$i][6]))
Next

Да, но только мне нужно было найти число больных и здоровых..Число больных 289. а здоровых 12
т.е потом эти числа надо будет сравнивать. если больных будет больше чем здоровых,то вывести число здоровых.
дальше будет другая операция с этим числом.
Но если Больных 20 а здоровых 200. Вывести число Больных.Больных меньше чем здоровых. во как :shok:
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Оно?
Код:
Local $aTest1[5][7] = [["Слон",36,9,3000,95,"-",10], _
					  ["Лис",16,4,40,95,"-",5], _
					  ["Собака",6,289,15,95,"-",1], _
					  ["Кот",1006,289,3,95,"-",3], _
					  ["Волк",556,289,30,43,"-",12]]

Local $aTest2[4][7] = [["Слон",36,9,3000,95,"-",10], _
					  ["Лис",16,4,40,95,"-",5], _
					  ["Волк",6,20,30,95,"-",100], _
					  ["Кот",1006,289,3,95,"-",3]]

Local $aFull[2] = [$aTest1, $aTest2]

For $j = 0 To UBound($aFull) -1
   $aTest = $aFull[$j]
   For $i = 0 To UBound($aTest) -1
	  If $aTest[$i][0] == 'Волк' Then
		 $iSearch = $aTest[$i][2]
		 If $iSearch > $aTest[$i][6] Then
			ConsoleWrite(StringFormat("Здоровых: %s\r\n", $aTest[$i][6]))
		 Else
			ConsoleWrite(StringFormat("Больных: %s\r\n", $aTest[$i][2]))
		 EndIf
	  EndIf
   Next
Next
 
Автор
K

Kasol

Новичок
Сообщения
27
Репутация
0
Garrett Оно :laugh: Большое вам спасибо.. :beer: ... И,что-бы не создавать кучу тем.Хотел-бы задать один вопрос, из вашего приведённого
когда то примера



Добавлено:
Сообщение автоматически объединено:

Ваш пример
Код:
Local $aTest[11][3] = [['A', 'B', 'C' ], _
                      ['http://one.link', 100, 500 ], ['http://two.link', 80, 800 ], _
                      ['http://three.link', 210, 200 ],  ['http://four.link', 300, 800 ], _
                      ['http://five.link', 321, 800 ], ['http://six.link', 250, 800 ], _
                      ['http://seven.link', 250, 100 ], ['http://eight.link', 299, 800 ], _
                      ['http://nine.link', 101, 1000 ], ['http://ten.link', 233, 800 ]]

Local $iPrice = 800
Local $iMax = 0

For $i = 1 To UBound($aTest)-1
   If $aTest[$i][2] = $iPrice Then
      If $iMax < $aTest[$i][1] Then
            $iMax = $aTest[$i][1]
            $iLink = $i
      EndIf
   EndIf
Next

Долго искал,нашёл тут его на форуме.Но вот незадача в том! Что переход у меня всегда по первой ссылке осуществляться.
Local $iPrice = 800
Local $iMax = 0
Они просто игнорируются..Даже если я туда поставлю не мысленные значения чисел..всё равно выдаёт первую ссылку..даже не по параметрам
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Kasol [?]
Но вот незадача в том! Что переход у меня всегда по первой ссылке осуществляться.
В той теме автор поставил такие условия:
Floopers [?]
Как можно сделать так,что-бы по нахождению нужного значения "C" осуществлялся переход по ссылки "A"..Но по скольку в Значении "C" может появиться от 10 сходств то,нужно сравнить результат по наибольшему количеству "B". И перейти по ссылки "A"
 
Автор
K

Kasol

Новичок
Сообщения
27
Репутация
0
Ага,точно..Ещё раз большое спасибо за ваши дельные ответы.. :ok:
И хотелось-бы узнать,за что отвечает
Код:
$aFull[2]
не совсем до конца понял.Если вас не затруднит,не могли бы вы прокомментировать свой пример
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Kasol [?]
за что отвечает
$aFull[2] - это массив ваших массивов.
$iSearch - переменная кол. больных (на случай ели нужно сохранить, не перебирая массив заново)
Можно так:
Код:
;~ 		 $iSearch = $aTest[$i][2]
		 If $aTest[$i][2] > $aTest[$i][6] Then
 
Автор
K

Kasol

Новичок
Сообщения
27
Репутация
0
и В вашем примере.Расчёт ведётся из двух массивов..А в моём примере это один и тот-же массив..Просто привёл второй для наглядности его изменения....
Код:
Local $aFull[2] = [$aTest1, $aTest2]

For $j = 0 To UBound($aFull) -1
   $aTest = $aFull[$j]
   For $i = 0 To UBound($aTest) -1
      If $aTest[$i][0] == 'Волк' Then
         $iSearch = $aTest[$i][2]
         If $iSearch > $aTest[$i][6] Then
            ConsoleWrite(StringFormat("Здоровых: %s\r\n", $aTest[$i][6]))
         Else
            ConsoleWrite(StringFormat("Больных: %s\r\n", $aTest[$i][2]))
         EndIf
      EndIf
   Next
Next

Сидел крутил,пытался вытащить Здоровых и Больных из одного массива..Но,что-то идёт не по плану ;D Выдаёт только больных,ну такой результат идёт от недопонимания
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Kasol [?]
Просто привёл второй для наглядности его изменения....
Есть массив данных статистики о животных:
Код:
Local $aTest[5][7] = [["Слон",36,9,3000,95,"-",10], _
					  ["Лис",16,4,40,95,"-",5], _
					  ["Собака",6,289,15,95,"-",1], _
					  ["Кот",1006,289,3,95,"-",3], _
					  ["Волк",556,289,30,43,"-",12]]

В нём присутствует "Волк":
Код:
"Волк", 556, 289, 30, 43, "-", 12
Где 289 - цифра больных, 12 - цифра здоровых.
Цифры в массиве постоянно меняются, в зависимости от статистических данных. И могут быть следующими:
Код:
"Волк", 6, 20, 30, 95, "-", 100
Где 20 - цифра больных, 100 - цифра здоровых.

Нужно выводить данные о волках по следующим условиям:
Код:
больных < здоровых: выводим больных
больных > здоровых: выводим здоровых

Вам понятно? Мне да.
Мне одно непонятно, почему нельзя сразу чётко написать:
сколько вешать в граммах

Сидел крутил,пытался вытащить Здоровых и Больных из одного массива
Я же дал вам направление.
Код:
; Пример 1
;~ Local $aTest[5][7] = [["Слон",36,9,3000,95,"-",10], _
;~ 					  ["Лис",16,4,40,95,"-",5], _
;~ 					  ["Собака",6,289,15,95,"-",1], _
;~ 					  ["Кот",1006,289,3,95,"-",3], _
;~ 					  ["Волк",556,289,30,43,"-",12]]
; Пример 2
;~ Local $aTest[4][7] = [["Слон",36,9,3000,95,"-",10], _
;~ 					  ["Лис",16,4,40,95,"-",5], _
;~ 					  ["Волк",6,20,30,95,"-",100], _
;~ 					  ["Кот",1006,289,3,95,"-",3]]
; Пример 3
Local $aTest[16][7] = [["Слон",36,9,3000,95,"-",10], _
					  ["Лис",16,4,40,95,"-",5], _
					  ["Собака",6,289,15,95,"-",1], _
					  ["Кот",1006,289,3,95,"-",3], _
					  ["Волк",556,125,30,43,"-",35], _
					  ["Слон",36,9,3000,95,"-",10], _
					  ["Лис",16,4,40,95,"-",5], _
					  ["Волк",6,20,30,95,"-",100], _
					  ["Лис",16,4,40,95,"-",5], _
					  ["Собака",6,289,15,95,"-",1], _
					  ["Кот",1006,289,3,95,"-",3], _
					  ["Волк",556,289,30,43,"-",12], _
					  ["Слон",36,9,3000,95,"-",10], _
					  ["Лис",16,4,40,95,"-",5], _
					  ["Волк",6,25,30,95,"-",200], _
					  ["Кот",1006,289,3,95,"-",3]]

For $i = 0 To UBound($aTest) -1
   If $aTest[$i][0] == 'Волк' Then
	  If $aTest[$i][2] > $aTest[$i][6] Then
		 ConsoleWrite(StringFormat("Здоровых: %s\r\n", $aTest[$i][6]))
	  Else
		 ConsoleWrite(StringFormat("Больных: %s\r\n", $aTest[$i][2]))
	  EndIf
   EndIf
Next
 
Автор
K

Kasol

Новичок
Сообщения
27
Репутация
0
Garrett Да спасибо! После того как понял что это
$aFull[2] - это массив ваших массивов.
$iSearch - переменная кол. больных (на случай ели нужно сохранить, не перебирая массив заново)
То всё сделал как запланировал.Ещё раз большое вам спасибо :beer:
 
Верх