|
Startseite | Registrieren | Hilfe | Benutzerliste | Kalender | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren |
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Anfängerfrage zur While-Schleife
Ich arbeite gerade das Buch
https://book.mql4.com durch um zu lernen. Nun ist mir in folgendem Übungscode etwas aufgefallen: Code:
// ------------------------------------------------ ---------------------------------------- // fibonacci.mq4 // Der Code sollte nur für Ausbildungszwecke verwendet werden . // ------------------------------------------------ ---------------------------------------- Int start () // Sonderfunktion start () { // ------------------------------------------------ ---------------------------------------- Int i ; // Formaler Parameter, Zähler double A , B , C , // Zahlen in der Sequenz Delta , // Wirklicher Unterschied zwischen Koeffizienten D ; // Voreingestellte Genauigkeit // ------------------------------------------------ ---------------------------------------- A = 1 ; // Ursprünglicher Wert B = 1 ; // Anfangswert C = 2 ; // Anfangswert D = 0,0000000001 ; // Genauigkeit einstellen Delta = 1000,0 ; // Anfangswert // ------------------------------------------------ ---------------------------------------- while ( Delta > D ) // while Scheleifen Operator Header { // Eröffnungsklammer der while-Schleife I ++; // Zähler A = B ; // Nächster Wert B = C ; // Nächster Wert C = A + B ; // Nächster Wert Delta = MathAbs ( C / B - B / A ) ; // Suchdifferenz zwischen Koeffizienten } // Verschlussklammer des der while schleife // ------------------------------------------------ ---------------------------------------- Alert ( " C = " , C , " Fibonacci-Zahl = " , C / B , " i = " , i ) ; // Anzeige auf dem Bildschirm return ; // Exit start () } // ------------------------------------------------ ---------------------------------------- Muss die nicht deklariert werden oder gehen wir davon aus, dass sie schon deklariert ist und das nicht Bestandteil des Übungscodes ist? |
|
|||
Das ist sicherlich einfach ein Groß/Kleinschreib-Fehler denn oben ist der Zähler int i zu finden. Nimm in der Schleife einfach i++; statt I++;.
Und zur besseren Lesbarkeit sollte man den Code einrücken. C$D |
|
|||
@Ca$hDigger sagt es, zur besseren Lesbarkeit Code einrücken!
Benutzt hier im Editor in der Menüleiste das Zeichen # schreibt dort den Code dazwischen, rückt den Code mindestens nach jedem { ein. Es gibt zahlreiche schöne Beispiele. Wenn möglich auch Variablen in ähnlichen untereinanderstehenden Gleichungen auf gleiche Höhe schreiben, Vergleichszeichen auf gleiche Höhe und den Kommentartext weit rechts dann selbst linksbündig. In Deinen Codebeispiel ist nicht nur das i falsch geschrieben, sondern auch die beiden Int, die eigentlich als int zu schreiben wären. Üblicherweise werden lokale Variablen wie hier innerhalb der Funktion start() klein geschrieben, globale Variablen dagegen mit einem beginnenden Großbuchstaben, zur besseren Unterscheidbarkeit. Gelegentlich wird zur internen Kennzeichnung der Variablentyp in die Variable integriert, z.B. int ivariable oder int i_variable bzw. double dvariable oder d_variable Das dient dem besseren Verständnis, da man sofort an dem ersten Buchstaben erkennt, um welchen Variablentyp es sich handelt. Also, gewöhnt Euch von vornherein an, den Code gut strukturiert, nicht in ellenlangen Zeilen, eingerückt und mit verständlichen Variablennnamen zu schreiben. Das hilft v.a. auch denen, die sich hier auf die Fehlersuche begeben. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Sorry für das fehlende Einrücken, dass kenne ich auch so.
War aber eben die Datei aus dem darüber erwähnten Buch. Jedoch hätte ich das korrigieren sollen - mein Fehler. Copy & Paste ist halt nicht immer das Beste Die Tips bezüglich der Groß- und Kleinschreibung sind echt wertvoll - Danke. Obgleich der Autor des Buches diese Fehler oft wiederholt... In der Deklaration groß geschrieben und unten dann Klein. MQL4 ist doch Groß- und Kleinschreibungssensitiv - oder? Ich meine das so gelesen zu haben. Und hier noch mal der Code zum Zeichnen , dass ich verstanden haben ;-) Code:
// ------------------------------------- // fibonacci.mq4 // Der Code sollte nur für Ausbildungszwecke verwendet werden . // ------------------------------------ Int start () // Sonderfunktion start () { // ------------------------------------ // Formaler Parameter, Zähler double A , B , C , // Zahlen in der Sequenz Delta , // Wirklicher Unterschied zwischen Koeffizienten D ; // Voreingestellte Genauigkeit // ------------------------------------- A = 1 ; // Ursprünglicher Wert B = 1 ; // Anfangswert C = 2 ; // Anfangswert D = 0,0000000001 ; // Genauigkeit einstellen Delta = 1000,0 ; // Anfangswert // ------------------------------------- while ( Delta > D ) // while Scheleifen Operator Header { // Eröffnungsklammer der while-Schleife I ++; // Zähler A = B ; // Nächster Wert B = C ; // Nächster Wert C = A + B ; // Nächster Wert Delta = MathAbs ( C / B - B / A ) ; // Suchdifferenz zwischen Koeffizienten } // Verschlussklammer des der while schleife // ------------------------------------- Alert ( " C = " , C , " Fibonacci-Zahl = " , C / B , " i = " , i ) ; // Anzeige auf dem Bildschirm return ; // Exit start () } |
|
|||
Ne das passt noch nicht. Jetzt existiert die Variable int i gar nicht mehr und in der Schleife ist weiterhin das i groß was wiederum nicht zu dem kleinen i im Alert passt
Und int start ist auch immer noch groß geschrieben. C$D |
|
|||
Code:
//-------------------------------------------------------------------- // fibonacci.mq4 //-------------------------------------------------------------------- int start() { //-------------------------------------------------------------------- int i; double A,B,C, Delta, D; //-------------------------------------------------------------------- A=1; B=1; C=2; D=0.0000000001; Delta=1000.0; //-------------------------------------------------------------------- while(Delta > D) { i++; A=B; C=A + B; Delta=MathAbs(C/B - B/A); } //-------------------------------------------------------------------- Alert("C=",C," Meldungstext=",C/B," i=",i); return; } //-------------------------------------------------------------------- Gleich die nächste Frage: Wo bekommt den "case" hier den entsprechenden Zustand zugewiesen? Also wie wird "case" in dem Beispiel aus dem Buch eigentlich ausgelöst? Code:
//-------------------------------------------------------------------- // pricealert.mq4 // Code für Lernzwecke //-------------------------------------------------------------------- int start() // Startfunktion { double Level=1.3200; // Voreingestelltes Preislevel int Delta=NormalizeDouble((Bid-Level)/Point,0); // Überschuss if (Delta<=0) // Wenn Preis unter dem Level { Alert("Preis liegt unter dem Level"); // Nachricht return; // Exit start() } //-------------------------------------------------------------------- switch(Delta) // Header von Switch { // Start der Switch- Schleife case 1 : Alert("Plus 1 Punkt"); break; // Varianten... case 2 : Alert("Plus 2 Punkt2"); break; case 3 : Alert("Plus 3 Punkt2"); break; case 4 : Alert("Plus 4 Punkt2"); break; //Hier werden case 5 : Alert("Plus 5 Punkt2"); break; //10 Fälle vorgestellt case 6 : Alert("Plus 6 Punkt2"); break; //aber es sind case 7 : Alert("Plus 7 Punkt2"); break; //unbegrenzte Möglichkeiten case 8 : Alert("Plus 8 Punkt2"); break; //dieser Fälle möglich case 9 : Alert("Plus 9 Punkt2"); break; case 10: Alert("Plus 10 Punkt2");break; //("Mehr als 10 Punkte"); default: Alert } // Ende der switch - Schleife return; // Exit start() } //-------------------------------------------------------------------- Geändert von Drehrumbumm (25.02.17 um 16:34 Uhr) Grund: Schreibfehler gemacht |
|
|||
bei fibonacci.mq4 fehlt in der while-schleife jetzt das i++
edit: ok du hast es gerade geändert |
|
|||
Hm und welche Funktion übt nun die Variable i aus?
Case läuft über Delta in switch(Delta) traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Zitat:
Zum Thema Case: Heißt also, das der Wert Delta in switch (Delta) die case-Anweisungen durchrasselt, bis eine gefunden wird, die wahr ist - richtig? |
|
|||
Zitat:
Die Variable Delta stellt mit ihrem Wert die Größe dar, nach der die case Abfrage sucht. Ist case 1 true, dann wir die dahinterstehende Anweisung ausgeführt, wenn nicht, dann wird weiter gesucht usw. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
Lesezeichen |
Stichworte |
buch, buch programmierung, mql4, programmierung, programmierung metatrader, programmierung mql4, while-anweisung |
Themen-Optionen | Thema durchsuchen |
Ansicht | |
|
|