Themen Bewertung:
  • Aktuell 3.00/5

Autor Thema: Zweidimensionales Array, erste Dimension double, 2 Dimension string  (Gelesen 640 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

  • UP49
  • Gast
  • Allow
Hallo alle zusammen, hier kann mir bestimmt jemand helfen, hoffe ich zumindest ;)

Ich habe ein 2 dimensionales Array

Code: Es ist Dir nicht erlaubt Links zu betrachten. Registrieren oder Einloggen
TMP[50][2]; // Array 50 Elemente [0]<- Spread  [1]<-Währung
Frage1: Wie erstelle ich ein Array dessen 1 Dimension ein double und die 2 ein string ist?

Frage2: Wie kann ich dieses Array nach dem Spread ordnen?

Vielen Dank im Vorraus, mir raucht der Kopf :D


  • Global Moderator
  • Ist Forum süchtig
  • *
  • *
  • *
    • Beiträge: 1718
    • Karma: +422/-6
    • Mitglied seit:
      11 Aug 2009
  • Broker: IGMarkets

  • Mars Defense Car Chaos Get Groovy BallsPC Motorrad-Trauma
    Bloons Tower Defense
  • Allow
Re: Zweidimensionales Array, erste Dimension double, 2 Dimension string
« Antwort #1 am: August 18, 2011, 14:04:03 pm »
AFAIK in mql4 gar nicht.... ^^

Du müsstes dir einen Datentyp erstellen...

Code: Es ist Dir nicht erlaubt Links zu betrachten. Registrieren oder Einloggen
class Pair
{
  double fSpread;
  string fName;
}

Pair[] fPairs;
Alternativ nimmst du sowohl ein double Array als auch ein String-Array und hast die Zuordnung über den Index.... beim Sortieren musst du dann natürlich in beiden Array swapen!
Chleudere den Purchen zu Poden!

  • Tastaturflitzer
  • ***
    • Beiträge: 238
    • Karma: +54/-12
    • Mitglied seit:
      26 Mar 2010

  • Stop
Re: Zweidimensionales Array, erste Dimension double, 2 Dimension string
« Antwort #2 am: August 18, 2011, 14:09:44 pm »
Hi Du,

vorweg, bin kein Profi, was mt4 betrifft, da ich es mir aber gerade ansehe, kann ich Dir vielleicht was dazu sagen.
Soweit ich die MQL Reference verstanden habe, kann man keine eigenen Datentypen definieren.
Dein Problem wird so direkt nicht zu lösen sein.

die faule schnelle Variante wäre wohl, sich aus beiden Werten einen String zusammenzubasteln, mit semikolon getrennt.
und dann zu definieren:

string myarray[50];

da kommt dann rein  "2.00;EURUSD"
(bei Stringsortierung auf gleiche Anzahl Nachkommastellen achten)

und dann die fertigen Sortierfunktionen von mt4 nutzen. und dann ArraySort

Oder eben 2 Arrays und die händisch mit einem  eigenem Sortieralgo selber doppelt parallel sortieren.

« Letzte Änderung: August 18, 2011, 14:16:15 pm von Covolt »

  • UP49
  • Gast
  • Allow
Re: Zweidimensionales Array, erste Dimension double, 2 Dimension string
« Antwort #3 am: August 18, 2011, 14:19:31 pm »
Ohh vielen Dank für die schnellen Antworten, das mit dem datentyp habe ich so noch nicht verstanden, wenn das folgende nicht geht wäre es nett, wenn du das nochmal genauer erklären könntest.

Die 2 Idee las sich nicht schlecht, ich dachte wenn ich 1;EURUSD und 2;AUDUSD im Array habe geht ArraySort, aber Pustekuchen :D

2011.08.18 14:16:53 EA_5 EURUSD,M5: ArraySort function does not process string arrays

Sieht wohl so aus als wenn ich in einer Schleife den Wert holen, dann in einer 2 Schleife die anderen Werte prüfen und dann ein neues Array erstellen muss ;(

  • Global Moderator
  • Ist Forum süchtig
  • *
  • *
  • *
    • Beiträge: 1718
    • Karma: +422/-6
    • Mitglied seit:
      11 Aug 2009
  • Broker: IGMarkets

  • Mars Defense Car Chaos Get Groovy BallsPC Motorrad-Trauma
    Bloons Tower Defense
  • Allow
Re: Zweidimensionales Array, erste Dimension double, 2 Dimension string
« Antwort #4 am: August 18, 2011, 14:24:49 pm »
Kleiner SelectionSort geht auch per Hand sehr easy zu proggen..... und wie cobolt schon sagte, Datentypen funzen nicht in MQL4....
Chleudere den Purchen zu Poden!

  • Tastaturflitzer
  • ***
    • Beiträge: 238
    • Karma: +54/-12
    • Mitglied seit:
      26 Mar 2010

  • Stop
Re: Zweidimensionales Array, erste Dimension double, 2 Dimension string
« Antwort #5 am: August 18, 2011, 14:27:51 pm »
Es ist Dir nicht erlaubt Links zu betrachten. Registrieren oder Einloggen


2011.08.18 14:16:53 EA_5 EURUSD,M5: ArraySort function does not process string arrays

Sieht wohl so aus als wenn ich in einer Schleife den Wert holen, dann in einer 2 Schleife die anderen Werte prüfen und dann ein neues Array erstellen muss ;(


oh, da musst Du wohl dann doch selber ran .. ja ... wobei Dein Verfahren sicher sehr umständlich wäre.
Schau Dir wenigstens mal den einfachsten (langsamsten) Sortieralgo Bubblesort an:

Es ist Dir nicht erlaubt Links zu betrachten. Registrieren oder Einloggen
Es ist Dir nicht erlaubt Links zu betrachten. Registrieren oder Einloggen

Wenn Du dort, wenn 2 Werte des ersten Arrays zu vertauschen sind, auch noch die Werte gleich des anderen Arrays vertauscht, hast Du beide sortiert, als wäre es ein Array ..



  • UP49
  • Gast
  • Allow
Re: Zweidimensionales Array, erste Dimension double, 2 Dimension string
« Antwort #6 am: August 18, 2011, 14:31:05 pm »
Naja ich versuche mal mein Glück, wenns nichts wird melde ich mich nochmal und dann müßt Ihr leider nochmal ran lach :D

Habt Dank ;)

  • Tastaturflitzer
  • ***
    • Beiträge: 238
    • Karma: +54/-12
    • Mitglied seit:
      26 Mar 2010

  • Stop
Re: Zweidimensionales Array, erste Dimension double, 2 Dimension string
« Antwort #7 am: August 18, 2011, 14:35:46 pm »
probier mal, ob das so geht  (nur anderes codebeispiel umgeschrieben, ungetestet)

void BubbleSort(double& data[], string& stringdata[],int count)
  {
   int    i, j;
   double x;
   string s;
//----
   for(i=1;i<count; i++)
     for(j=count-1;j>=i;j--)
       if(data[j-1]>data[j])
         {
          x=data[j];
          data[j]=data[j - 1];
          data[j-1]=x;

         s=stringdata[j];
         stringdata[j]=stringdata[j - 1];
         stringdata[j-1]=s;
         }
//----
  }

  • Global Moderator
  • Ist Forum süchtig
  • *
  • *
  • *
    • Beiträge: 1718
    • Karma: +422/-6
    • Mitglied seit:
      11 Aug 2009
  • Broker: IGMarkets

  • Mars Defense Car Chaos Get Groovy BallsPC Motorrad-Trauma
    Bloons Tower Defense
  • Allow
Re: Zweidimensionales Array, erste Dimension double, 2 Dimension string
« Antwort #8 am: August 18, 2011, 14:36:16 pm »
Es ist Dir nicht erlaubt Links zu betrachten. Registrieren oder Einloggen
... dann müßt Ihr leider nochmal ran lach :D
Nee, erstmal musst du nochmal ran lach! Stell dich doch mal kurz im User-Board mit einem eigenen Thread vor.... wäre klasse  :welldone:
Chleudere den Purchen zu Poden!

  • UP49
  • Gast
  • Allow
Re: Zweidimensionales Array, erste Dimension double, 2 Dimension string
« Antwort #9 am: August 18, 2011, 14:37:43 pm »
von Es ist Dir nicht erlaubt Links zu betrachten. Registrieren oder Einloggen ;) ???

Hab ich auch eben gefunden, ich teste ;)

Muss nur aufpassen das sich da nichts verschiebt, sonst komm ich in Teufels Küche bei ca. 50 Werten ;)

  • UP49
  • Gast
  • Allow
Re: Zweidimensionales Array, erste Dimension double, 2 Dimension string
« Antwort #10 am: August 18, 2011, 15:04:27 pm »
Ich muss leider nochmal fragen bevor ich was baue was ich nicht verstehe setze ich mich lieber solange damit auseiander bis es klick macht...

Ich versuche mich mal, bitte korrigiert mich...

Klar ist, ich hab 2 Arrays, in einem den Spread -> sprd[50] und im anderen die Währungen curr[50], beide enthalten im selben Index die zueinander passenden Werte, die übergebe ich an BubbleSort().

Der Rest verwirrt mich etwas, oder ich stehe gerade auf dem Schlauch.

Warum den count mit übergeben, den kann ich doch mit ArrayRange direkt in der Funktion ermitteln?

Code: Es ist Dir nicht erlaubt Links zu betrachten. Registrieren oder Einloggen

void BubbleSort(double& sprd[], string& curr[]){
 int i, j;
 int count = ArrayRange(sprd,0);
 double x;
 string s;
 
 for(i=1; i < count; i++){ // Schleife von 1 bis 50

  for(j = count-1; j>=i; j--){ // j=50-1 > Schleife von 49 bis i, das verstehe ich gerade nicht
   if(sprd[j-1] > sprd[j]){ // wenn der Spread im Element j-1 grösser ist als j wird das Element nach rechts bzw. oben verschoben?
   
    x = sprd[j];
    sprd[j] = sprd[j - 1];
    sprd[j-1] = x;
   
    s = curr[j];
    curr[j] = curr[j - 1];
    curr[j-1] = s;
   
   }
  }
 
 }
}


Wenn ich das also richtig sehe, zählt die erste Schleife + 1 nach oben, so oft wie Elemente vorhanden sind.

Schleife 2 fängt dann von oben an, prüft jeden Wert nach unten, wenn der grösser ist wird das Element nach oben verschoben?
« Letzte Änderung: August 18, 2011, 15:15:25 pm von UP49 »

  • UP49
  • Gast
  • Allow
Re: Zweidimensionales Array, erste Dimension double, 2 Dimension string
« Antwort #11 am: August 18, 2011, 15:49:28 pm »
So ich glaub ich hab es jetzt ;)

Also, wir starten bei i = 1, also werden alle Elemente von 49 bis 0 sprd[49] und sprd[48] verglichen, ist sprd[48]>sprd[49] werden 48 und 49 getauscht.

Die Schleife schiebt als den kleineren Wert immer um eins nach unten, wenn der kleinste unten angekommen ist muss 0 nicht mehr geprüft werden, deswegen erhöht sich i +1 und es wird nur noch 49->1 verglichen, danach 49->2 usw., diesmal sollte es passen ;) oder ?
« Letzte Änderung: August 18, 2011, 16:15:47 pm von UP49 »

  • UP49
  • Gast
  • Allow
Re: Zweidimensionales Array, erste Dimension double, 2 Dimension string
« Antwort #12 am: August 18, 2011, 16:23:56 pm »
Nur noch eine abschliessende Frage, was macht das & im Funktionsaufruf?



 

Ähnliche Themen

  Betreff / Begonnen von Antworten Letzter Beitrag
92 Antworten
10849 Aufrufe
Letzter Beitrag September 21, 2011, 13:38:37 pm
von Stevywin
20 Antworten
2466 Aufrufe
Letzter Beitrag Dezember 06, 2010, 09:22:23 am
von nightyhawk
3 Antworten
513 Aufrufe
Letzter Beitrag August 19, 2011, 12:54:01 pm
von nightyhawk


ChartTec´s World Topsites