Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   2-dimensionales Array? (http://www.expert-advisor.com/forum/showthread.php?t=6877)

AVT 02.01.21 11:08

2-dimensionales Array?
 
Ich krieg das einfach nicht hin und wäre Euch dankbar, wenn Ihr mir helfen könntet.
Es geht hierbei um die Möglichkeit von Reihenfolgen.
(Das Herausfinden einer Reihenfolge ist kein Problem.)
Das Problem wird nachher der spätere Vergleich.

Aufgabe: Ein Array initialisieren, das feste integer Werte enthält.

Beispiel: Bei 2 Werten habe ich 2 Möglichkeiten, nämlich
- erst 1, dann 2
- erst 2, dann 1
Ich kann also sagen, das 1 Array enthält 2 feste Werte, nämlich 1 und 2
und das 2. Array enthält 2 feste Werte, nämlich 2 und 1.
Code:

int Array1[2]={1,2}; //2 Werte: 1 und 2
int Array2[2]={2,1}; //2 Werte: 2 und 1

Wenn ich nun ein gefundenes Ergebnis vergleichen will, kann ich das nur mit einer if-Abfrage machen
Code:

if(ErgebnisArray[0]==Array1[0]) Is12;
if(ErgebnisArray[0]==Array2[0]) Is21;

Problem: Bei höheren Werten (3,4,5...) steigen die Möglichkeiten fakultätsartig.
Das heißt, bei 3 hätte ich schon 6 feste Arrays zu definieren und dementsprechend auch 6 if-Abfragen.
Um das ganze in einen Loop zu packen, müßte ich die Arrays zu einem zusammenfassen, etwa so:
Code:

int ArrayBis2[hat 2 Zeilen][mit 2 Werten]={ ?1,2? , ?2,1?};
Egal wie ich versuche, das zu schreiben, ich krieg nur Fehlermeldungen.
Mache ich einen Denkfehler, habe ich ein Verständnisproblem?

Wäre nett, wenn mich jemand hier wieder auf die Spur bringen könnte.
Danke. AVT

traderdoc 02.01.21 12:52

Also das Array

int arr[2][2] = {1,2,2,1};

wird über Print folgendes Ergebniss zu den 4 Feldern ausgeben:

1,2,2,1

für [0][0],[0][1],[1][0],[1][1]

traderdoc

Indikator-Trading 02.01.21 14:11

So wie ich das verstehe, möchtest du das ja möglichst flexibel haben.
Einzelne If-Abfragen brauchst du auf jeden Fall nicht hinzuzufügen, sondern einfach in einer For-Schleife, welche beider Array durchgeht (Wenn du nicht ein zweidimensionales machen möchtest) abfragen.

Code:

  ArrayResize(MyArrayA,4,0);
  ArrayResize(MyArrayB,4,0);
  MyArrayA[0] = 0;
  MyArrayA[1] = 1;
  MyArrayA[2] = 2;
  MyArrayA[3] = 3;
 
  MyArrayB[0] = 3;
  MyArrayB[1] = 2;
  MyArrayB[2] = 1;
  MyArrayB[3] = 0;
 
  for(int i=0 ; i<ArraySize(MyArrayA) ; i++)
    for(int j=0 ; j<ArraySize(MyArrayB) ; j++)
      if(MyArrayA[i] == MyArrayB[j])
        Print("MyArrayA["  , i , "] == MyArrayB[",j,"]");


AVT 02.01.21 14:31

Zitat:

Zitat von traderdoc (Beitrag 44907)
Also das Array

int arr[2][2] = {1,2,2,1};

wird über Print folgendes Ergebniss zu den 4 Feldern ausgeben:

1,2,2,1

für [0][0],[0][1],[1][0],[1][1]

traderdoc

Danke @traderdoc.
So wie Du die Definition geschrieben hast, das war mir nicht klar,daß man die quasi einfach alle hintereinander schreiben kann.
(auch wenn ich da lieber ein Leerzeichen zwischen den Kombis hätte - so rein wegen der Übersicht) ;)

Ich habe das dann anfangs so probiert (funzt), mit Werteloop:
Code:

int ArrayBis2[2][2]={ {1,2}, {2,1} }; //Wertekombination in {}Klammer

for (int k=0; k<2; k++)
{
  Print("---");
  for(int y=0; y<2; y++)
  {
      Print(" ArrayBis2 Nr k: ",(int)k," Nr y: ",(int)y,
            " Index k[y]: ",IntegerToString(ArrayBis2[k][y] );
  }
}
//Resultat:
//ArrayBis2 Nr k: 1 Nr y: 1 Index k[y]: 1
//ArrayBis2 Nr k: 1 Nr y: 0 Index k[y]: 2
//---
//ArrayBis2 Nr k: 0 Nr y: 1 Index k[y]: 2
//ArrayBis2 Nr k: 0 Nr y: 0 Index k[y]: 1
//---

Allerdings bin ich jetzt auf die Idee gekommen, das ganze geht einfacher mit einem string Vergleich.
Ich will ja wissen, welche Möglichkeit ich grade erwischt habe:
- wenn der string "1,2" lautet, ist es die 1. Möglichkeit
- wenn der string "2,1" lautet, ist es die 2. Möglichkeit
Also einfach: string ArrayBis2[2]={"1,2","2,1"};
Bedeutet allerdings das Herausfinden für das Ergebnis umschreiben auf string, aber das krieg ich hin.

Noch mal Danke, wieder was dazugelernt. :D
AVT


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:45 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum