Обучение MQL4 - страница 5

 
Ivan Butko #:
Тема одноимённая, поэтому спрошу здесь:

Чем отличаются операторы for и while? 

В каких случаях нужен один, а в каких - другой. Если их два, значит, это кому-нибудь нужно) 


Просто посмотрите синтаксис и поймёте, for и while сильно разнятся, хотя, естественно, можно реализовать цикл и так и сяк.

Обычно while применяется для тех циклов, которые не требуют итератора.


В операторе for(выражение1;выражение2;выражение3) на каждой итерации будет выполняться выражение3, в то время, как в операторе while необходимо заботиться об исполнении аналогичного кода.

int a[10];
// ... какие-то операторы по формированию массива a[]
for(int i=0; i<10; i++) {
        if ( a[i] < 0 ) {
                // при этом условии нам не надо делать что-либо в цикле,
                // переходим к следующей итерации
                continue;
        } else if ( a[i] == 0 ) {
                // ... какие-то операторы
        }
        // ... еще какие-то операторы
}


аналог с while

int a[10];
// ... какие-то операторы по формированию массива a[]
int i=0;
while( i<10 ) {
        if ( a[i] < 0 ) {
                // при этом условии нам не надо делать что-либо в цикле,
                // переходим к следующей итерации
                i++;
                continue;
        } else if ( a[i] == 0 ) {
                // ... какие-то операторы
        }
        // ... еще какие-то операторы
        i++;
}

Обратите внимание, программист должен самостоятельно отслеживать места, где требуется наращивать итератор.

 
PapaYozh #:


Просто посмотрите синтаксис и поймёте, for и while сильно разнятся, хотя, естественно, можно реализовать цикл и так и сяк.

Обычно while применяется для тех циклов, которые не требуют итератора.


В операторе for(выражение1;выражение2;выражение3) на каждой итерации будет выполняться выражение3, в то время, как в операторе while необходимо заботиться об исполнении аналогичного кода.


аналог с while

Обратите внимание, программист должен самостоятельно отслеживать места, кде требуется наращивать итератор.

Спасибо большое за подробный ответ. Но, не могли бы еще пояснить, а что значит "которые не требуют итератора" и "где требуется наращивать итератор". Что такое "итерация" написано в учебнике - это процесс одного прохода цикла. А итератор...

 
Ivan Butko #:

Спасибо большое за подробный ответ. Но, не могли бы еще пояснить, а что значит "которые не требуют итератора" и "где требуется наращивать итератор". Что такое "итерация" написано в учебнике - это процесс одного прохода цикла. А итератор...

В том примере, что я показал, итератор - это i.

При переборе массивов обычно требуется переменная-итератор.

 
a007 #:

Правильно написанный робот должен содержать функцию защиты от убытков.

Может просто не входить в рынок , если не уверен?
 
Ivan Butko #:

Спасибо большое за подробный ответ. Но, не могли бы еще пояснить, а что значит "которые не требуют итератора" и "где требуется наращивать итератор". Что такое "итерация" написано в учебнике - это процесс одного прохода цикла. А итератор...

В Вайле нет счётчика итераций циклов. Выход из цикла по булевому условию. Если истина на следующую итерацию, если ложь выходим из цикла Вайле. В Фор добавлен счётчик итераций, действие с ним и так же условие выхода из цикла.
 

for - когда заранее известно количество повторений цикла.

while - когда количество повторений цикла неизвестно, но известны условия его завершения.

 
Ivan Butko #:
Тема одноимённая, поэтому спрошу здесь:

Чем отличаются операторы for и while? 

В каких случаях нужен один, а в каких - другой. Если их два, значит, это кому-нибудь нужно) 

а справку пробовали листать?

вроде однозначно написано: https://www.mql5.com/ru/docs/basis/operators/for

Оператор for эквивалентен следующей последовательности операторов:

выражение1;
while(выражение2)
  {
   оператор;
   выражение3;
  };


а так из практики - используем for() когда известно количество итераций в цикле, а while() когда выход из цикла при срабатывании условия, которое может наступить в ходе выполнения цикла, как вариант примера бесконечный цикл:

while(!IsStopped())
{
....
}
 
У while есть одна супер фишка: можно войти в него первый раз без всяких условий. Отличная вещь!
 
Aleksei Stepanenko #:
У while есть одна супер фишка: можно войти в него первый раз без всяких условий. Отличная вещь!

Эта "фишка" у цикла do { ... } while ()

 
PapaYozh #:

В том примере, что я показал, итератор - это i.

При переборе массивов обычно требуется переменная-итератор.

Valeriy Yastremskiy #:
В Вайле нет счётчика итераций циклов. Выход из цикла по булевому условию. Если истина на следующую итерацию, если ложь выходим из цикла Вайле. В Фор добавлен счётчик итераций, действие с ним и так же условие выхода из цикла.
Dmitry Fedoseev #:

for - когда заранее известно количество повторений цикла.

while - когда количество повторений цикла неизвестно, но известны условия его завершения.

Igor Makanu #:

а справку пробовали листать?

вроде однозначно написано: https://www.mql5.com/ru/docs/basis/operators/for


а так из практики - используем for() когда известно количество итераций в цикле, а while() когда выход из цикла при срабатывании условия, которое может наступить в ходе выполнения цикла, как вариант примера бесконечный цикл:

Aleksei Stepanenko #:
У while есть одна супер фишка: можно войти в него первый раз без всяких условий. Отличная вещь!

Спасибо вам за ответы, очень доходчиво.