Что нового

Выборка из чисел

nicotino

Новичок
Сообщения
30
Репутация
0
помогите сделать выборку из такого примера:
11-12-13
|
1-2-3-4-5-6-7-8-9-10
|
14-15-16

как сделать так чтобы шло по порядку с 16 например до 13
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
Re: Выборка

Предупреждение За нарушение правил форума (пункт Б.5):
Имя темы должно нести смысловую нагрузку (отражать суть вопроса/проблемы)
Правильно сформулированное название темы привлекает больше внимания, и шансы получить конкретный ответ увеличиваются.


Данные правила могут пополняться локальными правилами раздела.
Как правильно называть темы

"Выборка" - это неприемлемое название темы, переименуйте тему иначе она будет закрыта, а вам возможно будет выдан бан на несколько дней.

С уважением, ваш Модератор.
 
Автор
N

nicotino

Новичок
Сообщения
30
Репутация
0
Надеюсь так сойдет? Если нет то еще подумаю как назвать.

А по теме, хотя бы как это реализовать?
 

ggzgamer

Осваивающий
Сообщения
134
Репутация
23
Тема и вправду не понятная.
Код:
For $i=16 To 13 Step -1
;~ 	Ваш код
Next
 

ggzgamer

Осваивающий
Сообщения
134
Репутация
23
А так как надо?

Код:
Dim $aNumbers[7]=[16, 15, 14, 6, 11, 12, 13]
For $i=0 To UBound($aNumbers)-1 Step 1
	MsgBox(0, '', $aNumbers[$i])
Next
 
Автор
N

nicotino

Новичок
Сообщения
30
Репутация
0
нет, так тоже не как надо.
ладно представим дерево в виде массивов

Код:
Dim $myArray1[4]=[6,11,12,13]
Dim $myArray2[10]=[1,2,3,4,5,6,7,8,9,10]
Dim $myArray3[4]=[6,14,15,16]


теперь "манипулируя" этими массивами дожен получиться
Код:
$newArray[7]=[16, 15, 14, 6, 11, 12, 13]


вобщем начальная точка 16 конечная 13, перескакивать не должны, как же еще обяснить? начальная и конечная точка могут меняться.
 

ggzgamer

Осваивающий
Сообщения
134
Репутация
23
Мутная постановка задачи какая-то.
Для работы с массивами должна подойти стандартная библиотека http://autoit-script.ru/autoit3_docs/libfunctions/array%20management.htm
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
2 nicotino... вопрос: а почему должно начинаться с 16 ??? Типа максимальное число ? Почему не от 1 ???

Объясни принцип что от куда и куда...
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
чтобы не морочить голову добавил слева от "1" узел "0".
Код:
#Include <Array.au3>

Const $N = 17
Dim $GrafLink[$N][$N] = [ _
[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], _
[1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0], _
[0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0], _
[0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0], _
[0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0], _
[0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0], _
[0,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0], _
[0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0], _
[0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0], _
[0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0], _
[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0], _
[0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0], _
[0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0], _
[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0], _
[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0], _
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1], _
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0]]

$start = 16
$finish = 13

$planka = _budmo(String($start),$finish)

MsgBox(0, "путь", "от " & $start & " до " & $finish & " путь " & $planka)

Func _budmo($way, $go_to)

	$way_array = StringSplit($way, ",", 2)
	If $way_array[UBound($way_array)-1] = $go_to Then Return $way
	$Res = ""
	For $i=0 to $N-1
		If $Res <> "" Then ExitLoop
		If _ArraySearch($way_array, $i) <> -1 Then ContinueLoop
		If $GrafLink[$way_array[UBound($way_array)-1]][$i] = 1 Then $Res = _budmo($way & "," & $i, $go_to)
	Next

	Return $Res
EndFunc


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

Поизвращался. Получилось без "0" и без громоздкой матрицы переходов.
Код:
#Include <Array.au3>

Dim $papiroska[17][17] = [[0], [1,2],[2,1,3],[2,2,4],[2,3,5],[2,4,6],[4,5,7,11,14],[2,6,8],[2,7,9],[2,8,10],[1,9],[2,6,12],[2,11,13],[1,12],[2,6,15],[2,14,16],[1,15]]

$start = 16
$finish = 13

$kaplya_necotina = _zatyazhka(String($start),$finish)

MsgBox(0, "путь", "от " & $start & " до " & $finish & " путь " & $kaplya_necotina )

Func _zatyazhka($way, $go_to)

	$way_array = StringSplit($way, ",", 2)
	$poslednya_papiroska = $way_array[UBound($way_array)-1]
	If $poslednya_papiroska = $go_to Then Return $way
	$Res = ""

	For $i=1 to $papiroska[$poslednya_papiroska][0]
		If $Res <> "" Then ExitLoop
		$pyyyh = $papiroska[$poslednya_papiroska][$i]
		If _ArraySearch($way_array, $pyyyh) <> -1 Then ContinueLoop
		$Res = _zatyazhka($way & "," & $pyyyh, $go_to)
	Next

	Return $Res
EndFunc
 
Автор
N

nicotino

Новичок
Сообщения
30
Репутация
0
C2H5OH, "ну ты прям прелесть"(цэ)
если не сложно можешь прокоментить код, чтобы было ясно что к чему?

OffTopic:
странно что в переменных выпивки не нашлось :scratch:
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Кхе, кхе.
Начинаем с основ: вешаем на стенку портрет Вирта и под ним краской пишем лозунг «алгоритмы + структуры данных = программы».

Дальше смотрим на картинку
11-12-13
|
1-2-3-4-5-6-7-8-9-10
|
14-15-16
и думаем каким образом в скрипте будут представлены эти данные. :scratch:
Очевидно, что это обычный граф, состоящий из вершин и рёбер. Первое что приходит в голову – матрица рёбер: каждой из вершин графа в матрице соответствует строка, в которой отмечено наличие ребра - 1, отсутствие ребра – 0.
Код:
Dim $GrafLink[$N][$N] = [ _
[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], _
[1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0], _
[0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0], _
[0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0], _
[0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0], _
[0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0], _
[0,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0], _
[0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0], _
[0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0], _
[0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0], _
[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0], _
[0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0], _
[0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0], _
[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0], _
[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0], _
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1], _
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0]]
Например: из 2-ой вершины есть переходы в 1-ую и в 3-ю, в остальные нет.
Недостатком это представления является громоздкость – очень много лишней информации.
Идеальным был бы вариант задания графа в виде двумерного массива, в котором каждый элемент перечисляет только те вершины, куда есть переход из данной вершины.
Код:
Dim $papiroska[17][17] = [[0],[2],[1,3],[2,4],[3,5],[4,6],[5,7,11,14],[6,8],[7,9],[8,10],[9],[6,12],[11,13],[12],[6,15],[14,16],[15]]
Однако у меня не получилось взять размерность строки двумерного массива
Код:
UBound($papiroska[$i])
поэтому каждую строку пришлось дополнить нулевым элементом – количеством рёбер выходящих из данной вершины.
Код:
Dim $papiroska[17][17] = [[0], [1,2],[2,1,3],[2,2,4],[2,3,5],[2,4,6],[4,5,7,11,14],[2,6,8],[2,7,9],[2,8,10],[1,9],[2,6,12],[2,11,13],[1,12],[2,6,15],[2,14,16],[1,15]]

Со структурой разобрались, переходим к алгоритмам.
Каждый студент знает, что задача поиска пути в графе решается методом перебора. А для перебора, естественно, лучше всего подходит рекурсия.
Тут всё просто. Передаём в функцию уже пройденный путь (строка, состоящая из пройденных вершин, разделённых запятыми), добавляем к нему допустимые варианты переходов и делаем рекурсивные вызовы. Пока в конце пути не окажется пункт назначения или пока не окажется, что допустимых вариантов перехода больше нет.
Код:
Func _zatyazhka($way, $go_to)
	$way_array = StringSplit($way, ",", 2)	; разбить пройденный путь на вершины
	$poslednya_papiroska = $way_array[UBound($way_array)-1] ; взять последнюю пройденную вершину
	If $poslednya_papiroska = $go_to Then Return $way ; если последняя пройденная вершина = пункт назначения, то ура!
	$Res = ""
	For $i=1 to $papiroska[$poslednya_papiroska][0]  ; перебираем возможные переходы из последней вершины
		If $Res <> "" Then ExitLoop  ; если в процессе перебора результат уже найден, то прервать перебор вариантов
		$pyyyh = $papiroska[$poslednya_papiroska][$i] ; перебираем возможные переходы из последней вершины
		If _ArraySearch($way_array, $pyyyh) <> -1 Then ContinueLoop ; если переход на вершину, которая уже есть в пройденном пути, то пропускаем такой вариант
		$Res = _zatyazhka($way & "," & $pyyyh, $go_to) ; Р Е К У Р С И Я
	Next
	Return $Res
EndFunc

странно что в переменных выпивки не нашлось
Есть такой старый анекдот
OffTopic:
Приезжает nicotino в Украину. Его встречают по старой славянской традиции :beer:
На следующий день nicotino с бодуна просыпается и говорит:
- Не знаю кто такой "Будьмо", но больше я с ним пить не буду! :stars:
 
Автор
N

nicotino

Новичок
Сообщения
30
Репутация
0
clapping.gif
 
Верх