Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 634

 

Qualcuno ha un pezzo di codice per un esempio in cui gli elementi di un array di stringhe sono raggruppati in ordine alfabetico?

Grazie in anticipo.

 
Hobu:

Qui

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

c'è scritto:

"Potete restituire tipi semplici, strutture semplici e puntatori a oggetti . L'operatorereturn non può restituire array, oggetti di classe o variabili di tipo struttura complessa.

"

Vi sembra ciò che è necessario?

Vengono utilizzati identificatori russi, quindi sembra un po' insolito:

#property strict

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

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

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

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

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

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

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

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

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

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

Il risultato dell'esecuzione è il seguente:

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
L'oggetto thingRaz è inizializzato con l'oggetto (struttura) restituito dalla funzione Funk, e l'oggetto thingTwo è inizializzato con il valore di default, ma poi gli viene assegnato un oggetto (struttura), anch'esso restituito dalla funzione Funk.
 
simpleton:

Vi sembra la cosa giusta da fare?

Sono stati usati identificatori russi, quindi sembra un po' insolito:

Il risultato dell'esecuzione è il seguente:

L'oggetto thingRaz è inizializzato con l'oggetto (struttura) restituito dalla funzione Funk, e l'oggetto thingTwo è inizializzato con il valore di default, ma poi gli viene assegnato un oggetto (struttura), anch'esso restituito dalla funzione Funk.

 

Per favore, puoi commentare in dettaglio il modo in cui quel sempliciotto ha descritto, ogni linea inclusa la sintassi? Non capisco ancora cosa significa. Non necessariamente sulle dita, si possono anche usare termini, ma riga per riga.

1)Quindi, la funzione di Funk restituisce un oggetto e non un qualche valore mediocre, come fanno altre funzioni mediocri? Che tipo di bestia è questa, perché è un oggetto?

2) Possiamo inizializzare con un oggetto restituito dalla funzione o con un valore predefinito? Cioè, la funzione Funk, sebbene faccia parte della stessa struttura, non ha niente a che fare con l'oggetto Thing 2, o sto fraintendendo qualcosa? A proposito, si chiama oggetto, quindi anche la struttura ha un oggetto? Pensavo fosse più semplice di così. E un'altra domanda, come faccio esattamente a copiare una struttura in un'altra, se sono dello stesso tipo? Questa semplice linea.

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

e c'è una famigerata copia? E non c'è bisogno di dichiarare la struttura di Stuka 2 separatamente, e non è affatto una struttura, ma un oggetto creato da una struttura?

In qualche modo non ho familiarità con nessun linguaggio di programmazione (ma non sono contrario ad imparare) e inoltre, ho un'idea piuttosto vaga di OOP, quindi non stupitevi se le domande sono stupide.

Oops, ho appena visto che le parentesi sono chiuse prima, cioè questo Funka è descritto al di fuori della struttura, ma cosa è esattamente in relazione alla struttura Awesome?

 
Hobu:

Per favore, puoi commentare in dettaglio il modo in cui quel sempliciotto ha descritto, ogni linea inclusa la sintassi? Non capisco ancora cosa significa. Non necessariamente sulle dita, si possono anche usare termini, ma riga per riga.

1)Quindi, la funzione di Funk restituisce un oggetto e non un qualche valore mediocre, come fanno altre funzioni mediocri? Che tipo di bestia è questa, perché è un oggetto?

2) Possiamo inizializzare con un oggetto restituito dalla funzione o con un valore predefinito? Cioè, la funzione Funk, sebbene faccia parte della stessa struttura, non ha niente a che fare con l'oggetto Thing 2, o sto fraintendendo qualcosa? A proposito, si chiama oggetto, quindi anche la struttura ha un oggetto? Pensavo fosse più semplice di così. E un'altra domanda, come faccio esattamente a copiare una struttura in un'altra, se sono dello stesso tipo? Questa semplice linea.

E c'è la famigerata copia? E non dovete dichiarare la struttura di tipo 2 separatamente e non è affatto una struttura, ma un oggetto creato da una struttura?

In qualche modo non ho familiarità con nessun linguaggio di programmazione (ma non sono contrario all'apprendimento) e inoltre ho un'idea piuttosto vaga di OOP, quindi non stupitevi se le domande sono stupide.

Ops, ho appena visto che le parentesi graffe sono chiuse prima, cioè questa funzione è descritta al di fuori della struttura, ma cosa è esattamente in relazione alla struttura Awesome?

Qualcosa del genere, rispetto alla stessa cosa, ma per una variabile di uno dei tipi incorporati:
#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("Заканчиваем безобразничать...");
}

Il risultato della corsa è il seguente:

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

Le funzioni restituiscono oggetti del tipo specificato nella dichiarazione. Per oggetti qui intendiamo non solo strutture, ma anche tipi incorporati.

Se il tipo del valore restituito per la funzione Funk1 è del tipo OffigenStructure, che è una struttura, significa che questa funzione restituisce i valori delle strutture, e solo del tipo OffigenStructure. Lo fa perché e solo perché la sua dichiarazione/definizione ha questo tipo di ritorno.

Potete inizializzarlo con tale valore o valori, proprio come prende uno dei costruttori. Si può fare a meno dei costruttori, ma la loro sintassi di inizializzazione è un po' diversa e hanno le loro limitazioni.

In questo caso, il costruttore prende un valore di tipo int, quindi una variabile di tipo OxygenStructure dovrebbe essere inizializzata con un valore di tipo int, o un altro tipo, ma implicitamente castato a int.

Poiché il valore predefinito è specificato per il parametro che il costruttore accetta, non è necessario passare un valore al costruttore. Il costruttore sarà chiamato comunque, ma sarà usato il parametro di default.

Quella semplice stringa è solo una dichiarazione per una variabile di tipoStructure. Copiare strutture dello stesso tipo l'una nell'altra è estremamente facile, proprio come "copiare" i valori di una variabile di tipo built-in. È necessario assegnare un valore da una variabile all'altra. Per esempio, "thingRaz = thingTwo;". Eseguitelo voi stessi e stampate il valore che la variabile shtuRaz è diventata dopo questa assegnazione.

Funk1 non ha niente a che fare con le strutture di tipoOfgenericStructure tranne che restituisce valori di quel tipo.

Avete bisogno di una formazione generale, senza di essa "affogherete". Non sono pronto a darti consigli.

Posso darvi brevemente i seguenti consigli da quello che posso vedere (le basi):

1. I dati in un programma sono immagazzinati in aree nominate della memoria, chiamate variabili.

2. il tipo di variabile definisce un modo di interpretazione dei dati memorizzati e, nella maggior parte dei casi, la sua dimensione. Il modo di interpretazione implica un insieme di operazioni che possono essere eseguite sui dati.

3. I tipi incorporati e strutturati non sono concettualmente diversi da questo punto di vista.

Il punto 2 è il più importante e fondamentale da capire. In C++ e MQL, la nozione di tipo è molto importante.

In poche parole: un tipo è un "modello" di dati, e una variabile è un'unità di questo modello. Un gatto o un cagnolino è un "modello", e gatti specifici come Murzyk o cani come Sharik sono unità di gatti e cani. È lo stesso con i tipi e le variabili.

 
Hobu:

Per favore, puoi commentare in dettaglio il modo in cui quel sempliciotto ha descritto, ogni linea inclusa la sintassi? Non capisco ancora cosa significa. Non necessariamente sulle dita, si possono anche usare termini, ma riga per riga.

1)Quindi, la funzione di Funk restituisce un oggetto e non un qualche valore mediocre, come fanno altre funzioni mediocri? Che tipo di bestia è questa, perché è un oggetto?

2) Possiamo inizializzare con un oggetto restituito dalla funzione o con un valore predefinito? Cioè, la funzione Funk, sebbene faccia parte della stessa struttura, non ha niente a che fare con l'oggetto Thing 2, o sto fraintendendo qualcosa? A proposito, si chiama oggetto, quindi anche la struttura ha un oggetto? Pensavo fosse più semplice di così. E un'altra domanda, come faccio esattamente a copiare una struttura in un'altra, se sono dello stesso tipo? Questa semplice linea.

e c'è una famigerata copia? E non c'è bisogno di dichiarare la struttura di Stuka 2 separatamente, e non è affatto una struttura, ma un oggetto creato da una struttura?

In qualche modo non ho familiarità con nessun linguaggio di programmazione (ma non sono contrario ad imparare) e inoltre, ho un'idea piuttosto vaga di OOP, quindi non stupitevi se le domande sono stupide.

Oops, ho appena visto che le parentesi sono chiuse prima, cioè questo Funka è descritto al di fuori della struttura, ma cosa è esattamente in relazione alla struttura Awesome?


Tartu? Uh-huh...
 

Vecchietti, ditemi come calcolare il numero di celle riempite in un array bidimensionale.

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

Per favore aiutatemi con il codice per visualizzare solo una cifra sul grafico - il livello di perdita.

Qui è in questa estensione buona https://www.mql5.com/ru/code/8873 è e così si chiama il livello di prugna, è visualizzato in rosso, anche se anche il livello di margine è un argomento normale ma almeno quello per iniziare, per il resto, l'estensione è cool ma ci sono molte cose che non ho bisogno, e non riesco a capire come si ottiene lì.

 
Top2n:

Vecchietti, ditemi come calcolare il numero di celle riempite in un array bidimensionale.


ArrayRange
 
r772ra:

ArrayRange


Questa funzione restituisce il numero di celle nella matrice, non il numero di celle riempite.

Qualcuno può dirmi come fare il monodimensionale?)