Автор Тема: как решить задачку  (Прочитано 421 раз)

0 Пользователей и 1 Гость просматривают эту тему.

scat

  • Зашел в гости
  • *
  • Сообщений: 19
    • Просмотр профиля
как решить задачку
« : Июнь 03, 2020, 11:17:41 am »
у Феди $xu1 = 10  яблок
у Васи $xu2 = 20 яблок
у Валеры $xu3  = 30 яблок

какую формулу написать что у Валеры $xu3 больше всего яблок??

или из массива переменных выделить наибольшее число

$xu1 = 0 // федя
$xu2 = 0 // вася
$xu3 = 0 // валера

WAITMS(500)





GETSCREEN
SCANPICTURE($ARR_SCAN, 759,436, 841,694, "xu1.bmp", -1, 100)

$ARR_NUM = 0
WHILE ($ARR_NUM < ARRSIZE($ARR_SCAN))
   $X = $ARR_SCAN [$ARR_NUM]
   INC($ARR_NUM,1)
   $Y = $ARR_SCAN [$ARR_NUM]
   INC($ARR_NUM,1)
   INC($xu1, 1)
   WAITMS(100)
END_CYC
UNDEFINE($ARR_SCAN)


GETSCREEN
SCANPICTURE($ARR_SCAN, 759,436, 841,694, "xu2.bmp", -1, 100)

$ARR_NUM = 0
WHILE ($ARR_NUM < ARRSIZE($ARR_SCAN))
   $X = $ARR_SCAN [$ARR_NUM]
   INC($ARR_NUM,1)
   $Y = $ARR_SCAN [$ARR_NUM]
   INC($ARR_NUM,1)
   INC($xu2, 1)

   WAITMS(100)
END_CYC
UNDEFINE($ARR_SCAN)


GETSCREEN
SCANPICTURE($ARR_SCAN, 759,436, 841,694, "xu3.bmp", -1, 100)

$ARR_NUM = 0
WHILE ($ARR_NUM < ARRSIZE($ARR_SCAN))
   $X = $ARR_SCAN [$ARR_NUM]
   INC($ARR_NUM,1)
   $Y = $ARR_SCAN [$ARR_NUM]
   INC($ARR_NUM,1)
   INC($xu3, 1)

   WAITMS(100)
END_CYC
UNDEFINE($ARR_SCAN)

LOGWRITE ("федя яблок: ", $xu1,"шт" ) // 10
LOGWRITE ("вася яблок", $xu2,"шт" ) // 20
LOGWRITE ("валера яблок ", $xu3,"шт")  //30


« Последнее редактирование: Июнь 03, 2020, 03:28:26 pm от scat »

4.У.В.@.К

  • Освоившийся
  • **
  • Сообщений: 83
    • Просмотр профиля
Re: как решить задачку
« Ответ #1 : Июнь 03, 2020, 09:49:20 pm »
какую формулу написать что у Валеры $xu3 больше всего яблок??
или из массива переменных выделить наибольшее число

Вот как то так, примерно.
Скрипт переделал. Координаты найденных картинок можно добавить если нужны.

Код: Clickermann
  1. LOGCLEAR
  2.  
  3. STRSEPARATE("Федя:Вася:Валера", ":", $collectors) // Сборщики яблок, через разделитель ":"
  4.  
  5. FOR($i = 0, $i < ARRSIZE($collectors))
  6.  
  7.   GETSCREEN
  8.   // Ищем картинки с именами "Федя.bmp", "Вася.bmp", "Валера.bmp"
  9.   SCANPICTURE($ARR_SCAN, 759,436, 841,694, STRCONCAT($collectors[$i], ".bmp"), -1, 100)
  10.  
  11.   ARRPUSH($count, ARRSIZE($ARR_SCAN)/2) // Количество яблок найденных текущим сборщиком, добавляем в массив
  12.  
  13.   INIWRITE("config.ini", ARRSIZE($ARR_SCAN)/2, $collectors[$i], "ЯБЛОКИ") // Записываем в базу количество найденных сборщиком яблок и имя сборщика
  14.  
  15.   UNDEFINE($ARR_SCAN)
  16.  
  17. END_CYC
  18.  
  19. // LOGWRITE ("Федя яблок: ", $count[0]," шт." ) // 10
  20. // LOGWRITE ("Вася яблок: ", $count[1]," шт." ) // 20
  21. // LOGWRITE ("Валера яблок: ", $count[2]," шт.")  //30
  22.  
  23. ARRSORT($count) // Сортируем массив с количеством яблок
  24.  
  25. $max_count = $count[ARRSIZE($count-1)] // Максимальное количество яблок, в сортированном массиве из цифр, будет в последней ячейке
  26.  
  27. // LOGWRITE ($max_count)
  28.  
  29. $winner = INIREAD("config.ini", $max_count, "ЯБЛОКИ") // Берем из базы имя сборщика, собравшего максимальное количество яблок
  30.  
  31. // LOGWRITE ($winner)
  32.  
  33. LOGWRITE ("Больше всех яблок собрал ", $winner, " (", $max_count, " шт.)") // Выводим результат в лог
  34.  
  35. HALT

Да, еще GETSCREEN надо вынести из цикла, если по условиям задачи достаточно одного снимка экрана.
« Последнее редактирование: Июнь 03, 2020, 10:39:29 pm от 4.У.В.@.К »

4.У.В.@.К

  • Освоившийся
  • **
  • Сообщений: 83
    • Просмотр профиля
Re: как решить задачку
« Ответ #2 : Июнь 04, 2020, 09:11:09 am »
Другой вариант скрипта. Вместо связки "ini-файл + массив", теперь один массив, со склеенными строками "количество + имя" и STRFILTER для "расклейки" этих строк. Так должно работать быстрее.

Код: Clickermann
  1. LOGCLEAR
  2.  
  3. STRSEPARATE("Федя:Вася:Валера", ":", $names)
  4.  
  5. GETSCREEN
  6.  
  7. FOR($i = 0, $i < ARRSIZE($names))
  8.  
  9.   // Ищем картинки с именами "Федя.bmp", "Вася.bmp", "Валера.bmp"
  10.   SCANPICTURE($ARR_SCAN, 759,436, 841,694, STRCONCAT($names[$i], ".bmp"), -1, 100)
  11.  
  12.   ARRPUSH($arr, STRCONCAT(ARRSIZE($ARR_SCAN)/2, $names[$i])) // Количество найденных яблок добавляем в массив
  13.  
  14.   LOGWRITE (STRCONCAT($names[$i], " яблок: ", ARRSIZE($ARR_SCAN)/2, " шт."))
  15.  
  16.   UNDEFINE($ARR_SCAN)
  17.  
  18. END_CYC
  19.  
  20. ARRSORT($arr) // Сортируем массив с количеством яблок
  21.  
  22. // Максимальное количество яблок, в сортированном массиве из цифр, будет в последней ячейке
  23. $max_count = STRFILTER($arr[ARRSIZE($arr) - 1], "0123456789", 1)
  24.  
  25. //LOGWRITE ($max_count)
  26.  
  27. LOGWRITE ("Больше всех яблок собрал ", STRFILTER($arr[ARRSIZE($arr) - 1], "0123456789", 0), " (", $max_count, " шт.)")
  28.  
  29. HALT

Еще как вариант - сравнивать количество яблок условием внутри цикла и сохранять в переменную только наибольшую цифру + имя. Без массивов.

scat

  • Зашел в гости
  • *
  • Сообщений: 19
    • Просмотр профиля
Re: как решить задачку
« Ответ #3 : Июнь 04, 2020, 09:56:29 am »
Еще как вариант - сравнивать количество яблок условием внутри цикла и сохранять в переменную только наибольшую цифру + имя. Без массивов.

Если возможно поподробнее
массив необязателен  важна скорость просчета и вывод конечного результата

4.У.В.@.К

  • Освоившийся
  • **
  • Сообщений: 83
    • Просмотр профиля
Re: как решить задачку
« Ответ #4 : Июнь 04, 2020, 11:43:23 am »
Тогда так. Совсем просто стало.)) Вывод сообщений в лог много времени отнимает, по этому лишние (отладочные) сообщения лучше отключать.

Код: Clickermann
  1. LOGCLEAR
  2.  
  3. STRSEPARATE("Федя:Вася:Валера", ":", $names)
  4.  
  5. GETSCREEN
  6.  
  7. FOR($i = 0, $i < ARRSIZE($names))
  8.  
  9.   // Ищем картинки с именами "Федя.bmp", "Вася.bmp", "Валера.bmp"
  10.   SCANPICTURE($ARR_SCAN, 685,222, 1115,608, STRCONCAT($names[$i], ".bmp"), -1, 100)
  11.  
  12.   IF($max_count < ARRSIZE($ARR_SCAN)/2)
  13.      $max_count = ARRSIZE($ARR_SCAN)/2
  14.      $max_name = $names[$i]
  15.   END_IF
  16.  
  17.   LOGWRITE (STRCONCAT($max_name, " яблок: ", ARRSIZE($ARR_SCAN)/2, " шт."))
  18.  
  19.   UNDEFINE($ARR_SCAN)
  20.  
  21. END_CYC
  22.  
  23. LOGWRITE ("Больше всех яблок собрал ", $max_name, " (", $max_count, " шт.)")
  24.  
  25. HALT

scat

  • Зашел в гости
  • *
  • Сообщений: 19
    • Просмотр профиля
Re: как решить задачку
« Ответ #5 : Июнь 04, 2020, 12:18:06 pm »


3 вариант самое то Спасибо тебе добрый человек