Author Topic: Помощь в сравнении переменных!  (Read 5603 times)

0 Members and 1 Guest are viewing this topic.

Skomopox

  • Освоившийся
  • **
  • Posts: 56
    • View Profile
Помощь в сравнении переменных!
« on: May 05, 2014, 03:19:25 AM »
Привет Всем! Кто может поделиться идеями, как можно сравнить переменные, да ещё в несколько строчек (необязательный параметр  :) ). 
Конкретный пример: есть, допустим, 21 переменная, выраженные в числах. Каждый цикл они разные. Как сравнить, что  5 из этих 21 самые большие. Спасибо!

Zets

  • Освоившийся
  • **
  • Posts: 66
    • View Profile
    • vk.com
Re: Помощь в сравнении переменных!
« Reply #1 on: May 05, 2014, 07:30:06 AM »
Как корявенький вариант предложу так:
вводишь 5 дополнительных переменных.
Присваиваешь первую сравниваемую переменную первой доп. переменной.
И далее цикл: если следующая сравниваемая переменная больше чем текущая доп. переменная, то присваиваешь  ее значение доп. переменной.
Когда все переменные перебрал начинаешь новый цикл, только из него исключаешь переменную с максимальным значением.
И так далее.
Наверно не оч хорошо объяснил, но думаю идея понятна.
Возможно есть гораздо более красивый и правильный подход, но я хз как)
Так этот вариант наверно подойдет только для изначально известного количества переменных

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Помощь в сравнении переменных!
« Reply #2 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

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Помощь в сравнении переменных!
« Reply #3 on: May 05, 2014, 03:48:03 PM »
А зачем строки? Массивы то уже есть. И хоть нет никаких функций работы с ними, всё равно, думаю быстрее будет.


Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Помощь в сравнении переменных!
« Reply #4 on: May 05, 2014, 06:47:40 PM »
 
А зачем строки? Массивы то уже есть. И хоть нет никаких функций работы с ними, всё равно, думаю быстрее будет.

Так это твой скрипт еще с 4.7 версии, можно переделать но возиться лень  ;D

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Помощь в сравнении переменных!
« Reply #5 on: May 05, 2014, 08:04:18 PM »
А зачем строки? Массивы то уже есть. И хоть нет никаких функций работы с ними, всё равно, думаю быстрее будет.

Так это твой скрипт еще с 4.7 версии, можно переделать но возиться лень  ;D
Таааак... 1:1
А я кинулся искать и не нашел.


Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Помощь в сравнении переменных!
« Reply #6 on: May 05, 2014, 08:11:12 PM »

Skomopox

  • Освоившийся
  • **
  • Posts: 56
    • View Profile
Re: Помощь в сравнении переменных!
« Reply #7 on: May 06, 2014, 03:04:42 AM »
Зетс. Я понял о чём ты. Я так и делаю, но оооочень геморно и длино.
Котэ спасибо за старый скрипт Игоря :) Я его попробовал сейчас, и почему-то одни нули выходят. Да не важно.
А вот предложение Игоря про массивы я бы рассмотрел :) Вычитывал про массивы здесь на форуме, что писал Джони, но видимо туговат я на подъём. Так и не понял что к чему. Но вот думал, что именно с ними как-то можно в "две строки" :) написать скрипт на сравнение. Если будет желание у кого, с интересом посмотрю :)
Чтобы если конкретней - то что мне подходит, например в старом скрипте Игоря, то что, как я понял, он должен просто показывать 5 максимальных переменных. А мне бы хотелось... ну как хотелось?! :) надо так... по сценарию... что происходит считывание переменной, и если она является одной из пяти, то происходит, такое-то действие, если нет, то идёт к следующей переменной и т.д. Как-то так. Спасибо :)

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Помощь в сравнении переменных!
« Reply #8 on: May 06, 2014, 08:18:41 AM »
Опять не понятно. Почему такая привязка к одной переменной? почему нельзя переназначить другим и сравнивать уже их?
Может ты при объяснении упустил одну вещь понятную тебе, но не ясную другим.
Массивами в две строки не получится. По крайней мере пока. Нет функционала. Пока массивы введены в основном как хранилища координат для введения новых функций. Никаких команд обработки массивов: сортировки, вставки, удаления - нет. Только по индексу или в конец. Всё конечно можно реализовать и вручную, но "парой строк" это уже не обойдётся.


Skomopox

  • Освоившийся
  • **
  • Posts: 56
    • View Profile
Re: Помощь в сравнении переменных!
« Reply #9 on: May 07, 2014, 04:39:26 AM »
Ну, парой строк - это было в кавычках. Необязательно парой строк :) И в принципе, необязательна привязка к одной переменной. Просто хотел, как проще :)

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Помощь в сравнении переменных!
« Reply #10 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
« Last Edit: May 07, 2014, 07:50:34 AM by Vint »