Что нового

[Массивы] Сортировка массива и получение диапазонов значений

lelik_keo

Новичок
Сообщения
31
Репутация
0
Здравствуйте!
пишу скрипт в версии Autoit v3.3.10.2
Описание:
Бьюсь над вопросом сортировки массива и не могу найти ничего похожего, помогите пожалуйста.
Есть два массива (числа всегда разные и определяются самостоятельно):
массив 1 = -3, 0, 4, 6, 15, 35
массив 2 = -6, -1, 3, 4, 15, 22, 13

также есть массивы, которые определяют диапазон, например:
М3 = -4
М4 = 18

Нужно, чтоб программа выделяла участки:
участок 1 от -4 до -3
участок 2 от -3 до -1
участок 3 от -1 до 0
участок 4 от 0 до 3
......
участок n от 15 до 18

и главное чтоб участки были строго в пределах от М3 до М4
Примечание: значения, не попадающие в диапазон от М3 до М4, программа должна отсеивать.
Результат я представляю примерно так:
Массив 5 [участок 1]=-4
Массив 6 [участок 1]=-3
Массив 5 [участок 2]=-3
Массив 6 [участок 2]=-1
Массив 5 [участок 3]=-1
Массив 6 [участок 3]=-0
и т.д.

Заранее всем СПАСИБО))))
 

DarWiM

Продвинутый
Сообщения
527
Репутация
90
lelik_keo
Простите, но похожие задачки школьники на информатике решают, когда проходят массивы :smile:
Я к тому, что это элементарно... А в этом разделе нужно показывать, чего Вы достигли сами и только потом помощь просить.
 
Автор
L

lelik_keo

Новичок
Сообщения
31
Репутация
0
DarWiM сказал(а):
lelik_keo
Простите, но похожие задачки школьники на информатике решают, когда проходят массивы :smile:
Я к тому, что это элементарно... А в этом разделе нужно показывать, чего Вы достигли сами и только потом помощь просить.


К сожалению у меня не такая была прогрессивная школа, да и давно она была, и написал я в раздел для новичков. А писать как я получил массив со значениями, я смысла не вижу, мне нужен только алгоритм решения проблемы.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
Автор
L

lelik_keo

Новичок
Сообщения
31
Репутация
0
Автор
L

lelik_keo

Новичок
Сообщения
31
Репутация
0
DarWiM сказал(а):
lelik_keo
Кажется Вам должно помочь это Array Management

Пользуясь Вашей ссылкой, я почти расписал всю программу, но по непонятным мне причинам не выполняется функция сравнения массивов. Подскажите пожалуйста, что не так?))))

Код:
#include <Array.au3>
$i=6
$k=$i
$s=1
Global $1Array[$i] = [3,0,4,6,-15,35]
Global $2Array[6] = [-6,-1,3,4,15,22]

Global $3Array [$s] = [-2]
Global $4Array [$s] = [18]

Global $5Array [$s]
Global $6Array [$s]

_ArrayConcatenate($1Array, $2Array)
_ArraySort($1Array)
 _1()
 
func _1()
Global $max[$s], $min[$s]
_ArrayAdd($max,  _ArrayMax($1Array, 1, 1))
_ArrayAdd($min,  _ArrayMin($1Array, 1, 0))
_ArrayDelete($max, 0)
_ArrayDelete($min, 0)
_ArrayDisplay($max, "$avArray в виде 2D массива")
_ArrayDisplay($min, "$avArray в виде 2D массива")
_ArrayDisplay($3Array, "$avArray в виде 2D массива")
_2()
EndFunc

func _2()
If $3Array[$s] > $min[$s] Then
   _ArrayDelete($1Array, 0)
   MsgBox(4160, "Информация", "$3Array > $min" )
    _1()
ElseIf $3Array < $min Then
   MsgBox(4160, "Информация", "$3Array < $min" )
   _ArrayConcatenate($1Array, $3Array)
_ArraySort($1Array)
 _3()
EndIf

EndFunc

func _3()
_ArrayDisplay($1Array, "$avArray в виде 2D массива")

_ArrayAdd($5Array,  _ArrayMin($1Array, 1, 0))
_ArrayDisplay($5Array, "$avArray в виде 2D массива")
_ArrayDelete($1Array, 0)
$i=$i-1
_ArrayDisplay($1Array, "$avArray в виде 2D массива")
MsgBox(4160, "Информация", "i= " & $i)
MsgBox(4160, "Информация", "s= " & $s)
For $s=1 To $k+3
If $i>1 Then
   _ArrayAdd($5Array,  _ArrayMin($1Array, 1, 0))
   _ArrayAdd($6Array,  _ArrayMin($1Array, 1, 0))
   _ArrayDisplay($5Array, "$avArray в виде 2D массива")
   _ArrayDisplay($6Array, "$avArray в виде 2D массива")
_ArrayDelete($1Array, 0)
$i=$i-1
_ArrayDisplay($1Array, "$avArray в виде 2D массива")
MsgBox(4160, "Информация", "i= " & $i)
MsgBox(4160, "Информация", "s= " & $s)

ElseIf $i=1 Then
    _ArrayAdd($6Array,  _ArrayMin($1Array, 1, 0))
   _ArrayDisplay($5Array, "$avArray в виде 2D массива")
   _ArrayDisplay($6Array, "$avArray в виде 2D массива")
_ArrayDelete($1Array, 0)
$i=$i-1
_ArrayDisplay($1Array, "$avArray в виде 2D массива")
MsgBox(4160, "Информация", "i= " & $i)
MsgBox(4160, "Информация", "s= " & $s)

EndIf
$s=$s+1
Next
EndFunc
 

Shu_m

Новичок
Сообщения
1
Репутация
0
Скорее всего уже не актуально, но выглядеть будет как то так:

Код:
#include <Array.au3>

Global $Array_1[6] = [-3, 0, 4, 6, 15, 35]
Global $Array_2[7] = [-6, -1, 3, 4, 15, 22, 13]

$dia_min = -4
$dia_max = 18

Global $Land_1[0];
Global $Land_2[0];


_ArrayConcatenate($Array_1, $Array_2)
_ArraySort($Array_1)
_Area($Array_1, $dia_min, $dia_max)
_2()
func _Area($arr, $min, $max)
  $j = 0;
  While ($j<UBound($Arr)-1) and ($arr[$j]<=$max)

    if $arr[$j]>$min Then
    _ArrayAdd($Land_1,$min)
	_ArrayAdd($Land_2,$Arr[$j])
	$min = $Arr[$j]
   EndIf
ConsoleWrite($Arr[$j]& @CRLF)
   $j = $j+1
 WEnd
   if $Arr[$j-1]<>$max Then
   _ArrayAdd($Land_1,$Arr[$j-1])
   _ArrayAdd($Land_2,$max)
EndIf

EndFunc

func _2()
 for $j = 0 To UBound($Land_1)-1
ConsoleWrite ("("& $Land_1[$j]& " , "& $Land_2[$j]& ") : ")
	Next
EndFunc
 
Автор
L

lelik_keo

Новичок
Сообщения
31
Репутация
0
Shu_m сказал(а):
Скорее всего уже не актуально, но выглядеть будет как то так:

Код:
#include <Array.au3>

Global $Array_1[6] = [-3, 0, 4, 6, 15, 35]
Global $Array_2[7] = [-6, -1, 3, 4, 15, 22, 13]

$dia_min = -4
$dia_max = 18

Global $Land_1[0];
Global $Land_2[0];


_ArrayConcatenate($Array_1, $Array_2)
_ArraySort($Array_1)
_Area($Array_1, $dia_min, $dia_max)
_2()
func _Area($arr, $min, $max)
  $j = 0;
  While ($j<UBound($Arr)-1) and ($arr[$j]<=$max)

    if $arr[$j]>$min Then
    _ArrayAdd($Land_1,$min)
	_ArrayAdd($Land_2,$Arr[$j])
	$min = $Arr[$j]
   EndIf
ConsoleWrite($Arr[$j]& @CRLF)
   $j = $j+1
 WEnd
   if $Arr[$j-1]<>$max Then
   _ArrayAdd($Land_1,$Arr[$j-1])
   _ArrayAdd($Land_2,$max)
EndIf

EndFunc

func _2()
 for $j = 0 To UBound($Land_1)-1
ConsoleWrite ("("& $Land_1[$j]& " , "& $Land_2[$j]& ") : ")
	Next
EndFunc

Спасибо большое!!!Ваш вариант гораздо проще, чем тот, который я сам придумал!!!
 
Верх