Автокликер Clickermann :: Форум

Основной раздел => Общие вопросы => Topic started by: Skomopox on May 05, 2014, 03:19:25 AM

Title: Помощь в сравнении переменных!
Post by: Skomopox on May 05, 2014, 03:19:25 AM
Привет Всем! Кто может поделиться идеями, как можно сравнить переменные, да ещё в несколько строчек (необязательный параметр  :) ). 
Конкретный пример: есть, допустим, 21 переменная, выраженные в числах. Каждый цикл они разные. Как сравнить, что  5 из этих 21 самые большие. Спасибо!
Title: Re: Помощь в сравнении переменных!
Post by: Zets on May 05, 2014, 07:30:06 AM
Как корявенький вариант предложу так:
вводишь 5 дополнительных переменных.
Присваиваешь первую сравниваемую переменную первой доп. переменной.
И далее цикл: если следующая сравниваемая переменная больше чем текущая доп. переменная, то присваиваешь  ее значение доп. переменной.
Когда все переменные перебрал начинаешь новый цикл, только из него исключаешь переменную с максимальным значением.
И так далее.
Наверно не оч хорошо объяснил, но думаю идея понятна.
Возможно есть гораздо более красивый и правильный подход, но я хз как)
Так этот вариант наверно подойдет только для изначально известного количества переменных
Title: Re: Помощь в сравнении переменных!
Post by: Oraven on May 05, 2014, 01:24:36 PM
Code: (clickermann) [Select]
$c1=2
$c2=0
$c3=-10
$c4=0
$c5=0
$c6=1
$c7=0
$c8=6
$c9=2
$c10=34

$string=STRCONCAT($c1,":",$c2,":",$c3,":",$c4,":",$c5,":",$c6,":",$c7,":",$c8,":",$c9,":",$c10)

SUB(max_opred)
   $cut=$string
   $max=0
   WHILE(INT(STRPOS($cut,":"))!0)
      $num=INT(STRCUT2($cut,1,STRPOS($cut,":")-1))
      $cut=STRCUT2($cut,STRPOS($cut,":")+1,99999)
      IF($num > $max)
         $max=$num
      END_IF
   END_CYC
   IF(INT($cut) > $max)
      $max=INT($cut)
   END_IF
   IF(STRPOS($string,$max)=1)
      $string=STRREPLACE($string, STRCONCAT($max,":"), "")
   ELSE
      $string=STRREPLACE($string, STRCONCAT(":",$max), "")
   END_IF
END_SUB

max_opred()
$max1=$max
max_opred()
$max2=$max
max_opred()
$max3=$max
max_opred()
$max4=$max
max_opred()
$max5=$max

LOGWRITE ("max1= ",$max1,", max2= ",$max2,", max3= ",$max3,", max4= ",$max4,", max5= ",$max5)
HALT
Title: Re: Помощь в сравнении переменных!
Post by: Vint on May 05, 2014, 03:48:03 PM
А зачем строки? Массивы то уже есть. И хоть нет никаких функций работы с ними, всё равно, думаю быстрее будет.
Title: Re: Помощь в сравнении переменных!
Post by: Oraven on May 05, 2014, 06:47:40 PM
 
А зачем строки? Массивы то уже есть. И хоть нет никаких функций работы с ними, всё равно, думаю быстрее будет.

Так это твой скрипт еще с 4.7 версии, можно переделать но возиться лень  ;D
Title: Re: Помощь в сравнении переменных!
Post by: Vint on May 05, 2014, 08:04:18 PM
А зачем строки? Массивы то уже есть. И хоть нет никаких функций работы с ними, всё равно, думаю быстрее будет.

Так это твой скрипт еще с 4.7 версии, можно переделать но возиться лень  ;D
Таааак... 1:1
А я кинулся искать и не нашел.
Title: Re: Помощь в сравнении переменных!
Post by: Oraven on May 05, 2014, 08:11:12 PM
Таааак... 1:1
А я кинулся искать и не нашел.
http://crapware.aidf.org/forum/index.php?topic=187.msg1842#msg1842
Title: Re: Помощь в сравнении переменных!
Post by: Skomopox on May 06, 2014, 03:04:42 AM
Зетс. Я понял о чём ты. Я так и делаю, но оооочень геморно и длино.
Котэ спасибо за старый скрипт Игоря :) Я его попробовал сейчас, и почему-то одни нули выходят. Да не важно.
А вот предложение Игоря про массивы я бы рассмотрел :) Вычитывал про массивы здесь на форуме, что писал Джони, но видимо туговат я на подъём. Так и не понял что к чему. Но вот думал, что именно с ними как-то можно в "две строки" :) написать скрипт на сравнение. Если будет желание у кого, с интересом посмотрю :)
Чтобы если конкретней - то что мне подходит, например в старом скрипте Игоря, то что, как я понял, он должен просто показывать 5 максимальных переменных. А мне бы хотелось... ну как хотелось?! :) надо так... по сценарию... что происходит считывание переменной, и если она является одной из пяти, то происходит, такое-то действие, если нет, то идёт к следующей переменной и т.д. Как-то так. Спасибо :)
Title: Re: Помощь в сравнении переменных!
Post by: Vint on May 06, 2014, 08:18:41 AM
Опять не понятно. Почему такая привязка к одной переменной? почему нельзя переназначить другим и сравнивать уже их?
Может ты при объяснении упустил одну вещь понятную тебе, но не ясную другим.
Массивами в две строки не получится. По крайней мере пока. Нет функционала. Пока массивы введены в основном как хранилища координат для введения новых функций. Никаких команд обработки массивов: сортировки, вставки, удаления - нет. Только по индексу или в конец. Всё конечно можно реализовать и вручную, но "парой строк" это уже не обойдётся.
Title: Re: Помощь в сравнении переменных!
Post by: Skomopox on May 07, 2014, 04:39:26 AM
Ну, парой строк - это было в кавычках. Необязательно парой строк :) И в принципе, необязательна привязка к одной переменной. Просто хотел, как проще :)
Title: Re: Помощь в сравнении переменных!
Post by: Vint on May 07, 2014, 07:46:57 AM
...Я его попробовал сейчас, и почему-то одни нули выходят. ...
Я сейчас попробовал, всё нормально. И на 4.9 и на 4.10

...надо так... по сценарию... что происходит считывание переменной, и если она является одной из пяти, то происходит, такое-то действие, если нет, то идёт к следующей переменной и т.д. ...
А проблема то в чём? Определяешь кодом выше максимальные. Потом в своём цикле считываешь/перебираешь переменные и сравниваешь с максимумами  :)
Code: (clickermann) [Select]
IF(($var = $max1) | ($var = $max2) | ($var = $max3) | ($var = $max4) | ($var = $max5))
   // $var одна из 5 максимальных
   // делаем что нужно
ELSE
   // $var не входит в максимум
END_IF