どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 634

 

文字列配列の 要素をアルファベット順にグループ化する例のコードをお持ちの方はいらっしゃいませんか?

ありがとうございました。

 
Hobu:

こちら

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

と書いてあります。

"単純な型"、"単純な構造体"、"オブジェクトへのポインタ "を返すことができる。return 演算 子は、 配列、クラスオブジェクト、複雑な構造型の変数を返す ことはできません。

"

これは必要なものに見えますか?

ロシア語のIDが使われているので、ちょっと珍しい感じがします。

#property strict

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

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

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

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

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

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

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

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

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

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

これを実行した結果は次のようになります。

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
thingRazオブジェクトはFunk関数から返されたオブジェクト(構造体)で初期化され、thingTwoオブジェクトはデフォルト値で初期化されますが、そこに同じくFunk関数から返されたオブジェクト(構造体)が代入されています。
 
simpleton:

これが正しいことに見えますか?

ロシア語のIDが使われているので、ちょっと珍しい感じがします。

これを実行した結果は次のようになります。

thingRazオブジェクトはFunk関数から返されたオブジェクト(構造体)で、thingTwoオブジェクトはデフォルト値で初期化されますが、そこに同じくFunk関数から返されたオブジェクト(構造体)が代入されています。

 

どうか、あの単純な 人間が記述した方法について、構文も含めて一行一行詳しくコメントしていただけないでしょうか。まだ意味がわかりません。必ずしも指の上でなくても、用語を使ってもいいですが、一行一行で。

1)では、Funkの関数は、他の平凡な関数がそうであるように、平凡な値ではなく、オブジェクトを返すのでしょうか?どんな獣なのか、なぜオブジェなのか。

2)関数から返されるオブジェクトやデフォルト値で初期化することは可能でしょうか?つまり、Funk 関数は、同じ構造体の一部ではあるが、オブジェクト Thing 2 とは何の関係もないのだが、何か勘違いしているのだろうか?ところで、オブジェクトというからには、構造体にもオブジェクトがあるのですね。もっとシンプルに考えていたんです。また、もう一つの質問ですが、ある構造体を別の構造体にコピーするには、それらが同じタイプである場合、具体的にどのようにすればよいのでしょうか?このシンプルなセリフ。

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

と悪名高いコピーがあるのですか?また、スツーカ2の構造を別途宣言する必要はなく、全く構造体ではなく、構造体によって作られたオブジェクトなのですね。

私はなんとなくプログラミング言語に疎く(でも勉強することに抵抗はない)、さらにOOPについてもかなり曖昧な考えを持っているので、質問がバカバカしくても驚かないでください。

おっと、今見たところ、中括弧が前に閉じている、つまりこのファンカは構造の外に記述されていますが、構造オーサムとの関係では一体どうなっているのでしょうか?

 
Hobu:

どうか、あの単純な 人間が記述した方法について、構文も含めて一行一行詳しくコメントしていただけないでしょうか。まだ意味がわかりません。必ずしも指の上でなくても、用語を使ってもいいですが、一行一行で。

1)では、Funkの関数は、他の平凡な関数がそうであるように、平凡な値ではなく、オブジェクトを返すのでしょうか?どんな獣なのか、なぜオブジェなのか。

2)関数から返されるオブジェクトやデフォルト値で初期化することは可能でしょうか?つまり、Funk 関数は同じ構造体の一部ではあるが、オブジェクト Thing 2 とは何の関係もないのだが、何か勘違いしているのだろうか?ところで、オブジェクトというからには、構造体にもオブジェクトがあるのですね。もっとシンプルに考えていたんです。もうひとつ、同じ型の構造体を別の構造体にコピーする方法について教えてください。このシンプルなセリフ。

そして、悪名高いコピーもある?また、タイプ2の構造体を別途宣言する必要はなく、全く構造体ではなく、構造体によって生成されたオブジェクトなのですね。

私はプログラミング言語には全く詳しくなく(でも勉強するのは嫌いではありません)、しかもOOPについてはかなり曖昧な考えを持っているので、質問がバカバカしくても驚かないでください。

おっと、今見たら、中括弧が前に閉じている、つまりこの機能は構造の外に記述されているのですが、構造との関係で具体的にはどうなっているのでしょうか? Awesomeさん

このようなもので、同じものを、組み込み型のいずれかの変数について比較したものです。
#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("Заканчиваем безобразничать...");
}

実行結果は以下の通りです。

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

関数は、宣言で指定された型のオブジェクトを返します。ここでいうオブジェクトとは、構造体だけでなく、組み込み型も意味します。

Funk1 関数の戻り値の型が構造体である OffigenStructure 型であれば、この関数は構造体の値、しかも OffigenStructure 型のみを返すことを意味します。これは、その宣言/定義がこの戻り値の型を持っているからであり、また、そうであるからに他ならない。

このような値で初期化することも可能で、それはコンストラクタが取るのと同じです。コンストラクタを使用しない動作も可能ですが、初期化構文が異なり、制限もあります。

この場合、コンストラクタはint型の値を取るので、OxygenStructure型の変数はint型の値で初期化するか、他の型でも暗黙のうちにint型にキャストしておく必要があります。

コンストラクタが受け取るパラメータにはデフォルト値が指定されているので、コンストラクタに値を渡す必要はありません。コンストラクタはいずれにせよ呼び出されますが、デフォルトのパラメータが使用されます。

この単純な文字列は、Structure型の変数に対する宣言に過ぎない。同じ型の構造体を互いにコピーするのは、組み込み型変数の値を「コピー」するのと同じで、非常に簡単です。ある変数から他の変数に値を代入する必要があります。例えば、「thingRaz = thingTwo;」というように。自分で実行して、この代入後に変数shtuRazがなった値をプリントアウトしてください。

Funk1はtypeOfgenericStructureの構造体とは、その型の値を返すということ以外、何の関係もない。

一般的なトレーニングが必要だ、それがなければ「溺れる」だろう。アドバイスする気にはなれません。

私が見た限りでは、次のようなアドバイスを簡単にすることができます(基本的なことです)。

1.プログラム中のデータは、変数と呼ばれるメモリ上の名前付き領域に格納されます。

2. 変数のタイプは、保存されたデータの解釈方法と、ほとんどの場合、そのサイズを定義します。解釈の方法は、データに対して実行可能な一連の操作を意味する。

3.この点から、埋め込み型と構造化型は概念的に異なるものではありません。

ポイント2は、最も重要かつ基本的な理解です。C++やMQLでは、型の概念が非常に重要です。

一言で言えば、型とはデータの「型」であり、変数とはその型の単位である。猫やワンコは「柄」であり、ムルジークのような特定の猫やシャリクのような犬は猫や犬の単位である。それは、型や変数も同じです。

 
Hobu:

どうか、あの単純な 人間が記述した方法について、構文も含めて一行一行詳しくコメントしていただけないでしょうか。まだ意味がわかりません。必ずしも指の上でなくても、用語を使ってもいいですが、一行一行で。

1)では、Funkの関数は、他の平凡な関数がそうであるように、平凡な値ではなく、オブジェクトを返すのでしょうか?どんな獣なのか、なぜオブジェなのか。

2)関数から返されるオブジェクトやデフォルト値で初期化することは可能でしょうか?つまり、Funk 関数は、同じ構造体の一部ではあるが、オブジェクト Thing 2 とは何の関係もないのだが、何か勘違いしているのだろうか?ところで、オブジェクトというからには、構造体にもオブジェクトがあるのですね。もっとシンプルに考えていたんです。また、もう一つの質問ですが、ある構造体を別の構造体にコピーするには、それらが同じタイプである場合、具体的にどのようにすればよいのでしょうか?このシンプルなセリフ。

と悪名高いコピーがあるのですか?また、スツーカ2の構造を別途宣言する必要はなく、全く構造体ではなく、構造体によって作られたオブジェクトなのですね。

私はなんとなくプログラミング言語に疎く(でも勉強することに抵抗はない)、さらにOOPについてもかなり曖昧な考えを持っているので、質問がバカバカしくても驚かないでください。

おっと、今見たら、中括弧が前に閉じている、つまりこのファンカは構造の外に記述されていますが、構造オーサムとの関係では一体どうなっているのでしょうか?


タルトゥ?Youoohoo...
 

おっさんたち、2次元配列の埋まったセルの数を計算する方法を教えてくれ。

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

難しいことでなければ、チャートに損切りレベルという一つの数字だけを表示するコードで助けてください。

ここで、この拡張機能で良いhttps://www.mql5.com/ru/code/8873 それは、梅のレベルと呼ばれているので、それは、マージンのレベルも通常のトピックですが、少なくともその1を開始するには、赤で表示され、それ以外の場合は、拡張機能はクールですが、私は必要としない多くのものがあり、それがどのようにそこに取得することが理解できないです。

 
Top2n:

おっさんたち、2次元配列の埋まったセルの数を計算する方法を教えてくれ。


ArrayRange
 
r772ra:

ArrayRange


この関数は、配列内のセルの数を返すものであり、塗りつぶされたセルの数を返すものではありません。

どなたか一次元のやり方を教えてください))