1. Элементы массивов в функции можно передавать только по значению:
void Swap(double x, double y)
2. Проверьте тип массива f[]
void Swap(double x, double y)
2. Проверьте тип массива f[]
Спасибо за ответ.
Вот код. Он осуществляет сортировку двух массивов, f[] и w[], по значениям f[] в возрастающем порядке по методу Quick Sort. Код скопирован из книги Numerical Recipes in C++. Массивы f[] и w[] описаны в основной программе следующим образом
...
double f[],w[];
int num=0;
while(...)
{
calculations
f[num]=...;
w[num]=...;
num++;
}
Sort(f,w);
...
Сообщения об ошибках начинают возникать в следующем коде по всем строкам Swap(...,...)
Вот код. Он осуществляет сортировку двух массивов, f[] и w[], по значениям f[] в возрастающем порядке по методу Quick Sort. Код скопирован из книги Numerical Recipes in C++. Массивы f[] и w[] описаны в основной программе следующим образом
...
double f[],w[];
int num=0;
while(...)
{
calculations
f[num]=...;
w[num]=...;
num++;
}
Sort(f,w);
...
Сообщения об ошибках начинают возникать в следующем коде по всем строкам Swap(...,...)
//Sort function-------------------------------------------------+ void Sort(double& f[], double& w[]) { int M=7, NSTACK=50; int i,ir,j,k,jstack=-1,l=0,istack[]; double F,W,temp; int n=ArraySize(w); ArrayResize(istack,NSTACK); ir=n-1; for(;;) { if(ir-l<M) { for(j=l+1;j<=ir;j++) { F=f[j]; W=w[j]; for(i=j-1;i>=l;i--) { if(f[i]<=F) break; f[i+1]=f[i]; w[i+1]=w[i]; } f[i+1]=f[i]; w[i+1]=w[i]; } if(jstack<0) break; ir=istack[jstack]; l=istack[jstack-1]; jstack=jstack-2; } else k=(l+ir)/2; Swap(f[k],f[l+1]); Swap(w[k],w[l+1]); if(f[l]>f[ir]) { Swap(f[l],f[ir]); Swap(w[l],w[ir]); } if(f[l+1]>f[ir]) { Swap(f[l+1],f[ir]); Swap(w[l+1],w[ir]); } if(f[l]>f[l+1]) { Swap(f[l],f[l+1]); Swap(w[l],w[l+1]); } i=l+1; j=ir; F=f[l+1]; W=w[l+1]; for(;;) { i++; while(f[i]<F)i++; j++; while(f[j]>F)j++; if(j<i) break; Swap(f[i],f[j]); Swap(w[i],w[j]); } f[l+1]=f[j]; f[j]=F; w[l+1]=w[j]; w[j]=W; jstack+=2; if(jstack>=NSTACK) Print("NSTACK too small in Sort"); if(ir-i+1>=j-l) { istack[jstack]=ir; istack[jstack-1]=i; ir=j-1; } else { istack[jstack]=j-1; istack[jstack-1]=l; l=i; } } return; } //Swap function-------------------------------------------------+ void Swap(double& x, double& y) { double temp=x; x=y; y=temp; return; }
Пытаюсь сделать следующее
...
Swap(f[k],f[k+1]);
...
void Swap(double& x, double& y)
{
double temp=x;
x=y;
y=temp;
return;
}
но получаю сообщение об ошибке "'f-incompatible types" на строке Swap(f[k],f[k+1]). Помогите понять в чём ошибка.
...
Swap(f[k],f[k+1]);
...
void Swap(double& x, double& y)
{
double temp=x;
x=y;
y=temp;
return;
}
но получаю сообщение об ошибке "'f-incompatible types" на строке Swap(f[k],f[k+1]). Помогите понять в чём ошибка.
При таком описании компилятор должен вычислить и подставить адреса f[k] и f[k+1]. Но он этому не обучен, ну и, как часто в жизни бывает, отвечает агрессией :). Выход может состоять в том, чтобы передавать по ссылке адрес массива и отдельно индексы. Типа
void Swap(double& Arr[], int ind1, int ind2) { double temp=Arr[ind1]; Arr[ind1]=Arr[ind2]; Arr[ind2]=temp; return; }
Спасибо за объяснение. Не знал о таком огрничении MQL4.
Вот код. Он осуществляет сортировку двух массивов, f[] и w[], по значениям f[] в возрастающем порядке по методу Quick Sort.
Зачем так много сложностей ? В MQL4 все это можно сделать в одну строку.
Объявляете двумерный массив double fw[][2]. Записываете fw[k][0]=f[k], fw[k][1]=w[k].
Сортируете функцией ArraySort(), считываете соответствующее значение w[] из 2-го столбца.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
...
Swap(f[k],f[k+1]);
...
void Swap(double& x, double& y)
{
double temp=x;
x=y;
y=temp;
return;
}
но получаю сообщение об ошибке "'f-incompatible types" на строке Swap(f[k],f[k+1]). Помогите понять в чём ошибка.