Fragen zur SI-Sprache

 
void quicksort(double *a, int *idx, int l, int u)
{
  int i, m, idx_temp;
  double a_temp;

  if (l >= u)
    return;

  m = l;
  for (i=l+1; i<=u; i++)
    {
      if (a[i] < a[l])
        {
          ++m;

          idx_temp = idx[m];
          idx[m] = idx[i];
          idx[i] = idx_temp;

          a_temp = a[m];
          a[m] = a[i];
          a[i] = a_temp;
        }
    }

  idx_temp = idx[l];
  idx[l] = idx[m];
  idx[m] = idx_temp;

  a_temp = a[l];
  a[l] = a[m];
  a[m] = a_temp;

  quicksort(a, idx, l, m-1);
  quicksort(a, idx, m+1, u);
}

wie funktioniert diese Syntax? ist das f-e in sich selbst? auch 2 mal

Können Sie außerdem ein gutes Buch empfehlen, das informativ und nicht zu lang ist?

Ich habe eine.

Б. Kernighan, D. Ritchie

Die Programmiersprache C.

Ausgabe 3 überarbeitet

 

Dies ist auch in mql möglich. Nicht bei jedem Funktionsaufruf wird die Funktion noch zweimal aufgerufen - am Anfang der Funktion gibt es einen Rücksprung.

Das nennt man Rekursion.

https://ru.wikipedia.org/wiki/Рекурсия

https://habr.com/ru/post/275813/

 
Dmitry Fedoseev:

Dies ist auch in mql möglich. Nicht bei jedem Funktionsaufruf wird die Funktion noch zweimal aufgerufen - am Anfang der Funktion gibt es einen Rücksprung.

Das nennt man Rekursion.

https://ru.wikipedia.org/wiki/Рекурсия

https://habr.com/ru/post/275813/

Ich bin neu schreiben eine der Bibliotheken auf mql, nach Ihrem Rat ))

 
Maxim Dmitrievsky:

Empfehlen Sie auch ein gutes Buch, das informativ und nicht zu lang ist.

Ich habe Straustrup an der Uni gelesen, aber ich glaube nicht, dass man ein Lehrbuch über grundlegende Sprachkonstrukte braucht, man hat bereits Programmiererfahrung, man muss nicht von Grund auf lesen.

Ich habe noch nie in C# geschrieben, aber ich habe früher Windows-Programme geschrieben. Als ich beschloss, mich in C# zu versuchen, war die Online-Hilfe sehr hilfreich, alle kleinen Fragen wurden geklärt, ich las kurze Artikel auf dieser Ressource, Rekursion C++ ist hier kurz beschrieben

https://metanit.com/cpp/tutorial/3.6.php

Allgemeines C++-Tutorialhttps://metanit.com/cpp/tutorial/, ich bezweifle, dass Sie prägnantere Informationen als auf dieser Website finden werden ;)

C++ | Рекурсивные функции
  • metanit.com
Рекурсивные функции - это функции, которые вызывают сами себя. Например, определим вычисление факториала в виде рекурсивной функции: В функции factorial задано условие, что если число n больше 1, то это число умножается на результат этой же функции, в которую в качестве параметра передается число n-1. То есть происходит рекурсивный спуск. И так...
 
Igor Makanu:

Ich habe Straustrup an der Uni gelesen, aber ich glaube nicht, dass Sie ein Lehrbuch über grundlegende Sprachkonstrukte brauchen, Sie haben bereits Programmiererfahrung, Sie brauchen nicht von Grund auf zu lesen

Ich habe noch nie in C# geschrieben, aber ich habe früher Windows-Programme geschrieben. Als ich beschloss, mich in C# zu versuchen, war die Online-Hilfe sehr hilfreich, alle kleinen Fragen wurden geklärt, ich las kurze Artikel auf dieser Ressource, Rekursion C++ ist hier kurz beschrieben

https://metanit.com/cpp/tutorial/3.6.php

Ich bezweifle, dass Sie auf dieser Website präzisere Informationen finden werden als hier ;)

Die Hauptschwierigkeit besteht darin, dass der gesamte Code mit Zeigern und goto geschrieben ist, und es gibt viel unnötiges Zeug mit Speicherzuweisung und -löschung.

Man kann also sagen, dass mql und Ci völlig unterschiedliche Sprachen sind. Selbst so einfache Konstrukte wie die Übergabe von Zeigern anstelle von Arrays in eine Funktion funktionieren hier nicht, es ist sehr schwer, sie umzuschreiben.

 
Maxim Dmitrievsky:

Es ist einfach, in die Sprache einzusteigen, die Hauptschwierigkeit ist, dass der gesamte Code über Zeiger und goto geschrieben wird, es gibt eine Menge unnötiges Zeug mit Speicherzuweisung und dann Zerstörung

Deshalb ist es offensichtlich, dass mql und CY völlig unterschiedliche Sprachen sind. Selbst so einfache Konstrukte wie die Übergabe von Zeigern anstelle von Arrays in eine Funktion funktionieren hier nicht, es ist sehr schwer, sie umzuschreiben.

Das macht C++ so interessant - es basiert auf der Arbeit mit Zeigern. Der Prozessor kennt keine Namen von Bezeichnern (Namen von Variablen), er kennt nur relative Daten-Offsets (Verknüpfungen zu Speicheradressen) und die referenzierten Daten müssen typisiert werden - das ist es, was ein Zeiger tut - er beschreibt den Typ der Daten und wo die Daten im Speicher gespeichert sind.


MQL ist wirklich eine andere Sprache


Zeigerhttps://metanit.com/cpp/tutorial/4.1.php

C++ | Что такое указатели
  • metanit.com
Указатели представляют собой объекты, значением которых служат адреса других объектов (переменных, констант, указателей) или функций. Как и ссылки, указатели применяются для косвенного доступа к объекту. Однако в отличие от ссылок указатели обладают большими возможностями. Для определения указателя надо указать тип объекта, на который указывает...
 
Igor Makanu:

Das ist das Interessante an C++ - es arbeitet mit Zeigern, die ganze Flexibilität der Sprache basiert auf der Arbeit mit Zeigern - auch bekannt als die vollständige Nachahmung der Arbeit mit dem Prozessorspeicher, der Prozessor kennt keine Namen von Bezeichnern (Variablennamen), er kennt nur relative Daten-Offsets (in der Tat Verweise auf Speicheradressen) und Daten per Verweis müssen typisiert werden - das ist es, was ein Zeiger tut - er beschreibt den Datentyp und den Ort, an dem die Daten im Speicher gespeichert sind


MQL ist wirklich eine andere Sprache


Zeigerhttps://metanit.com/cpp/tutorial/4.1.php

Ja, danke, ich bin bereits mit den Zeigern vertraut, und das Buch hat

Die Seite ist übrigens praktisch, ich habe sie zu meinen Favoriten hinzugefügt.

Hier ist ein guter Videokurs für Faule, von C bis CP


 

Hier ist ein Beispiel aus der Kopfzeile der Bibliothek:

Strukturen mit Zeigern auf etwas Unklares erstellt werden (anscheinend sind es Arrays, die noch nicht existieren), dann verstehe ich, dass eine ...äh...Variable dieser Strukturmine_score; mit demselben Namen deklariert wird?

typedef struct mine_score
{
  int n;      /* number of rows of M */
  int *m;     /* number of cols of M[i] for each i */
  double **M; /* the (equi)characteristic matrix */
} mine_score;

müssen wir uns auch damit befassen

und dann ein f-i deklariert wird, das sein Ergebnis direkt in den Speicherbereich dieser Variablen schreibt?

mine_score *mine_compute_score(mine_problem *prob, mine_parameter *param);
 
Maxim Dmitrievsky:

Hier ist ein Beispiel aus der Kopfzeile der Bibliothek:

Strukturen mit Zeigern auf etwas Unklares erstellt werden (anscheinend sind es Arrays, die noch nicht existieren), dann verstehe ich, dass eine ...ähm...Variable dieser Strukturmine_score; mit demselben Namen deklariert wird?

müssen wir uns auch damit befassen

und dann deklarieren wir ein f, das sein Ergebnis direkt in den Speicherplatz dieser Variablen schreibt?

Nein, der hier deklarierte Datentyp ist mine_score, der eine mine_score-Struktur ist.

Und die Funktion gibt einen Zeiger auf diese Struktur zurück, die innerhalb dieser Funktion erstellt wird. Dementsprechend besteht der Zweck der Funktion darin, eine Entität des Typs min_score zu erstellen und das Eigentum an ihr in den Bereich des Funktionsaufrufs zu übertragen.

 

Maxim Dmitrievsky:

dies muss ebenfalls behandelt werden

und dann ein f-i deklariert wird, das sein Ergebnis direkt in den Speicherbereich dieser Variablen schreibt?

Ich vergaß typedefs vor langer Zeit, dank MQL helfen, diese schwerfälligen Konstruktionen zu erinnern)), anscheinend ist es nur eine Erklärung dermine_score Typ, der eine Struktur und Strukturbeschreibung wurde "eingefügt" in Typ-Definition ( typedef ), aber ich könnte falsch sein, hier ist eine ähnliche Frage diskutiert und recht detaillierte Erklärung:

http://qaru.site/questions/13054/typedef-struct-vs-struct-definitions


Maxim Dmitrievsky:

und dann deklarieren Sie ein f-i, das sein Ergebnis direkt in den Speicherbereich dieser Variablen schreibt?

In C++ ist der Programmierer für die Speicherzuweisung zuständig. Wenn also das Ergebnis einer Funktion einenmine_score*-Zeiger zurückgibt, muss derjenige, der diesen Zeiger erhält, Speicher zuweisen, d. h. es handelt sich nicht um eine Variable, sondern um einen Zeiger auf die Daten

Определение typedef struct vs struct
  • 2009.11.04
  • user69514
  • qaru.site
Я новичок в программировании на С, но мне было интересно узнать, какая разница между использованием при определении структуры или использованием . Мне кажется, что нет никакой разницы, они достигают той же цели.
 
Igor Makanu:

Ich vergaß typedefs vor langer Zeit, zum Glück MQL mir helfen, diese schwerfälligen Konstruktionen zu erinnern)), scheint es nur eine Erklärung des Typsmine_score, die eine Struktur und Strukturbeschreibung wurde "eingefügt" in Typ-Definition ( typedef ), aber ich könnte falsch sein, hier ist eine ähnliche Frage diskutiert und ziemlich detaillierte Erklärung:

http://qaru.site/questions/13054/typedef-struct-vs-struct-definitions


In C++ liegt die Speicherzuweisung in der Verantwortung des Programmierers. Wenn also das Ergebnis einer Funktion einenmine_score *-Zeiger zurückgibt,sollte derjenige, derdiesen Zeiger erhält, den Speicher zuweisen, d.h. es handelt sich nicht um eine Variable, sondern um einen Zeiger auf die Daten

#include "pch.h"
#include <iostream>

using namespace std;

int* Foo(int i)
{
        int* x = new int(i);
        return x;
}

int main()
{
        int* x = Foo(5);
        cout << *x;
        delete x;
        return 0;
}

Ich habe innerhalb der Funktion Speicher zugewiesen und ihn im Bereich der Variablen, der ich den Verweis übergeben habe, wieder freigegeben.