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

Page 2 of 2 FirstFirst 12
Results 11 to 16 of 16

Thread: Alle Array-Elemente miteinander addieren

  1. #11
    Join Date
    27.06.2009
    Location
    am Nordharz
    Posts
    4,658
    Danke
    559
    Erhielt 1,249 Danke für 1,017 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Quote Originally Posted by Credofire View Post
    Nach der Ausgangsbeschreibung trifft doch aber die Gausssche Summenformel nicht zu, denn der Ersteller will ja jede zahl mit jeder addieren. Also nicht 1+2+3+4+5 sondern 1+2 + 1+3 + 1+4 +1+5 + 2+1 + 2+3 ... usw.
    Oder würfel ich da grad was durcheinander?
    Ja. Es geht nur um die Anzahl der Summen, nicht deren Ergebnisse.
    Die Gaußche Summenformel bestimmt lediglich das Verhältnis von Membern des Ausgangs-Array zu Membern des Ergebnis-Arrays.

    Bei Ausgangs-Array[1..5] benötigt das Ergebnis-Array[1..10] (=4+3+2+1 Summen).
    Erhöht man das Ausgangs-Array auf [1..6] benötigt man im Ergebnis-Array[1..15] (=5+4+3+2+1 Summen).
    Erhöht man das Ausgangs-Array auf [1..7] benötigt man im Ergebnis-Array[1..21] (=6+5+4+3+2+1 Summen).

    Und da man in der Regel bemüht ist, die Programmierung möglichst flexibel zu halten, werden die max. Member-Indizies halt normalerweise per Konstante angegeben bzw. daraus berechnet.
    Last edited by hucki; 31.10.2018 at 10:39.

  2. Folgender Benutzer sagt Danke zu hucki für den nützlichen Beitrag:

    Credofire (31.10.2018)

  3. #12
    Join Date
    25.06.2017
    Location
    Oerlinghausen
    Posts
    2,521
    Danke
    262
    Erhielt 477 Danke für 392 Beiträge

    Default

    Quote Originally Posted by hucki View Post
    Die Formel sollte IMHO so lauten (PS: wenn die Arrays mit Member 1 begonnen werden; bei 0 wäre es +1 an der ersten Stelle):
    Code:
    // ---< DestinyArray: Grösse berechnen & Array anlegen >---
    xIdxMaxDst := (xIdxMaxSrc - 1) * xIdxMaxSrc / 2
    Bei 2 Membern gibt es 1 Summe, bei 3 -> 3 (2+1), bei 4 -> 6 (3+2+1), bei 5 ->10 (4+3+2+1), usw. =
    In meinem Code gehe ich davon aus, dass die Elemente des Array von 1 bis xIdxMaxSrc durchnumeiert sind - hatte ich vergessen zu erwähnen.
    Anfangs hatte ich
    xIdxMaxDst = xIdxMaxSrc * (xIdxMaxSrc + 1) / 2
    weil darin aber als ZwischenErgebnis auch "Halbe" vorkommen - also nicht nur ganze Zahlen - habe ich stattdessen ausmultipliziert und
    xIdxMaxDst = (xIdxMaxSrc * xIdxMaxSrc + xIdxMaxSrc) / 2
    geschrieben, so dass nur noch gerade Zahlen durch 2 dividiert werden.
    In VBA funktionieren beide Versionen. Was SCL bzw. TIA bei der ersten Version macht (ohne zwischendurch in REAL zu wandeln), weiss ich nicht.
    Leider ist jedoch, wie bereits erwähnt, das Berechnen von Konstanten zum Anlegen von Arrays unter TIA nicht möglich.
    Oder kennt da jemand einen Kniff?
    Hatte ich wohl zur Kenntnis genommen, aber das betrifft auch nur die Vorbereitung zur Aufgabenstellung und nicht die Aufgabe selbst.
    Quote Originally Posted by Credofire View Post
    Nach der Ausgangsbeschreibung trifft doch aber die Gausssche Summenformel nicht zu, denn der Ersteller will ja jede zahl mit jeder addieren. Also nicht 1+2+3+4+5 sondern 1+2 + 1+3 + 1+4 +1+5 + 2+1 + 2+3 ... usw.
    Oder würfel ich da grad was durcheinander?
    Dein Würfel ist wahrscheinlich topfit, aber die Aufgabenstellung ein wenig widersprüchlich.
    Ich hatte mich an
    Quote Originally Posted by miroblaz View Post
    Ergebnis soll ein neues Array sein:
    1
    2
    3
    4
    5
    1+2
    1+3
    1+4
    1+5
    2+3
    2+4
    usw. sein
    orientiert und nicht an "alle Elemente eines Arrays miteinander zu addieren". In dem vom TE gezeigten Ergebnis enthalten die ersten 5 Elemente keine Summe, sondern sind mit dem SourceArray identisch.

    PS:
    In meinem Code werden in VBA auch die ArrayElemente mit Index 0 angelegt, aber nicht benutzt - pure Verschwendung - ich weiss.
    Last edited by Heinileini; 31.10.2018 at 11:34.

  4. #13
    Join Date
    05.11.2010
    Posts
    45
    Danke
    15
    Erhielt 0 Danke für 0 Beiträge

    Default

    Hi Hucki,

    ungefähr so hab ich es auch gemacht:
    [CODE]
    FOR #e := 1 TO #u-1 BY 1 DO //
    FOR #z := #e+1 TO #u BY 1 DO
    #"V Summen"[#s] := #"Testarray"[#e] + #"Testarray"[#z];
    #s := #s + 1;
    END_FOR;
    END_FOR;
    [CODE]

  5. #14
    Join Date
    06.10.2004
    Location
    Kopenhagen.
    Posts
    5,572
    Danke
    445
    Erhielt 1,000 Danke für 792 Beiträge

    Default

    #s wird nicht initialisiert bevor den ersten Durchlauf der Schleife !
    Jesper M. Pedersen

  6. #15
    Join Date
    25.06.2017
    Location
    Oerlinghausen
    Posts
    2,521
    Danke
    262
    Erhielt 477 Danke für 392 Beiträge

    Default

    Quote Originally Posted by JesperMP View Post
    #s wird nicht initialisiert bevor den ersten Durchlauf der Schleife !
    Ist doch egal, weil #u in FOR #e := 1 TO #u-1 auch nicht definiert ist
    Mit etwas Glück gibt es keinen ersten Durchlauf der Schleife - oder prüft SCL erst nach dem ersten SchleifenDurchlauf?
    Ungefähr so hat es der TE gemacht, schreibt er. Und sehr ungefähr hat er sich auch an seine Aufgabenstellung gehalten . . .

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

    miroblaz (02.11.2018)

  8. #16
    Join Date
    27.06.2009
    Location
    am Nordharz
    Posts
    4,658
    Danke
    559
    Erhielt 1,249 Danke für 1,017 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Quote Originally Posted by Heinileini View Post
    Quote Originally Posted by JesperMP View Post
    #s wird nicht initialisiert bevor den ersten Durchlauf der Schleife !
    Ist doch egal, weil #u in FOR #e := 1 TO #u-1 auch nicht definiert ist
    Muss beides nicht sein.

    #s könnte eine Temp-Variable mit Defaultwert = 1 sein und wäre unter TIA damit bei jedem neuen Bausteinaufruf wieder auf diesen automatisch initialisiert.
    [Edit]
    Sorry ,
    Default bei Temp ist immer 0, aber die Temps sind nicht mehr irgendwas wie bei Classic.
    Je nach Arraydefinition (siehe Heinilein) hat man also nicht unbedingt einen Fehler.
    [/Edit]
    #u könnte auch eine Baustein-Konstante sein.

    Insbesondere auf Ersteres würde ich mich in meinen eigenen Programmen aber nicht verlassen.
    Last edited by hucki; 02.11.2018 at 15:35.

Similar Threads

  1. Anzahl der Elemente im Array
    By Mellimelly in forum CODESYS und IEC61131
    Replies: 10
    Last Post: 21.09.2019, 22:41
  2. Array Elemente benennen
    By hicom500 in forum CODESYS und IEC61131
    Replies: 9
    Last Post: 15.11.2017, 22:29
  3. Replies: 4
    Last Post: 17.02.2012, 11:17
  4. Tabelle für Array Elemente
    By TimeOUT in forum CODESYS und IEC61131
    Replies: 2
    Last Post: 15.02.2012, 14:25
  5. Komponenten alle miteinander kompatibel?
    By DerPraktikant in forum Simatic
    Replies: 3
    Last Post: 17.11.2008, 11:42

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •