Anzahl der Elemente im Array

Mellimelly

Level-1
Beiträge
5
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo alle zusammen,
ich bin momentan im Kapitel "ARRAY" angelangt und habe eine Frage:
Wie ermittel ich die Anzahl der vorhandenen Elementen in meinem Array ?

Beispiel:

A : ARRAY [0..5] := [1,2,1];
anzahl : INT;

jetzt möchte ich das "anzahl" die Anzahl der Elemente "1,2 und 1" also die Zahl 3 wieder gibt ?
Gibt es sowas ?


Gruß
 
Die Anzahl Elemente eines Arrays ist die Anzahl der "Schubladen" - also in Deinem Beispiel 6 Elemente, da du das Array mit [0..5] dimensioniert hast.
Du willst jetzt aber die Anzahl der "gefüllten" (bzw. der "leeren") Schubladen ermitteln.
Sie sind aber alle gefüllt - die vermeintlich "leeren" mit 0.
Schleife durchlaufen und bei jedem einzelnen Element prüfen, ob es Deinem Kriterium entspricht, falls ja, dann 1 auf eine ZählVariable addieren. Aber nicht vergessen: vor SchleifenBeginn die ZählVariable mit 0 vorbesetzen!
 
Zuletzt bearbeitet:
Hey. Ich danke euch beiden für die Antworten. Eure Varianten haben mir sehr gut helfen können.
Jedoch habe ich nun eine weitere Frage, die sich mir in den Weg stellt.
Wie sieht es mir einem Array aus, ohne feste größe ? ( ARRAY
[*] ).
Gibt es hierbei Methoden um den Minmal- und Maximal-Index des Arrays zu ermitteln ?

Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Grenzen von variablen Arrays kannst du mit den Funktionen UPPER_BOUND und LOWER_BOUND ermitteln.

Code:
VAR_IN_OUT
  arr: ARRAY
[*] of INT;
END_VAR
VAR
  upper, lower: DINT;
END_VAR

upper := UPPER_BOUND(arr,1);
lower := LOWER_BOUND(arr,1);

Die Funktionen UPPER_BOUND und LOWER_BOUND brauchen als Parameter das Array (logisch) und die Dimension von der du die Grenze haben möchtest. Bei 1D Array geht nur 1. Bei 2D Arrays (ARRAY[*,*]) geht 1 und 2 .... etc.
 
Stimmt ja. Danke. LOWER- UND UPPER_BOUND geben die Grenzen an. Hätte ich fast wieder vergessen.
Dann verstehe ich aber nicht wieso die mir vorliegende Aufgabenstellung so aussieht:

Code:
FUNCTION anz : INT

VAR_INPUT
A: ARRAY
[*] OF REAL;
END_VAR

anz:= (Tragen Sie in dieser Zeile die Lösung ein)

END_FUNCTION

Zumal das Variable Array in einer Funktion nur in kombination mit IN_OUT funktionieren
und anz:= nur eine Zeile für die Lösung vorhanden ist.
Daher habe ich mir gedacht, dass es vielleicht einfach gehen würde wie bei Java oder C++ .
Jedoch auch bei diesen Sprachen, werden FOR-Schleifen mit IF-Kontrollabfragen benötigt, um zu kontrollieren - ob das jeweilige kontrolierende Element des Array im Indexbereich i ungleich NULL bzw. 0 ist.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich scheine die Aufgabe falsch verstanden zu haben. Die Aufgabe verlangt, dass die Funktion die Anzahl der Elemente in dem Array wiedergibt.
Also auch die Nullen in dem Array. Also wie es hucki perfekt beschrieben hat. Oh man ... da habe ich viel zu kompliziert gedacht für die Aufgabe. Ich dachte man müsse jeden einzelnen Index-Bereich abfragen, ob sich dort etwas befindet.
 
Zurück
Oben