[ARCHIV]Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Ohne dich kann ich nirgendwo hingehen - 5. - Seite 57

 
Sepulca:

Versuchen Sie es auf diese Weise:

https://docs.mql4.com/ru/basis/variables/formal

Es gibt zwei Funktionen.
// заполняет массив фракталами, найденными в пределах заданного количества баров
double FractalsUP[], FractalsDN[];
void FractalsMassive(string symb, int timeframe, int bars)
 {
  int fr, frtUP=0, frtDN=0;
  for(fr=3; fr<=bars; fr++)
   {
    if(iFractals(symb,timeframe,MODE_UPPER,fr)>0)
     {
      ArrayResize(FractalsUP,frtUP+1);
      FractalsUP[frtUP]=iFractals(symb,timeframe,MODE_UPPER,fr);
      frtUP++;
     }
    if(iFractals(symb,timeframe,MODE_LOWER,fr)>0)
     {
      ArrayResize(FractalsDN,frtDN+1);
      FractalsDN[frtDN]=iFractals(symb,timeframe,MODE_LOWER,fr);
      frtDN++;      
     }
   }
 }
double ExtremeFractalUP(double& fractalup[])
 {
  int masrange, efup;
  masrange=ArrayRange(fractalup,1);
  
  for(efup=0; efup<masrange; efup++)
   {
    if(fractalup[efup]>fractalup[efup+1])
     {
      return(fractalup[efup]);
     }
    else continue;
   }  
 }

Fehler "FractalsUP - inkompatible Typen" beim Versuch, in EA zu kompilieren.

   FractalsMassive(Symbol(),0,100);
   double extr=ExtremeFractalUP(FractalsUP[]);

Funktionen und deklarierte Arrays werden, wenn überhaupt, in Include-Dateien gespeichert.

 
silhouette:
Ich habe das Lehrbuch vor dem Schreiben gelesen, ich habe den Unterstrich gesehen, aber in der Praxis konnte ich ihn nicht implementieren - es heißt, dass der Typ inkompatibel ist.


Ich habe ein funktionierendes Beispiel für die Übergabe von Parametern von Array-Elementwerten per Referenz (mit &-Präfix) gesehen.

 
silhouette:
Es gibt zwei Funktionen.

Beim Versuch, in EA zu kompilieren, wird die Fehlermeldung "FractalsUP - inkompatible Typen" ausgegeben.

Funktionen und deklarierte Arrays werden, wenn überhaupt, in Include-Dateien gespeichert.


So Gott will, sollte das funktionieren. Zumindest kompiliert es ohne Fehler:

int start()
{
 double FractalsUP[], FractalsDN[];
 ExtremeFractalUP(FractalsUP);// Передаем ссылку на один массив
 ExtremeFractalUP(FractalsDN);// Передаем ссылку на другой массив
}
//
double ExtremeFractalUP(double& fractalup[]) // В параметрах указываем что будет передаваться ссылка на массив
 {
  int masrange, efup;
  masrange=ArrayRange(fractalup,1);
  
  for(efup=0; efup<masrange; efup++)
   {
    if(fractalup[efup]>fractalup[efup+1])
     {
      return(fractalup[efup]);
     }
    else continue;
   }  
 }
 
Sepulca:


So Gott will, sollte das funktionieren. Zumindest kompiliert es ohne Fehler:

Danke für die Hilfe, das Prinzip scheint geklärt zu sein.
 

Hallo liebe Programmierer!

Können Sie mir bitte sagen, was ich falsch mache?

Ich habe eine externe Variable vom Typ int, die im Programm festlegen soll, wie viele Elemente sich in einem Array vom Typ double befinden werden,

Ich tue es die Art und Weise, die ich unten gezeigt werde, aber der Compiler erzeugt immer noch Fehler, ich habe bereits versucht, eine externe Variable des Double-Typs zu schreiben, aber ich bekomme immer noch Fehler.

Bitte beraten Sie mich.

extern int       max_count=4;

int start()
{
   static double A[max_count];

Fehler

 
SvSerg:

Hallo liebe Programmierer!

Können Sie mir bitte sagen, was ich falsch mache?

Ich habe eine externe Variable vom Typ int, die im Programm festlegen soll, wie viele Elemente sich in einem Array vom Typ double befinden werden,

Ich tue es die Art und Weise, die ich unten gezeigt werde, aber der Compiler erzeugt immer noch Fehler, ich habe bereits versucht, eine externe Variable des Double-Typs zu schreiben, aber ich bekomme immer noch Fehler.

Bitte beraten Sie mich.

Initialisieren Sie das Array mit einem expliziten Wert von double A[4];

Dann ändern Sie die Größe mit ArrayResize();

 
artmedia70:

Initialisieren Sie das Array mit einem expliziten Wert von double A[4];

Dann ändern Sie die Größe mit ArrayResize();



Ich danke Ihnen!

Ich denke, wenn wir ein leeres Arraydouble A[] initialisieren;, dann ist es möglich, so viel wie Sie durch Schleifen in es setzen wollen?

Ich entschuldige mich für nouveau-vous Fragen, aber Arrays sind ein Chaos für mich als Anfänger.

 
SvSerg:


Ich danke Ihnen!

Ich dachte, wenn Sie ein leeres Arraydouble A[] initialisieren; dann können Sie so viele Arrays in es setzen, wie Sie durch Schleifen wollen, richtig?

Ich entschuldige mich für nouveau-vous Fragen, aber Arrays sind ein Chaos für mich als Anfänger.

Sie können so viel Speicher wie nötig in jedes Array einbauen, solange Sie daran denken, die Größe zu ändern. Vor allem, wenn das Feld leer ist.
 
artmedia70:
Jedes Array kann mit so viel Speicher gefüllt werden, wie es benötigt, solange Sie daran denken, die Größe zu ändern. Vor allem, wenn das Feld leer ist.


Nochmals vielen Dank! Es ist schade, dass Sie mir kein + geben können.
 

Guten Tag!

Liebe Programmierer! Sie müssen einen Expert Advisor schreiben.

Beschreibung verfügbar.

Was sind die Bedingungen? Was sind die Garantien?

Mit freundlichen Grüßen, Maxim.