Author Topic: Цикличность  (Read 11376 times)

0 Members and 2 Guests are viewing this topic.

Полуночник

  • Активный участник
  • ***
  • Posts: 157
  • Умный не пошлёт на... он скажет -вы далеко пойдёте
    • View Profile
Цикличность
« on: November 08, 2012, 09:48:47 AM »
Вопросик такой. Допустим сделал цикл ожидания пока не появится какая то картинка на экране. А браз взял и подвис гад...
В этом случае цикл будет вечным( :o Как то надо сделать проверку на время ожидания что ли... Например если цикл не завершается в течении 30 сек., то провести какие то действия. Насколько это реально? И как воплотить в жисть? ::)

Johnny

  • Создатель
  • Герой форума
  • *
  • Posts: 593
    • View Profile
Re: Цикличность
« Reply #1 on: November 08, 2012, 11:24:08 AM »
Code: (clickermann) [Select]
$start = $_time_t

print("i'm coming..")


while ($flag = 0)
  print("get me out of here!111")

  if ($_time_t > $start + 30)
    $flag = 1
  end_if

  wait(3)
end_cyc

print("freedom at least!")

halt

соответственно если картинка найдена, то флажок так же взводится чтоб выйти из цикла
« Last Edit: November 08, 2012, 11:25:48 AM by Johnny »

Полуночник

  • Активный участник
  • ***
  • Posts: 157
  • Умный не пошлёт на... он скажет -вы далеко пойдёте
    • View Profile
Re: Цикличность
« Reply #2 on: November 08, 2012, 07:20:26 PM »
всё понял кроме $_time_t...  сорри, я ламер))))
точнее не понятно откуда будет начинаеться отсчёт? как он ведётся вообще?
« Last Edit: November 08, 2012, 07:23:26 PM by Полуночник »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Цикличность
« Reply #3 on: November 08, 2012, 07:57:13 PM »
всё понял кроме $_time_t...  сорри, я ламер))))
точнее не понятно откуда будет начинаеться отсчёт? как он ведётся вообще?


Особое значение имеют системные переменные. Их имена зарезервированы программой и значения переменных подставляются автоматически при обращении к ним.

 
Имя переменнойЗначение
$_xmouseПеременная при каждом обращении принимает значение координаты мыши по оси Х
$_ymouseТоже, но для оси У
$_xmaxМаксимально допустимое значение X, вычисляется как ширина разрешения - 1
$_ymaxАналогично для Y
$_return1Переменная используется для возврата в нее значения определенными инструкциями
$_return2Аналогично
$_lineСодержит номер выполняемой строки сценария
$_cursorСодержит код вида указателя мыши
$_msСистемный таймер Windows, отсчитывающий миллисекунды с момента старта ОС
$_time_tТекущее время в формате Unix-систем (подробнее)
$_time_hТекущий час
$_time_mТекущая минута
$_time_sТекущая секунда
$_hwndТекущий hwnd (если 0, то привязки к окну нет)

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Цикличность
« Reply #4 on: November 22, 2012, 10:13:56 AM »
В догонку пара вопросов про циклы.

В Хэлпе в описании FOR написано:
"циклы вложенности больше 2 уровня не поддерживаются"

Это же относится и к WHILE ?

Ограничение действует глобально на весь скрипт?
Например:
Code: [Select]
for($var, $var < 5)
  for($var2, $var2 < 3)
    ....
    GOSUB(вызвали пп)
  end_cyc
end_cyc
....
SUB(вызвали пп)
  for($var, $var < 5) //    Вот ЭТО будет работать или нет?
  ... 
  end_cyc
end_sub


Почему такое ограничение на глубину?
Действует ли ограничение на глубину вложенности подпрограмм?



Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Цикличность
« Reply #5 on: November 22, 2012, 11:53:03 AM »
Да если через СУБ то тройной цикл работает это относится и к WHILE
Ну а причем тут подпрограммы? Ограничения на них нет.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Цикличность
« Reply #6 on: November 22, 2012, 12:08:12 PM »
Да если через СУБ то тройной цикл работает это относится и к WHILE
Спасибо.
Ну а причем тут подпрограммы? Ограничения на них нет.
Спросил чтоб точно знать, пока вспомнил, а не столкнуться с этим пост фактум.


Johnny

  • Создатель
  • Герой форума
  • *
  • Posts: 593
    • View Profile
Re: Цикличность
« Reply #7 on: November 22, 2012, 01:07:00 PM »
Почему такое ограничение на глубину?
это ограничение на глубину моих познаний на тот момент лол. субы появились позже циклов и уже были сделаны "по канонам" поэтому там проблем с отслеживанием вложенности нет (нет ведь?).

в ближайшем обновлении думаю удастся переделать циклы.
уже сейчас (в моем прототипе лол) например нормально отрабатывает вот такой жуткий код
[spoiler=4х уровневый while]
Code: (clickermann) [Select]
while($a < 3)
   
   $b = 0
   while($b < 3)
     
      $c = 0
      while($c < 3)
         
         $d = 0
         while($d < 3)
            print($a, $b, $c, $d)
            inc($d)
         end_cyc
         inc($c)
         
      end_cyc
      inc($b)
     
   end_cyc
   inc($a)
   
end_cyc

halt
[/spoiler]

есть еще ряд нюансов потому как в отличие от С у нас нет ни области видимости переменных ни пространства имен. поэтому например во вложенных FOR (так же как сейчас для while, см. пример) скорее всего перед шапкой цикла придется обнулять переменную цикла, что конечно же нонсенс для компилируемых языков.
« Last Edit: November 22, 2012, 01:13:18 PM by Johnny »

Сергей

  • Активный участник
  • ***
  • Posts: 159
    • View Profile
Re: Цикличность
« Reply #8 on: November 23, 2012, 01:40:49 AM »
Так просто использовать разные переменные во вложенных циклах, не? После i - j, затем k, затем l, затем m… И дальше можно продолжать :)
Отсутствую.

ЦИТРИН

  • Супермодератор
  • Оплот сообщества
  • *
  • Posts: 484
  • Марафон опавших листьев, коктейль из дыма и мыслей
    • View Profile
Re: Цикличность
« Reply #9 on: January 19, 2013, 04:28:15 PM »
Помогите понять, в чем принципиальная разница между сабом  и инклудом,  кроме написания отдельного файла?
 Если ли преимущества, и в каких случаях?
Бабочки полёт будит тихую поляну в солнечном свету...

Johnny

  • Создатель
  • Герой форума
  • *
  • Posts: 593
    • View Profile
Re: Цикличность
« Reply #10 on: January 22, 2013, 09:55:11 AM »
объем отображаемого кода в редакторе становится меньше. во внешние файлы можно спрятать уже отжаленный код, который нареканий не вызывает.
или же просто вставлять туда повторяющийся код, который из-за синтаксиса языка не может быть оформлен как подпрограмма или как то еще.

а подпрограмма это подпрограмма.

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Цикличность
« Reply #11 on: January 22, 2013, 12:34:29 PM »
Из суба по GOTO выпрыгивать вроде как нельзя, а из инклуда вполне можно.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Цикличность
« Reply #12 on: January 22, 2013, 12:51:33 PM »
Все инклуды "вставляются" в основной код по мере работы скрипта или все в самом начале?
Вроде бы должны по ходу работы, тогда на слабом компе должен работать медленнее. Нужно доп. время на открытие файла. И если таких инклудов много или они в цикле может быть затык.
« Last Edit: January 22, 2013, 01:05:25 PM by Vint »


Johnny

  • Создатель
  • Герой форума
  • *
  • Posts: 593
    • View Profile
Re: Цикличность
« Reply #13 on: January 22, 2013, 12:55:35 PM »
да я же уже писал елки как работает инклуд. в момент загрузки скрипта строка с инклудом просто заменяется на содержимое файла, указанное в инклуде. и все.
сам по себе инклуд не является никакой логической частьюязыка сценариев. это директива препроцессора, потому у нее свой собственный синтаксис

ЦИТРИН

  • Супермодератор
  • Оплот сообщества
  • *
  • Posts: 484
  • Марафон опавших листьев, коктейль из дыма и мыслей
    • View Profile
Re: Цикличность
« Reply #14 on: January 22, 2013, 09:10:36 PM »
а подпрограмма это подпрограмма.
Можно ли собрать все сабы и оформить их инклудом ?
Бабочки полёт будит тихую поляну в солнечном свету...