PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » step в цикле for


step в цикле for

Сообщений 1 страница 12 из 12

1

Приветствую всех!
вопрос такой:

Код:
      If REVERS = #PB_MessageRequester_Yes
        x=max: y=min: s=-1
      Else
        x=min: y=max: s=1
      EndIf
      For i = x To y Step s      
        t$ = "L"+Str(i) + ".xml"
        If FileSize(tmpDir$ + t$)>0
          FileNameAdd$ = tmpDir$ + t$
          AddOK = #False
          ThreadID=CreateThread(@addSchet(), x)
        EndIf
      Next i

ругается на step, я так понимаю он должен быть константой...
а каким образом можно это обойти?

Отредактировано amer (27.12.2023 10:28:17)

0

2

https://www.purebasic.com/documentation … until.html
https://www.purebasic.com/documentation … _wend.html
И самому управлять переменными, шагами приращения и условиями выхода из цикла.

И даже goto в помощь.  :cool:  https://www.purebasic.com/documentation … thers.html

0

3

Код:
For i = x To y Step s      
Next

Это же по сути то же, что и:

Код:
i = x

Repeat
  i + s
Until i >= y

Не?

0

4

Wormgrinder написал(а):

Это же по сути то же, что и:

Нет, через Until то же не получится. Через While.

0

5

Код:
max = 4
min = 2
If REVERS = #PB_MessageRequester_Yes
	x = max: y = min: s =  -1
Else
	x = min: y = max: s = 1
EndIf
If s = 1
	For i = x To y Step 1
    Debug i
	Next i
ElseIf s = -1
	For i = x To y Step -1
    Debug i
	Next i
EndIf

0

6

это понятно, что можно воспользоваться другими циклами или самому их "изобрести" но суть была в сокращении кода. короче, непонятно почему step должен быть константой...

0

7

https://www.purebasic.com/documentation … _next.html
Потому что автор так решил и конкретно отразил своё решение в документации.
И вопрос и обсуждение, исходя из этого, выглядят странно.
Не запрещено предложить ему изменить своё решение.

Отредактировано useful (27.12.2023 16:33:33)

0

8

Smitis написал(а):

Нет, через Until то же не получится. Через While.

Почему нет? Разница между ними только в том, что While может не сделать ни одного шага, а Until сделает один шаг цикла в любом случае. В этом плане While более точный, так как For тоже может не сделать ни одного шага, так как условие проверяется до начала выполнения шага цикла.

0

9

AZJIO

Почему нет? Разница между ними только в том, что While может не сделать ни одного шага, а Until сделает один шаг цикла в любом случае.

речь шла "Это же по сути то же"

В этом плане While более точный, так как For тоже может не сделать ни одного шага, так как условие проверяется до начала выполнения шага цикла.

Отличие, на самом деле, весьма значительное - выполнение лишней итерации может привести к непредсказуемым результатам. Особенно, если начальное значение вычисляется выражением. От задачи, конечно, зависит.

0

10

Smitis
Формулировка неточная. Если бы речь шла о Forever, тогда можно было бы сказать как "не получится", потому что оба ключевые слова не имеют условий, хотя даже при этом можно использовать внутреннее условие if + Break, но тут вопрос оптимальности. То есть в любом случае получится.

0

11

AZJIO написал(а):

но тут вопрос оптимальности

Ага, через until тоже получится, если добавить в начало цикла проверку начального условия и выход через break.
А можно даже через select (с goto) сделать. Будет красиво, но глупо :)
Но если вернуться к "сути", то по этой самой сути for это синтаксический сахар для while и работает так же.

Отредактировано Smitis (28.12.2023 10:02:33)

0

12

Нет никаких причин делать выражение в Step константой. Никаких технических ограничений нет. В VB6 можно в Step указывать даже дробные числа.
Поэтому такие ограничения — просто непродуманный дизайн языка. Ошибка планирования.

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » step в цикле for