Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 634

 

Hat jemand ein Stück Code für ein Beispiel, wo Elemente eines String-Arrays in alphabetischer Reihenfolge gruppiert werden?

vielen Dank im Voraus.

 
Hobu:

Hier

https://docs.mql4.com/ru/basis/operators/return

heißt es:

"Sie können einfache Typen, einfache Strukturen und Zeiger auf Objekte zurückgeben. DerRückgabeoperator kann keine Arrays, Klassenobjekte oder Variablen mit komplexen Strukturtypen zurückgeben.

"

Sieht das nach dem aus, was gebraucht wird?

Es werden russische Bezeichnungen verwendet, so dass es etwas ungewöhnlich aussieht:

#property strict

/******************************************************************************/
struct ОфигеннаяСтруктура {
private:
  int значение;

public:
  ОфигеннаяСтруктура(int значение = 0): значение(значение) { }
  int выдатьЗначение() const { return значение; }
};

/******************************************************************************/
ОфигеннаяСтруктура Функа(int значение) {
  ОфигеннаяСтруктура местная(значение);

  return местная; // Возвращаем структуру из функции
}

/******************************************************************************/
void OnStart() {
  Print("Начинаем безобразничать...");

  ОфигеннаяСтруктура штукаРаз = Функа(5);

  Print("Значение штукиРаз = ", штукаРаз.выдатьЗначение());

  ОфигеннаяСтруктура штукаДва;

  Print("Значение штукиДва первое = ", штукаДва.выдатьЗначение());
  штукаДва = Функа(7);
  Print("Значение штукиДва второе = ", штукаДва.выдатьЗначение());

  Print("Заканчиваем безобразничать...");
}

Das Ergebnis dieser Prüfung ist wie folgt:

23:55:39 Script 1 EURUSDm,H1: loaded successfully
23:55:39 1 EURUSDm,H1: initialized
23:55:39 1 EURUSDm,H1: Начинаем безобразничать...
23:55:39 1 EURUSDm,H1: Значение штукиРаз = 5
23:55:39 1 EURUSDm,H1: Значение штукиДва первое = 0
23:55:39 1 EURUSDm,H1: Значение штукиДва второе = 7
23:55:39 1 EURUSDm,H1: Заканчиваем безобразничать...
23:55:39 1 EURUSDm,H1: uninit reason 0
23:55:39 Script 1 EURUSDm,H1: removed
Das Objekt thingRaz wird mit dem von der Funktion Funk zurückgegebenen Objekt (Struktur) initialisiert, und das Objekt thingTwo wird mit dem Standardwert initialisiert, aber dann wird ihm ein Objekt (Struktur) zugewiesen, das ebenfalls von der Funktion Funk zurückgegeben wird.
 
simpleton:

Sieht das nach dem richtigen Weg aus?

Es wurden russische Bezeichnungen verwendet, so dass es ein wenig ungewöhnlich aussieht:

Das Ergebnis der Ausführung ist wie folgt:

Das Objekt thingRaz wird mit dem von der Funktion Funk zurückgegebenen Objekt (Struktur) initialisiert, und das Objekt thingTwo wird mit dem Standardwert initialisiert, aber dann wird ihm ein Objekt (Struktur) zugewiesen, das ebenfalls von der Funktion Funk zurückgegeben wird.

 

Können Sie bitte ausführlich auf die Art und Weise eingehen, die dieser Einfaltspinsel beschrieben hat, und zwar jede Zeile einschließlich der Syntax? Ich verstehe noch nicht, was das bedeutet. Nicht unbedingt an den Fingern, man kann auch Begriffe verwenden, aber Zeile für Zeile.

1) Gibt die Funktion von Funk also ein Objekt zurück und nicht irgendeinen mittelmäßigen Wert, wie es andere mittelmäßige Funktionen tun? Was ist das für ein Tier, warum ist es ein Objekt?

2) Können wir entweder mit einem von der Funktion zurückgegebenen Objekt oder einem Standardwert initialisieren? Das heißt, die Funk-Funktion hat, obwohl sie Teil derselben Struktur ist, nichts mit dem Objekt Thing 2 zu tun, oder verstehe ich da etwas falsch? Übrigens, es wird als Objekt bezeichnet, also hat die Struktur auch ein Objekt? Ich dachte, es sei einfacher als das. Und noch eine Frage: Wie genau kopiere ich eine Struktur in eine andere, wenn sie vom gleichen Typ sind? Diese einfache Zeile.

ОфигеннаяСтруктура штукаДва;

und es gibt ein berüchtigtes Kopieren? Und es gibt keine Notwendigkeit, die Struktur von Stuka 2 separat zu deklarieren, und es ist überhaupt keine Struktur, sondern ein Objekt, das von einer Struktur erzeugt wird?

Ich bin irgendwie mit keiner Programmiersprache vertraut (aber nicht gegen das Lernen) und habe außerdem eine eher vage Vorstellung von OOP, also seien Sie nicht überrascht, wenn die Fragen dumm sind.

Ups, ich habe gerade gesehen, dass die Klammern vorher geschlossen sind, d.h. diese Funka wird außerhalb der Struktur beschrieben, aber was genau ist sie in Bezug auf die Struktur Awesome?

 
Hobu:

Können Sie bitte ausführlich auf die Art und Weise eingehen, die dieser Einfaltspinsel beschrieben hat, und zwar jede Zeile einschließlich der Syntax? Ich verstehe noch nicht, was das bedeutet. Nicht unbedingt an den Fingern, man kann auch Begriffe verwenden, aber Zeile für Zeile.

1) Gibt die Funktion von Funk also ein Objekt zurück und nicht irgendeinen mittelmäßigen Wert, wie es andere mittelmäßige Funktionen tun? Was ist das für ein Tier, warum ist es ein Objekt?

2) Können wir entweder mit einem von der Funktion zurückgegebenen Objekt oder einem Standardwert initialisieren? Das heißt, die Funk-Funktion hat, obwohl sie Teil derselben Struktur ist, nichts mit dem Objekt Thing 2 zu tun, oder verstehe ich da etwas falsch? Übrigens, es wird als Objekt bezeichnet, also hat die Struktur auch ein Objekt? Ich dachte, es sei einfacher als das. Und noch eine Frage: Wie genau kopiere ich eine Struktur in eine andere, wenn sie vom gleichen Typ sind? Diese einfache Zeile.

Und dann ist da noch das berühmt-berüchtigte Kopieren? Und Sie müssen die Struktur vom Typ 2 nicht gesondert deklarieren und es handelt sich gar nicht um eine Struktur, sondern um ein Objekt, das durch eine Struktur erzeugt wird?

Ich bin irgendwie mit keiner Programmiersprache vertraut (aber nicht gegen das Lernen) und habe außerdem eine eher vage Vorstellung von OOP, also seien Sie nicht überrascht, wenn die Fragen dumm sind.

Ups, ich habe gerade gesehen, dass die geschweiften Klammern vorher geschlossen sind, d.h. diese Funktion wird außerhalb der Struktur beschrieben, aber was genau ist sie in Bezug auf die Struktur Awesome?

So etwas wie das hier, verglichen mit dem Gleichen, aber für eine Variable eines der eingebauten Typen:
#property strict

/******************************************************************************/
struct ОфигеннаяСтруктура { // Заводим структуру
private: // Просто так извне к следующим элементам нельзя обратиться
  int значение; // Поле данных для хранения в структуре

public: // К следующим элементам можно просто так обратиться извне
  ОфигеннаяСтруктура(int значение = 0): значение(значение) { } // Конструктор: инициализирует поле значением переданного параметра; если параметр не передан, используется значение по умолчанию, равное 0
  int выдатьЗначение() const { return значение; } // Метод: возвращает значение поля, может вызываться для структур, переменные для которых объявленных как константные
};

/******************************************************************************/
ОфигеннаяСтруктура Функа1(int значение) { // Функция, возвращающая структуру
  ОфигеннаяСтруктура местная(значение); // Создание локальной переменной, в данном случае, судя по типу, это - структура

  // Если структура посложнее, чем в этом примере, то тут можно выполнить над ней какие-то дополнительные действия

  return местная; // Возвращаем структуру из функции
}

/******************************************************************************/
string Функа2(int значение) { // Функция, возвращающая один из встроенных типов
  string Таблица[] = {"Ноль", "Один", "Два"};

  /* Никакого особого смысла тут нет, просто имитация деятельности */
  return Таблица[значение % 3]; // Возвращаем строку из функции (остаток от деления параметра на три словами)
}

/******************************************************************************/
void OnStart() {
  Print("Начинаем безобразничать...");

  ОфигеннаяСтруктура штукаРаз = Функа1(5); // Заводим переменную (структуру) с одновременной инициализацией
  string строкаРаз = Функа2(5); // Заводим переменную (один из встроенных типов) также с инициализацией

  Print("Значение штукиРаз = ", штукаРаз.выдатьЗначение()); // Для получения значения поля структуры вызывается специально под это написанный метод
  Print("Значение строкиРаз = ", строкаРаз);

  ОфигеннаяСтруктура штукаДва; // Заводим переменную (структуру) без явной инициализации (конструктор получает в качестве значения параметра значение, указанное по умолчанию, и структура инициализируется им)
  string строкаДва; // Заводим переменную (один из встроенных типов) без инициализации (переменные типа string, объявленные таким образом, инициализируются пустой строкой)

  Print("Значение штукиДва первое = ", штукаДва.выдатьЗначение());
  Print("Значение строкиРаз первое = '", строкаРаз, "'");

  штукаДва = Функа1(7); // Присвоение переменной штукаДва типа структура значения типа структура, возвращённого функцией Функа1
  строкаДва = Функа2(7); // Присвоение переменной строкаДва одного из встроенных типов (строка) значения того же типа, возвращённого функцией Функа2

  Print("Значение штукиДва второе = ", штукаДва.выдатьЗначение());
  Print("Значение строкиРаз второе = '", строкаРаз, "'");

  Print("Заканчиваем безобразничать...");
}

Das Ergebnis des Laufs ist wie folgt:

21:16:29 Script 1 EURUSDm,H1: loaded successfully
21:16:29 1 EURUSDm,H1: initialized
21:16:29 1 EURUSDm,H1: Начинаем безобразничать...
21:16:29 1 EURUSDm,H1: Значение штукиРаз = 5
21:16:29 1 EURUSDm,H1: Значение строкиРаз = Два
21:16:29 1 EURUSDm,H1: Значение штукиДва первое = 0
21:16:29 1 EURUSDm,H1: Значение строкиРаз первое = ''
21:16:29 1 EURUSDm,H1: Значение штукиДва второе = 7
21:16:29 1 EURUSDm,H1: Значение строкиРаз второе = 'Один'
21:16:29 1 EURUSDm,H1: Заканчиваем безобразничать...
21:16:29 1 EURUSDm,H1: uninit reason 0
21:16:29 Script 1 EURUSDm,H1: removed

Funktionen geben Objekte des in der Deklaration angegebenen Typs zurück. Unter Objekten verstehen wir hier nicht nur Strukturen, sondern auch eingebaute Typen.

Wenn der Typ des zurückgegebenen Wertes für die Funktion Funk1 vom Typ OffigenStructure ist, der eine Struktur ist, bedeutet dies, dass diese Funktion die Werte der Strukturen zurückgibt, und zwar nur vom Typ OffigenStructure. Er tut dies, weil und nur weil seine Deklaration/Definition diesen Rückgabetyp hat.

Sie können ihn mit einem solchen Wert oder solchen Werten initialisieren, genau wie einer der Konstruktoren. Man kann auf Konstruktoren verzichten, aber ihre Initialisierungssyntax ist ein wenig anders und sie haben ihre eigenen Einschränkungen.

In diesem Fall nimmt der Konstruktor einen Wert vom Typ int an, so dass eine Variable vom Typ OxygenStructure mit einem Wert vom Typ int oder einem anderen Typ initialisiert werden sollte, der jedoch implizit in int umgewandelt wird.

Da der Standardwert für den Parameter, den der Konstruktor akzeptiert, angegeben ist, müssen Sie dem Konstruktor keinen Wert übergeben. Der Konstruktor wird trotzdem aufgerufen, aber es wird der Standardparameter verwendet.

Diese unkomplizierte Zeichenkette ist lediglich eine Deklaration für eine Variable vom TypStructure. Das Kopieren von Strukturen desselben Typs ineinander ist sehr einfach, genau wie das "Kopieren" der Werte einer eingebauten Typvariablen. Sie müssen einen Wert von einer Variablen zur anderen zuweisen. Zum Beispiel: "thingRaz = thingTwo;". Führen Sie es selbst aus und drucken Sie den Wert aus, den die Variable shtuRaz nach dieser Zuweisung hat.

Funk1 hat nichts mit Strukturen vom TypOfgenericStructure zu tun, außer dass es Werte dieses Typs zurückgibt.

Sie brauchen eine allgemeine Ausbildung, ohne sie werden Sie "ertrinken". Ich bin nicht bereit, Ihnen Ratschläge zu erteilen.

Ausgehend von dem, was ich sehe, kann ich Ihnen die folgenden Ratschläge geben (die Grundlagen):

1. Die Daten in einem Programm werden in benannten Speicherbereichen, den sogenannten Variablen, gespeichert.

2. Der Variablentyp bestimmt die Art der Interpretation der gespeicherten Daten und in den allermeisten Fällen ihre Größe. Die Art der Interpretation impliziert eine Reihe von Operationen, die mit den Daten durchgeführt werden können.

3. Eingebettete und strukturierte Typen unterscheiden sich aus dieser Sicht konzeptionell nicht.

Punkt 2 ist der wichtigste und grundlegendste zu verstehen. In C++ und MQL ist der Begriff des Typs sehr wichtig.

Kurz gesagt: Ein Typ ist ein "Muster" von Daten, und eine Variable ist eine Einheit dieses Musters. Eine Katze oder ein Hündchen ist ein "Muster", und bestimmte Katzen wie Murzyk oder Hunde wie Sharik sind Einheiten von Katzen und Hunden. Das Gleiche gilt für Typen und Variablen.

 
Hobu:

Können Sie bitte ausführlich auf die Art und Weise eingehen, die dieser Einfaltspinsel beschrieben hat, und zwar jede Zeile einschließlich der Syntax? Ich verstehe noch nicht, was das bedeutet. Nicht unbedingt an den Fingern, man kann auch Begriffe verwenden, aber Zeile für Zeile.

1) Gibt die Funktion von Funk also ein Objekt zurück und nicht irgendeinen mittelmäßigen Wert, wie es andere mittelmäßige Funktionen tun? Was ist das für ein Tier, warum ist es ein Objekt?

2) Können wir entweder mit einem von der Funktion zurückgegebenen Objekt oder einem Standardwert initialisieren? Das heißt, die Funk-Funktion hat, obwohl sie Teil derselben Struktur ist, nichts mit dem Objekt Thing 2 zu tun, oder verstehe ich da etwas falsch? Übrigens, es wird als Objekt bezeichnet, also hat die Struktur auch ein Objekt? Ich dachte, es sei einfacher als das. Und noch eine Frage: Wie genau kopiere ich eine Struktur in eine andere, wenn sie vom gleichen Typ sind? Diese einfache Zeile.

und es gibt ein berüchtigtes Kopieren? Und es gibt keine Notwendigkeit, die Struktur von Stuka 2 separat zu deklarieren, und es ist überhaupt keine Struktur, sondern ein Objekt, das von einer Struktur erzeugt wird?

Ich bin irgendwie mit keiner Programmiersprache vertraut (aber nicht gegen das Lernen) und habe außerdem eine eher vage Vorstellung von OOP, also seien Sie nicht überrascht, wenn die Fragen dumm sind.

Ups, ich habe gerade gesehen, dass die Klammern vorher geschlossen sind, d.h. diese Funka wird außerhalb der Struktur beschrieben, aber was genau ist sie in Bezug auf die Struktur Awesome?


Tartu? Aha...
 

Liebe Leute, sagt mir, wie man die Anzahl der gefüllten Zellen in einem zweidimensionalen Array berechnet.

 for(int i=0;i<ObjectsTotal();i++) 
{
  mas[0][i]-количество заполненных ячеек?
  mas[1][i]-//-//-//-//-//-//-//-//-//-
}
 

Bitte helfen Sie mir mit dem Code, um nur eine Zahl auf dem Diagramm anzuzeigen - die Höhe des Abflusses.

Hier ist es in dieser Erweiterung gut https://www.mql5.com/ru/code/8873 es ist und so heißt es die Höhe der Pflaume, es ist in rot angezeigt, obwohl auch die Höhe der Marge ist ein normales Thema, aber zumindest, dass man mit zu beginnen, sonst ist die Erweiterung cool, aber es gibt viele Dinge, die ich nicht brauche, und ich kann nicht verstehen, wie es dort erhalten wird.

 
Top2n:

Liebe Leute, sagt mir, wie man die Anzahl der gefüllten Zellen in einem zweidimensionalen Array berechnet.


ArrayRange
 
r772ra:

ArrayRange


Diese Funktion gibt die Anzahl der Zellen im Array zurück, nicht die Anzahl der gefüllten Zellen.

Kann mir jemand sagen, wie man eindimensional arbeitet?))