Использование функций: прошу разъяснить на примере. - страница 2

 
Renat, во-первых,у Вас не физика, а прикладной инструмент. Заданный мной вопрос не настолько сложный, чтобы не найти простого ответа.
Во-вторых, море книг читать не нужно, нужно читать что-то конкретное.
В третьих,если Вы не можете пояснить на примере, как заставить фукцию работать в моем простейшем случае, так дайте ссылку на литературу,где это объяснение имеется.
Ссылку я видел,к сожалению, не ясно,как прописывать функции, где объявлять, как пользоваться.
Нет даже ни одной ссылки на литературу, где эти знания можно подчерпнуть.
Еще раз прошу,ПОБЕРЕГИТЕ НАШЕ ВРЕМЯ,повнимательнее отнеситесь к хелпам,ведь ваши потребители - не толко профессиональные программисты, а люди, которые хотят использовать продукт на практике и решают вполне простые и конкретные задачи.
 
alexD,
пример чего вы хотите?
Трудно догадаться что вам нужно ....

Примеры функций?
Так откройте любой индикатор или эксперт, там обязательно есть функции init и start.
Если вам нужны функции задаваемые пользователем - см. ветку про Профайл рынка, там есть индикатор, который использует пару самодельных функций - NewBar и CalcProfile.

Для простоты приведу фрагмент:
int start()
{
   curDate = Time[0];
   if (prevDate != curDate)
   {
      NewBar();
      prevDate = curDate;
   }
   
   int kPrice  = Width * (Bid - MinV) / (MaxV - MinV);
   ObjectSet("CurentPrice", OBJPROP_TIME1, Time[Width-kPrice]);
}

void NewBar()
{
   CalcProfile();
}

void CalcProfile()
{
   int i;
   double Fact = 2. / (Smooth + 1);

   MinV = Low[0];
   MaxV = High[0];
    ........
}



Ваш вопрос настолько неожиданный, вы спрашиваете о таких очевидных для программеров вещах, которые тем более тут во всех скриптах присутствуют, что все просто в растерянности что вам отвечать ..

Такое ощущение, что вы над нами просто издеваетесь .. :)

Если я вам не про то написал (пример выше), тогда уточняйте ваш вопрос.
Иначе вам никто вразумительно не ответит ..

 
Мак, уточняю:
вставляю кусочек кода из инструкции в тело своего эксперта, который до этого нормально компилировался -

double linfunc(double a,double b)
{return (a+b);}

получаю ответ компилятора:

'(' - function definition unexpected C:\Program Files\MetaTrader 4\experts\New_expert.mq4 (187, 15)
'}' - unbalanced parentheses C:\Program Files\MetaTrader 4\experts\New_expert.mq4 (205, 3)


Просто пытаюсь заставить функцию вернуть значение.Результата нет.Почему ?

Кроме того,подскажите,еслди не сложно,где описано создание и использование библиотек в MQL4, если нет, то какая книга по С даст представление по этому вопросу.
 
вставляю кусочек кода из инструкции в тело своего эксперта, который до этого нормально компилировался ..

Куда вставляете?
В какое место?
Приведите фрагмент вашего скрипта.

В MQL нельзя описание функции разместить внутри другой функции.
Т.е. описание функции не может находиться внутри функции start.
(что вы видимо и сделали)

Библиотека - это отдельный файл содержащий тексты нескольких функций.
В начале такого файла должна стоять строчка
#property  library



Файл должен быть размещен в папке include,
и подключается инструкцией

#include <MyLib.mq4>



Но у меня эта фигня сейчас не работает .. :(
Похоже глюк.

В общем пишите пока функции в самом индикаторе/эксперте

 
в папку инклюдов надо поместить файл mqh, содержащий не тело библиотеки, а предложение #import "библиотека" и описания функций.
посмотрите, как это сделано у нас. библиотека stdlib живёт в папочке libraries, а описательный файл stdlib.mqh живёт в папочке include.
описания функций нужны для синтаксической развязки вызовов этих самых функций, которые на самом деле живут совсем в другом модуле.
 
Я пытался описать функцию в теле эксперта внутри и вовне функции start/
Нигде мою функцию не приняли.
А где нужно описывать функцию ? Разработчики пишут, что функцию можно описывать в любом месте.
см."Функции"

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

Короче, после всех сломанных копий сожно сделать вывод, что описать функцию, передать туда значения и получить обратно результат НЕЛЬЗЯ ????

А сразу разработчики могли бы это сказать ?
 
Слава, предыдущий пост - МАКу.
 
Slawa, спасибо, поразбираюсь.

alexD,
давайте для начала без библиотек.

Пример смотрите выше.
void NewBar()
{
   CalcProfile();
}

void CalcProfile()
{
   int i;
   double Fact = 2. / (Smooth + 1);

   MinV = Low[0];
   MaxV = High[0];
    ........
}


Это отределения функций.
Они находятся за пределами определений других функций.

int start()
{
   curDate = Time[0];
   if (prevDate != curDate)
   {
      NewBar();
      prevDate = curDate;
   }
   
   int kPrice  = Width * (Bid - MinV) / (MaxV - MinV);
   ObjectSet("CurentPrice", OBJPROP_TIME1, Time[Width-kPrice]);
}


В функции start вызывается функция NewBar, а в ней вызывается CalcProfile.

Ну я не знаю как еще объяснить :(

Давайте сюда ваш скрипт, вставим функцию.

 
alexD, пожалуйста внимательно посмотрите, как оформлена наша библиотека stdlib.mq4. обратите внимание на то, что в папочке libraries живёт также и исполняемый код библиотеки stdlib.ex4.
загляните в директорию includes и Вы увидите включаемый файл stdlib.mqh. внимательно изучите его содержимое. там находится предложение import и описания функций, которые можно вызвать из библиотеки. этот файл подключается к программам при помощи #include <stdlib.mqh> для того, чтобы компилятор смог правильно оформить соответствующий вызов (сами функции-то живут совсем в другом модуле)
 
Огромное спасибо Маку и Славе, буду разбираться.
Причина обращения: