Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 10 von 10

Thema: Initalisieren von zweidimensionalen Arrays

  1. #1
    Registriert seit
    27.01.2006
    Beiträge
    6
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    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
    Zitieren Zitieren Initalisieren von zweidimensionalen Arrays  

  2. #2
    Registriert seit
    20.08.2003
    Beiträge
    275
    Danke
    38
    Erhielt 32 Danke für 31 Beiträge

    Standard

    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

  3. #3
    charly ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    27.01.2006
    Beiträge
    6
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    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);

  4. #4
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard

    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.
    If you open your Mind too much, your Brain will fall out.

  5. #5
    charly ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    27.01.2006
    Beiträge
    6
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    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!

  6. #6
    Registriert seit
    17.10.2007
    Ort
    35043 Marburg
    Beiträge
    176
    Danke
    4
    Erhielt 30 Danke für 29 Beiträge

    Standard

    Hallo,
    Bei der Initialisierung von Arrays werden immer alle Felder der Reihe nach behandelt.
    Das bedeutet in folgendem Beispiel:
    Code:
    myArray : ARRAY [0..2,0..2] OF INT:= [#Wert1,WERT2,#WERT3,4(#WERT4)];
    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.
    Geändert von Simatiker (23.03.2011 um 10:05 Uhr)
    Grüße...
    Paradox ist, wenn sich jemand im Handumdrehen den Fuß bricht.

  7. Folgender Benutzer sagt Danke zu Simatiker für den nützlichen Beitrag:

    KingHelmer (02.05.2013)

  8. #7
    Registriert seit
    17.10.2007
    Ort
    35043 Marburg
    Beiträge
    176
    Danke
    4
    Erhielt 30 Danke für 29 Beiträge

    Standard

    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)
    Code:
    VAR
        myArray : ARRAY [0..c_iArr1,0..c_iArr2] OF INT:= [((c_iArr1+1)*(c_iArr2+1))(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
    Angehängte Grafiken Angehängte Grafiken
    Grüße...
    Paradox ist, wenn sich jemand im Handumdrehen den Fuß bricht.

  9. #8
    Registriert seit
    21.02.2011
    Ort
    Deutschland, Baden-Würtemberg
    Beiträge
    995
    Danke
    115
    Erhielt 129 Danke für 102 Beiträge

    Standard

    Hi,

    ich glaube, meine Frage passt hier ganz gut rein:

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

    Code:
        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

  10. #9
    Registriert seit
    05.05.2012
    Beiträge
    96
    Danke
    44
    Erhielt 14 Danke für 14 Beiträge

    Standard

    Die eckige Klammer!?

    [ ... ]

  11. Folgender Benutzer sagt Danke zu lilli für den nützlichen Beitrag:

    KingHelmer (05.12.2013)

  12. #10
    Registriert seit
    21.02.2011
    Ort
    Deutschland, Baden-Würtemberg
    Beiträge
    995
    Danke
    115
    Erhielt 129 Danke für 102 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von lilli Beitrag anzeigen
    Die eckige Klammer!?

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

Ähnliche Themen

  1. Arrays in DB anlegen
    Von litlegerman im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 31.10.2011, 18:32
  2. Struktur "initalisieren"
    Von nimloth80 im Forum Programmierstrategien
    Antworten: 4
    Letzter Beitrag: 18.04.2011, 10:46
  3. Arrays in PC Worx
    Von Daywalker im Forum CODESYS und IEC61131
    Antworten: 5
    Letzter Beitrag: 13.08.2010, 15:01
  4. 2 Arrays aus 2 DBs vergleichen
    Von Günni1977 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 03.12.2008, 17:14
  5. arrays mit udt...
    Von Jochen Kühner im Forum Simatic
    Antworten: 17
    Letzter Beitrag: 01.12.2005, 14:27

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •