[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 184

 
   double Mas[];//массив куда надо заносить данные

Wenn er Nullen ausgibt, ist es besser, einen Code anzuhängen, als ihn mit den Fingern zu erklären.

Wenn ein offenes Array deklariert wird, ist es ratsam, ArrayResize durchzuführen oder gleich eine größere Dimension zu deklarieren.

 
double mas[];
int start()
  {
  double v1=mas[1];
  mas[1]=89;
  double v2=mas[1];
  ArrayResize(mas,iBars(NULL,0));
  double v3=mas[1];
  mas[1]=89;
  double v4=mas[1];
  Alert(v1,"-",v2,"-",v3,"-",v4);
  return(0);
  }

Das Skript ist nur zum Spaß, aber Sie können auch Alert(GetLastError()); abfangen, um

ERR_ARRAY_INDEX_OUT_OF_RANGE4002Der Array-Index liegt außerhalb des Bereichs
 
splxgf:

Wenn er Nullen ausgibt, ist es besser, einen Code anzuhängen, als ihn mit den Fingern zu erklären.

Wenn ein offenes Array deklariert wird, ist es ratsam, ArrayResize durchzuführen oder gleich eine größere Dimension zu deklarieren.

Ich habe den Code bereits im ersten Beitrag angehängt. Es müssen nur noch ein paar richtige Zeilen hinzugefügt werden, um das Feld zu bilden. Genau das war die Hauptfrage).

Ich denke sogar, dass es irgendwo so etwas geben sollte:

ArrayResize(Mas,n);

Mas[n]={diff};

n ist die neue Dimensionalität, diff die Werte der resultierenden Differenzen.

Aber so funktioniert es nicht, es wird die Differenz 0,00000 gedruckt. Ich habe bereits versucht, den Unterschied in der Schleife, hinter der Schleife und sogar in der Bedingung einzufügen.

Kurz gesagt, ich bin wie betäubt).

Wenn Sie wissen, wie man es schreibt, werde ich Ihnen sehr dankbar sein.

 
splxgf:

Das Skript ist nur zum Spaß, aber Sie können auch Alert(GetLastError()); abfangen, um

ERR_ARRAY_INDEX_OUT_OF_RANGE4002Der Array-Index liegt außerhalb des Bereichs

Nun, es stellt sich heraus, dass Sie sowohl die Größe als auch den Wert des Arrays im Code explizit angeben. Genau das habe ich in dem Artikel verstanden.

Aber irgendwie schaffe ich es nicht mit meinem Beispiel.(.

 
NickXXX:

sowohl die Dimension als auch den Wert des Arrays im Code explizit angeben

Es gibt keine anderen Möglichkeiten.

  double v1=mas[1];
  mas[1]=89;
  Alert(GetLastError());
  double v2=mas[1];
  Alert(GetLastError());
  ArrayResize(mas,iBars(NULL,0));

Elemente werden nicht erstellt, wenn Sie auf sie zugreifen.

 
splxgf:

Es gibt keine anderen Möglichkeiten.

Elemente werden nicht erstellt, wenn auf sie zugegriffen wird.

Okay, sehen Sie. Habe ich es richtig verstanden?

In Ihrem Beispiel erstellen Sie ein eindimensionales Array, das aus einem einzigen Wert von 89 besteht.

Mit Dimensionalität meinte ich übrigens die Anzahl der Elemente in einem eindimensionalen Array. Ich dachte, dass man sie im Laufe des Programms ändern kann. Schließlich ist es nicht umsonst so, dass wir unser Array zunächst nicht explizit angeben. D.h. zum Beispiel:

double Mas[]; //Initialisierung eines eindimensionalen Arrays

int n=0; //wird für die Anzahl der Array-Elemente nützlich sein

Außerdem führen wir, wie in meinem Beispiel, die folgende Schleife durch

for(...)

{

if(...)//Die Bedingung, an der wir interessiert sind

{

n++;// Zählen, wie oft es funktioniert hat

diff=... Werte, an denen wir interessiert sind

}

}

und an anderer Stelle füllen wir unser eindimensionales Array Mas[n] mit diff-Werten, wobei n die Anzahl der Elemente ist

Ich dachte, das ist ganz normal und kann so gemacht werden... Oder doch nicht?

 

Vor für, fügen Sie ein ArrayResize auf die erforderliche Anzahl von Elementen

Zum Beispiel, der Punkt

  ArrayResize(mas,iBars(NULL,0));

orientiert sich an der Anzahl der Balken im aktuellen Diagrammfenster, oder Sie können anstelle von iBars einfach eine beliebige annähernd astronomische Zahl angeben.

Das Array wird zunächst leer erstellt. Bevor Sie darauf zugreifen, müssen Sie angeben, wie viele Elemente Sie darin speichern möchten. Stellen Sie den vollständigen Code ein, dann ist es einfacher zu navigieren.

 
splxgf:

Vor für, fügen Sie ein ArrayResize auf die erforderliche Anzahl von Elementen

Zum Beispiel, der Punkt

orientiert sich an der Anzahl der Balken des Diagramms im aktuellen Fenster, oder Sie können anstelle von iBars einfach eine beliebige annähernd astronomische Zahl angeben.

Aber vorher kennen wir die Anzahl der Elemente nicht, wir werden sie erst erfahren, wenn wir die Anzahl der if-Bedingungen berechnen. Ich habe versucht, ArrayResize nach for zu setzen, es gibt 0 als Elemente aus.
 

In dem Beispiel zeige ich, dass Sie kein Array verwenden können, das nicht mit einer Anzahl von Elementen gekennzeichnet ist.

Die ersten beiden Aufrufe verursachen einen Fehler und geben 0 zurück.

Um die Kakerlaken loszuwerden, schreiben Sie einfach

double mas[999999];

Wenn es funktioniert, kümmern Sie sich um die Kakerlaken.

 
splxgf:

In dem Beispiel zeige ich, dass Sie kein Array verwenden können, das nicht mit einer Anzahl von Elementen gekennzeichnet ist.

Die ersten beiden Aufrufe verursachen einen Fehler und geben 0 zurück.

Um die Kakerlaken loszuwerden, schreiben Sie einfach

Wenn es funktioniert, kümmern Sie sich um die Kakerlaken.

Sie müssen die Anzahl der Elemente nicht von Anfang an angeben, die Konstruktion double Mas[] ist ebenfalls geeignet.

Grund der Beschwerde: