Тема занятия:
1) Массивы.
2) Операторы.
3) Функции.
4) Создание собственных функций.
ссылка в вебинарную комнату http://www.webinar.texno-forex.ru/masterskaya3/
Занятие 2
-
- Сообщения: 58
- Зарегистрирован: 14 ноя 2016, 00:07
Занятие 2
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Как и на чем заработать уже за первый месяц и делать это снова и снова Узнайте как
Регистрация и учебные материалы бесплатно.
Регистрация и учебные материалы бесплатно.
- silver1970
- Сообщения: 1
- Зарегистрирован: 28 мар 2017, 06:15
Re: Занятие 2
Выкладываю ДЗ
Код: Выделить всё
//+------------------------------------------------------------------+
//| Счетчик.mq4 |
//| Copyright 2017, MetaQuotes Software Corp. |
//| https:
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link ""
#property version "1.00"
#property strict
input int a = 10;
input int b = 25;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- create timer
EventSetTimer(1);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- destroy timer
EventKillTimer();
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
}
//+------------------------------------------------------------------+
//| Timer function |
//+------------------------------------------------------------------+
void OnTimer()
{
static int i = 1;
static int aa = a;
if(a >= b)
{
Comment("Неверные Данные");
} else {
if(aa <= a)
{
i = 1;
}
if(aa >= b)
{
i = -1;
}
Comment("Счетчик = ", aa += i);
}
}
//+------------------------------------------------------------------+
- Aleks
- Сообщения: 3
- Зарегистрирован: 01 дек 2016, 20:31
- VladimirMMM56
- Сообщения: 1
- Зарегистрирован: 28 мар 2017, 06:42
Re: Занятие 2
Код: Выделить всё
//+------------------------------------------------------------------+
//| zadanie.mq4 |
//| Copyright 2017 |
//| https://www.mysite.com
//| Vladimir
//+------------------------------------------------------------------+
#property copyright "Copyright 2017"
#property link "https://www.mysite.com"
#property version "1.00"
#property strict
extern int a=10; //нижнее значение
extern int b=100; //верхнее значение
int c=a; // Переменная счетчика
int s=0; // Флаг счетчика если s=0 счетчит считает вверх, если s=1 счетчик считает вниз
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- create timer
EventSetTimer(1);
// EventSetMillisecondTimer(100);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- destroy timer
EventKillTimer();
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
}
//+------------------------------------------------------------------+
//| Timer function |
//+------------------------------------------------------------------+
void OnTimer()
{
if (a<10||a>100||b<10||b>100||a>=b)
{
Comment ("Не правильный ввод, а и b должны быть от 10 до 100 и а дожна быть меньше b");
}
else {
Comment ( "C= ",c );
if (s==0) // Счет идет вверх
{ c=c+1;
if (c>b-1) s=1; // Прерброс флага для счета вниз
}
else {c=c-1;
if (c<a+1) s=0; // Прерброс флага для счета вверх
}
}
}
//+------------------------------------------------------------------+
- Фёдор
- Сообщения: 3
- Зарегистрирован: 30 мар 2017, 12:54
Re: Занятие 2
Выкладываю домашнее задание в архиве.
Также есть вопросы к Валентину по материалу урока:
1). На 2-м уроке Вы написали 3-мерный массив в таком формате:
c[2,10,10]
То есть, номер столбца идёт первым, а на слайде у Вас приводится такой формат:
ms[номер столбца, номер строки]
ms[номер столбца][номер строки]
Какой формат последовательности является правильным и имеет ли это значение?
2). Ещё вопрос по оператору continue. Правильно ли я понял, что при выполнении/невыполнении условий в цикле проход данного цикла считается завершённым? То есть, если у нас в цикле for задано выполнить 100 циклов, а на 50-м цикле у нас какое-то условие выполнилось или не выполнилось в зависимости от заданного условия, то тогда интерпретатор считает данный 50-й проход цикла завершённым и переходит сразу к 51-му, не опрашивая другие условия?
Также есть вопросы к Валентину по материалу урока:
1). На 2-м уроке Вы написали 3-мерный массив в таком формате:
c[2,10,10]
То есть, номер столбца идёт первым, а на слайде у Вас приводится такой формат:
ms[номер столбца, номер строки]
ms[номер столбца][номер строки]
Какой формат последовательности является правильным и имеет ли это значение?
2). Ещё вопрос по оператору continue. Правильно ли я понял, что при выполнении/невыполнении условий в цикле проход данного цикла считается завершённым? То есть, если у нас в цикле for задано выполнить 100 циклов, а на 50-м цикле у нас какое-то условие выполнилось или не выполнилось в зависимости от заданного условия, то тогда интерпретатор считает данный 50-й проход цикла завершённым и переходит сразу к 51-му, не опрашивая другие условия?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- Сообщения: 58
- Зарегистрирован: 14 ноя 2016, 00:07
Re: Занятие 2
Какой формат последовательности является правильным и имеет ли это значение?
ms[номер столбца, номер строки,номер таблици] да имеет значение
https://book.mql4.com/ru/variables/arrays
Оператор continue прекращает исполнение текущей итерации ближайшего оператора цикла while или for. Результатом выполнения оператора continue является переход к следующей итерации ближайшего оператора цикла while или for. Оператор continue может использоваться только в составе тела указанных операторов цикла.
https://book.mql4.com/ru/operators/continue
Как и на чем заработать уже за первый месяц и делать это снова и снова Узнайте как
Регистрация и учебные материалы бесплатно.
Регистрация и учебные материалы бесплатно.
- владимир-loka
- Сообщения: 2
- Зарегистрирован: 02 дек 2016, 19:39
- Кирилл
- Сообщения: 7
- Зарегистрирован: 02 дек 2016, 16:23
Re: Занятие 2
Вопрос Федору: Что значит в конце программы return ? Я попробовал убрать - ничего не меняется, как считал так и считает.
- Lev
- Сообщения: 1
- Зарегистрирован: 28 мар 2017, 01:58
Re: Занятие 2
Код: Выделить всё
void OnTimer()
{
double a1=a/b;
if (a1==10.0)// проверим условие ввода данных
// алгоритм счетчика
{i=i+b*z;
Comment("i= ",i);
if (i==(a+k)){z=z*-1;k=k+a*z;}
}
else
{Comment("Условие неверно!");}
}
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- Сообщения: 6
- Зарегистрирован: 02 дек 2016, 13:26
Занятие 2
Домашнее задание.
Код: Выделить всё
//+------------------------------------------------------------------+
//| DomZad.mq4 |
//| Berserker |
//| http://www.mysite.com |
//+------------------------------------------------------------------+
#property copyright "Berserker"
#property link "http://www.mysite.com"
#property version "1.00"
#property strict
//+------------------Домашнее задание-------------------------+
extern int a=100; //Верхнее значение
extern int b=10; //Нижнее значение
int c=0;
int e=0; //Переменная флаг
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
if (a>100){ //Проверяем что бы Верхнее значение не было больше допустимого
a=100; //Если Верхнее значение больше допустимого то задаем допустимое значение
}
if (b>=a){ //Проверяем что бы Нижнее значение не было больше Верхнего
b=a-1; //Если Нижнее значение больше Верхнего то задаем допустимое значение
}
if (b<10){ //Проверяем что бы Нижнее значение не было Меньше минимально допустимого
b=10; //Задаем минимально допустимое Нижнее значение
}
c=b; //Назначаем начальное значение для начала отсчета
EventSetMillisecondTimer(500);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- destroy timer
EventKillTimer();
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
}
//+------------------------------------------------------------------+
//| Timer function |
//+------------------------------------------------------------------+
void OnTimer()
{
//+------------------Домашнее задание-------------------------+
if (e==0){ //Проверяем флаг
if (c<a){ //Считаем от Нижнего к большему
c=c+1;
}else {
e=1; //Меняем флаг
}
}else { //Если условие флага не выполняется то работает вторя часть функции
if (c>b){ //Считаем от большего к меньшему
c=c-1;
}else {
e=0; //Меняем флаг
}
}
Comment(
"C = ",c,"\n","Флаг = ",e,"\n"
);
}
Жаба - хотя и зверь маленький, но давит не хуже медведя.
-
- Администратор
- Сообщения: 25
- Зарегистрирован: 13 ноя 2016, 22:42
Re: Занятие 2
Кирилл писал(а):Вопрос Федору: Что значит в конце программы return ? Я попробовал убрать - ничего не меняется, как считал так и считает.
Попробую ответить за Федора)))
return используется в конце функции для передачи результата.
если функция void тоесть не выдает результат, начиная с 600 билда return требовался как флаг окончания функции. Сейчас он уже в данном типе функции не нужен, но если установить, благополучно будет обработан.
-
- Администратор
- Сообщения: 25
- Зарегистрирован: 13 ноя 2016, 22:42
Re: Занятие 2
Фёдор писал(а):Также есть вопросы к Валентину по материалу урока:
1). На 2-м уроке Вы написали 3-мерный массив в таком формате:
c[2,10,10]
То есть, номер столбца идёт первым, а на слайде у Вас приводится такой формат:
ms[номер столбца, номер строки]
ms[номер столбца][номер строки]
Какой формат последовательности является правильным и имеет ли это значение?
Значения где столбец где строка не имеет никакого, индекс используется чисто для нашего удобства и имеет относительное значение. Например, если мы решим, что у нас будет идти сначала строка, затем столбец и затем номер страницы и дальше будем придерживаться этого варианта то все будет работать. Хотя когда пишем программы вряд ли кто думает где стока, где столбец.
Обычно мы решаем, что первое значение - это, например, номер по порядку ордера, 2 данные ордера и т.д.
Например у нас есть массив Orders[100,5]; В данном случае я зарезервировал место под 100 ордеров с различными параметрами Так Orders[0,0] - например, номер тикета выбранного (0) ордера, Orders[0,1] цена установки того же ордера, Orders[0,2] - объем лота того же ордера и т.д. Потом берем Orders[1,0] - это будет номер тикета выбранного уже следующего (1) ордера и т.д.
Фёдор писал(а):2). Ещё вопрос по оператору continue.
Этот вопрос рассмотрим на примере на 3 занятии.
- Aleks
- Сообщения: 3
- Зарегистрирован: 01 дек 2016, 20:31
Re: Занятие 2
В решении ДЗ, которое разбирали на 3-м занятии, нет полного соответствия информации в окне графика со счётчиком. Счётчик считает до "100", а в окне отражается на один меньше, до "99". Чтобы в окне отражалось до "100", счёт надо увеличить до 101, но это нарушает условие задачи - считать до 100.
-
- Администратор
- Сообщения: 25
- Зарегистрирован: 13 ноя 2016, 22:42
Re: Занятие 2
Если говорить буквально, то да, хотя счетчик и достигает нужного значения, оно не выводится на экран, так как флаг направления счета меняет свое состояние и выполняется операция обратного счета до вывода на экран:
Что бы видеть это значение, нужно менять состояние флага направления счета после завершения счета, в данной ситуации достаточно поменять местами две строчки программы:
Что бы видеть это значение, нужно менять состояние флага направления счета после завершения счета, в данной ситуации достаточно поменять местами две строчки программы:
Вернуться в «Мастерская Forex Роботов 3»
Кто сейчас на конференции
Сейчас этот форум просматривают: Alexa [Bot] и 0 гостей