Author Topic: Min-Max?  (Read 7159 times)

0 Members and 1 Guest are viewing this topic.

Skomopox

  • Освоившийся
  • **
  • Posts: 56
    • View Profile
Min-Max?
« on: April 08, 2013, 04:17:32 PM »
Привет Всем! Кто подскажет насколько реально сделать так чтобы вычислял мин и максимум из цифр?
Пример: Есть 25 переменных. У всех каждый цикл меняются значения этих переменных. Как бы так можно было написать, чтобы кликер из этих 25 вычислял 5 самых больших по значению? Есть идеи?

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Min-Max?
« Reply #1 on: April 08, 2013, 04:29:28 PM »
Вот пример:
50 циклов выдается случайное число от 10 до 500

Code: (clickermann) [Select]
$resMin = 999999

for($i, $i < 50)
   $res = RND(10,500)
   IF($res > $resMax)
      $resMax = $res
   END_IF
   
   IF($res < $resMin)
      $resMin = $res
   END_IF
end_cyc

LOGWRITE ("MAX ", $resMax, " MIN ", $resMin)

Halt

Прогоняем скрипт и получаем нижний и верхний пределы

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Min-Max?
« Reply #2 on: April 08, 2013, 07:12:36 PM »
А я понял задачу по другому. сформулируй подробней.
Что есть, в каком диапазоне. Есть ли отрицательные.  ну и т.д.

молодец, продублировал.
« Last Edit: April 08, 2013, 07:16:33 PM by Vint »


Skomopox

  • Освоившийся
  • **
  • Posts: 56
    • View Profile
Re: Min-Max?
« Reply #3 on: April 09, 2013, 02:18:47 AM »
Конкретный пример:
$c1=13
$c2=24
$c3=35
$c4=4
$c5=21
$c6=14
$c7=16
$c8=27
$c9=26
$c10=5
...
и т.д. Вот допустим 10 переменных. Как сделать, чтобы кликер из этих хотя бы 10 переменных нашёл 3 наибольших? Я то вижу, что это $c3,$c8,$c9. А вот в кликере... Да, я конечно могу каждый сравнивать друг сдругом, но если их у меня допустим 40-50 переменных, то пи...ц какой длинный скрипт получиться :) Есть идеи попроще?

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Min-Max?
« Reply #4 on: April 09, 2013, 02:49:44 AM »
Ну и что ж это за скрипт такой с 50 переменными? Может все дело в изначально неправильной логике?

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Min-Max?
« Reply #5 on: April 09, 2013, 08:46:23 AM »
Конкретный пример:
$c1=13
$c2=24
$c3=35
$c4=4
$c5=21
$c6=14
$c7=16
$c8=27
$c9=26
$c10=5
...
и т.д. Вот допустим 10 переменных. Как сделать, чтобы кликер из этих хотя бы 10 переменных нашёл 3 наибольших? Я то вижу, что это $c3,$c8,$c9. А вот в кликере... Да, я конечно могу каждый сравнивать друг сдругом, но если их у меня допустим 40-50 переменных, то пи...ц какой длинный скрипт получиться :) Есть идеи попроще?

Проще не знаю как. Всё равно только перебор.
Например так:
Code: (clickermann) [Select]
$c1=13
$c2=24
$c3=35
$c4=4
$c5=21
$c6=14
$c7=16
$c8=27
$c9=26
$c10=5

GOSUB(max_opred)
$max1=$max
GOSUB(max_opred)
$max2=$max
GOSUB(max_opred)
$max3=$max
LOGWRITE ("max1= ",$max1,", max2= ",$max2,", max3= ",$max3)
HALT

SUB(max_opred)
   $max=0
   IF($pr1 = 0)
      IF($c1 > $max)
         $pr1=1
         $max=$c1
      END_IF
   END_IF
   
   IF($pr2 = 0)
      IF($c2 > $max)
         $pr2=1
         $max=$c2
      END_IF
   END_IF
   
   IF($pr3 = 0)
      IF($c3 > $max)
         $pr3=1
         $max=$c3
      END_IF
   END_IF
   
   IF($pr4 = 0)
      IF($c4 > $max)
         $pr4=1
         $max=$c4
      END_IF
   END_IF
   
   IF($pr5 = 0)
      IF($c5 > $max)
         $pr5=1
         $max=$c5
      END_IF
   END_IF
   
   IF($pr6 = 0)
      IF($c6 > $max)
         $pr6=1
         $max=$c6
      END_IF
   END_IF
   
   IF($pr7 = 0)
      IF($c7 > $max)
         $pr7=1
         $max=$c7
      END_IF
   END_IF
   
   IF($pr8 = 0)
      IF($c8 > $max)
         $pr8=1
         $max=$c8
      END_IF
   END_IF
   
   IF($pr9 = 0)
      IF($c9 > $max)
         $pr9=1
         $max=$c9
      END_IF
   END_IF
   
   IF($pr10 = 0)
      IF($c10 > $max)
         $pr10=1
         $max=$c10
      END_IF
   END_IF
END_SUB
Если будет вызываться не 1 раз вначале нужно добавить обнуление переменных $pr1-$pr10
« Last Edit: April 09, 2013, 11:04:15 AM by Vint »


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Min-Max?
« Reply #6 on: April 09, 2013, 10:04:10 AM »
Если покороче, то вот:
Code: (clickermann) [Select]
$c1=13
$c2=24
$c3=35
$c4=4
$c5=21
$c6=14
$c7=16
$c8=27
$c9=26
$c10=5

$string=STRCONCAT($c1,":",$c2,":",$c3,":",$c4,":",$c5,":",$c6,":",$c7,":",$c8,":",$c9,":",$c10)
GOSUB(max_opred)
$max1=$max
GOSUB(max_opred)
$max2=$max
GOSUB(max_opred)
$max3=$max
LOGWRITE ("max1= ",$max1,", max2= ",$max2,", max3= ",$max3)
HALT

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

Здесь при увеличении количества переменных будет расти только длина строки
Code: (clickermann) [Select]
$string=STRCONCAT($c1,":",$c2,":",$c3,":",$c4,":",$c5,":",$c6,":",$c7,":",$c8,":",$c9,":",$c10)
Длина всегда 29 строк против 72 для 10 переменных, если больше-строк больше.
« Last Edit: April 09, 2013, 10:56:21 AM by Vint »


Skomopox

  • Освоившийся
  • **
  • Posts: 56
    • View Profile
Re: Min-Max?
« Reply #7 on: April 09, 2013, 02:18:30 PM »
Игорь спасибо! Я уже ответил в ВК. Хотя может тут и лучше было бы. Если будут ещё идеи по поводу того, что я написал, выкладывай с удовольствием :)

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Min-Max?
« Reply #8 on: April 09, 2013, 02:55:45 PM »
а зачем ещё уменьшать. Уже нормально. 28 строк для нахождения 3 максимальных, для пяти будет 32. В подпрограмму её и всё. То же для минимального если нужно.


Skomopox

  • Освоившийся
  • **
  • Posts: 56
    • View Profile
Re: Min-Max?
« Reply #9 on: April 11, 2013, 05:49:19 AM »
Code: (clickermann) [Select]
$c1=13
$c2=24
$c3=35
$c4=4
$c5=21
$c6=14
$c7=16
$c8=27
$c9=26
$c10=5

$string=STRCONCAT($c1,":",$c2,":",$c3,":",$c4,":",$c5,":",$c6,":",$c7,":",$c8,":",$c9,":",$c10)
$string_pos=$string
GOSUB(max_opred)
$max1=$max
$pos1=$pos_result
GOSUB(max_opred)
$max2=$max
$pos2=$pos_result
GOSUB(max_opred)
$max3=$max
$pos3=$pos_result
LOGWRITE ("c",$pos1,"= ",$max1,", c",$pos2,"= ",$max2,", c",$pos3,"= ",$max3)
HALT

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
 //LOGWRITE ("string= ",$string)
 $pos=0
 $cut=$string_pos
 WHILE(INT(STRPOS($cut,":"))!0)
 INC($pos)
 $num=INT(STRCUT2($cut,1,STRPOS($cut,":")-1))
 $cut=STRCUT2($cut,STRPOS($cut,":")+1,99999)
 IF($num = $max)
 $pos_result = $pos
 $cut = ""
 END_IF
 END_CYC
 IF($pos_result=0)
 INC($pos)
 $pos_result = $pos
 END_IF
END_SUB

Вставил сюда, чтобы твой труд не пропадал зря если что. Проверил всё кул. Но разбираться так и не стал :) Сложно для меня всё это. Не дружуж я со строкаим :)
« Last Edit: October 31, 2014, 04:28:48 PM by Oraven »

Skomopox

  • Освоившийся
  • **
  • Posts: 56
    • View Profile
Re: Min-Max?
« Reply #10 on: April 11, 2013, 05:58:13 AM »
Вообще использовать немогу в таком варианте, к сожалению. Вариант у меня только один, ну как я вижу. Это, допустим, 10 переменных $c1-$c10. Изначально каждый равен 0. Но каждый цикл они у меня меняются. И каждый цикл мне необходимо вычислять 3 наибтольших и использовать это. Но, в таком варианте, как у тебя не получиться. Да мне в любом случае придётся наибольшие числа примерять под другие переменные, но не так. А именно: параллельно будут, допустим $gc1-$gc10. И вот допутим если $c4 одна из 3 наибольших чисел, то $gc4=1 и тогда я могу это использовать. Вот в таком варианте.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Min-Max?
« Reply #11 on: April 11, 2013, 08:06:49 AM »
Вообще использовать немогу в таком варианте, к сожалению. Вариант у меня только один, ну как я вижу. Это, допустим, 10 переменных $c1-$c10. Изначально каждый равен 0. Но каждый цикл они у меня меняются. И каждый цикл мне необходимо вычислять 3 наибтольших и использовать это. Но, в таком варианте, как у тебя не получиться. Да мне в любом случае придётся наибольшие числа примерять под другие переменные, но не так. А именно: параллельно будут, допустим $gc1-$gc10. И вот допутим если $c4 одна из 3 наибольших чисел, то $gc4=1 и тогда я могу это использовать. Вот в таком варианте.
Не вижу никакой проблемы. В конце перед End_SUB добавить:
Code: (clickermann) [Select]
IF($pos_result = 1)
  $gc1=1
END_IF
IF($pos_result = 2)
  $gc2=1
END_IF
IF($pos_result = 3)
  $gc3=1
END_IF
IF($pos_result = 4)
  $gc4=1
END_IF
...и т.д.

Вставил сюда, чтобы твой труд не пропадал зря если что. Проверил всё кул. Но разбираться так и не стал :) Сложно для меня всё это. Не дружуж я со строкаим :)
Я тоже с ними не дружил. Вначале думал, что для меня вообще вряд ли пригодятся. Текстовые файлы кликером обрабатывать не собирался. А сейчас их полюбил. Отчасти наверно, что с их помощью сейчас можно реализовать замену массивам.
« Last Edit: April 11, 2013, 08:53:59 AM by Vint »


Skomopox

  • Освоившийся
  • **
  • Posts: 56
    • View Profile
Re: Min-Max?
« Reply #12 on: April 12, 2013, 05:50:19 AM »
Что-то как ни пробовал вставлять, подстраивать  - нифига не получается  :-\

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Min-Max?
« Reply #13 on: April 12, 2013, 08:04:58 AM »
Что-то как ни пробовал вставлять, подстраивать  - нифига не получается  :-\
Ты бы подробней всё описал. А то часто "и тут вдруг выясняется..."

"нифига не получается" - слишком растянутое определение. Что хотел получить и что получилось?


Skomopox

  • Освоившийся
  • **
  • Posts: 56
    • View Profile
Re: Min-Max?
« Reply #14 on: April 14, 2013, 06:38:00 AM »
Игорь, просто, чтобы тупо не молчать. Пока ничего конкретного. У меня тут небольшой затык. Поэтому пока не экспериментирую с этим. Спасибо за поддержку :)