# Initalisieren von zweidimensionalen Arrays



## charly (21 März 2011)

Hallo zusammen,

ich möchte ein zweidimensionales Array dynamisch initalisieren.

a:=1;
b:=4;

array1 array[0..a,0..b] of int;

bei einem eindimensionalen geht es ja folgendermaßen:

array 1 array[0..a] of int := a(12);

Hat da jemand eine Idee, oder ist das so nicht möglich?

Grüße
Charly


----------



## Rayk (21 März 2011)

Hallo,
CoDeSys Hilfe:
_Initialisierung von Arrays:_
_Beispiele für die komplette Initialisierung eines  Arrays:arr1 : ARRAY [1..5] OF INT := 1,2,3,4,5;_
_arr2 : ARRAY [1..2,3..4]  OF INT := 1,3(7);  __(* kurz für  1,7,7,7 *)_
_arr3 : ARRAY  [1..2,2..3,3..4] OF INT := 2(0),4(4),2,3; __(* kurz für  0,0,4,4,4,4,2,3 *)_
Gruß,
Rayk


----------



## charly (21 März 2011)

Danke für die schnelle Antwort,

d.h. ich kann nur den letzten Index automatisieren, oder?

mein Problem ist eigentlich, dass der erste Index variabel ist, der zweite wäre weniger kritisch.
Bräuchte also so irgendwas:

array1 : array[0..a,0..2] of int := a(11,12,13);


----------



## zotos (21 März 2011)

Mit initialisieren meinst Du aber schon den Anfangswert. Den ersten Beitrag da oben macht auch mich den Eindruck als wolltest Du die Array-Größe dynamisieren (was nicht so einfach geht).

Wenn es um den Anfangswert geht schreib Dir doch eine kleine Schleife zum Initialisieren. Die kannst Du mit einer Initvariable anstoßen.


----------



## charly (21 März 2011)

ja, meinte die Anfangswerte,

Das mit dem dynamisch ist vielleicht etwas unverständlich,
die dynamische varibale wird als Konstante definiert. Die hat für mich mehrere Vorteile.

Stimmt mit ner Schleife könnte man es auch realisieren...

Danke!


----------



## Simatiker (23 März 2011)

Hallo,
Bei der Initialisierung von Arrays werden immer alle Felder der Reihe nach behandelt.
Das bedeutet in folgendem Beispiel:

```
myArray : ARRAY [0..2,0..2] OF INT:= [COLOR=Red][[/COLOR]#Wert1,WERT2,#WERT3,4(#WERT4)[COLOR=Red]][/COLOR];
```
myArray[0,0] = #WERT1
myArray[0,1] = #WERT2
myArray[0,2] = #WERT3
myArray[1,0] = #WERT4
myArray[1,1] = #WERT4
myArray[1,2] = #WERT4
myArray[2,0] = #WERT4
myArray[2,1] = 0
myArray[2,2] = 0

Da dein Array dynamisch ist, würde ich die Initschleife empfehlen.

Edit: Die Initialwerte müssen in [] geschrieben werden (CoDeSys V3.4). Hatte mich von den vorangegangenen Beiträgen verleiten lassen.


----------



## Simatiker (23 März 2011)

So ich noch mal,
hat mir jetzt doch keine Ruhe gelassen.
Falls du alle Felder mit dem gleichen Wert initialisieren möchtest, kannst du das auch folgendermaßen machen. (getestet mit CoDeSys V3.4)

```
VAR
    myArray : ARRAY [0..c_iArr1,0..c_iArr2] OF INT:= [((c_iArr1[COLOR=Red]+1[/COLOR])*(c_iArr2[COLOR=Red]+1[/COLOR]))(99)];
END_VAR
VAR CONSTANT
    c_iArr1:INT:=2;
    c_iArr2:INT:=2;
END_VAR
```
+1 weil das Array jeweils bei 0 beginnt

Ergebnis siehe Anhang


----------



## KingHelmer (4 Dezember 2013)

Hi,

ich glaube, meine Frage passt hier ganz gut rein:

Was ist denn an dieser Deklaration des Arrays (bzw. der Initialisierung) falsch?


```
arFade_Rate_DALI:     ARRAY[0..15] OF STRING(20):= [    'nicht anwendbar',
                                                        '357,796',
                                                        '253,000',
                                                        '178,898',
                                                        '126,500',
                                                        '89,449',
                                                        '63,250',
                                                        '44,725',
                                                        '31,625',
                                                        '22,362',
                                                        '15,813',
                                                        '11,181',
                                                        '7,906',
                                                        '5,591',
                                                        '3,953',
                                                        '2,795'];
```

Habe ein ARRAY OF STRING und in diesem ARRAY möchte ich eben gleichzeitig REAL und Zeichen speichern können. daher OF STRING.
Kann man das so nicht machen?

Grüße, 
Flo


----------



## lilli (4 Dezember 2013)

Die eckige Klammer!? 

[ ... ]


----------



## KingHelmer (5 Dezember 2013)

lilli schrieb:


> Die eckige Klammer!?
> 
> [ ... ]



Tatsächlich, hatte ich vollkommen übersehen.
Danke!


----------

