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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Dezimalzahl stellenweise nach Array kopieren

  1. #1
    Registriert seit
    05.01.2014
    Beiträge
    7
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,
    ich suche eine Möglichkeit eine eingegebene Dezimalzahl stellenweise in ein Array zu speichern.
    Beispielsweise wird 345 übergeben, jetzt soll die 5 nach array[0], die 4 nach array[1] und die 3 nach array[2] geschoben werden. Ein array[..]= 0 ist das
    Abbruchkriterium. Möglicherweise stehe ich nur auf dem Schlauch oder das Ganze ist so einfach nicht zu machen. Welche Datentypen würdet ihr nehmen?
    Die Sprache ist ST.
    Ich hoffe ihr könnt mir helfen und bedanke mich schonmal vorab.
    Zitieren Zitieren Dezimalzahl stellenweise nach Array kopieren  

  2. #2
    Registriert seit
    16.03.2014
    Beiträge
    359
    Danke
    74
    Erhielt 45 Danke für 38 Beiträge

    Standard

    Hallo MrChipsy,
    ich hätte da 2 Ideen:
    Variante 1:
    Du läufst in einer Schleife von 1 bis len(int_to_string(deineVariable))
    und fischt dann das laufende Zeichen raus, wandelst es wieder in ein Byte und ab ins Array.
    Oder
    Variante 2:
    Du läufst in einer Schleife wo du die Größe deiner variable runterrechnset und ...
    Du nimmst einfach deine Zahl, teilst durch 10 mal 10 und ziehst dieses wiederum von deiner Zahl ab.
    Somit bekommst du immer die 1.er Stelle...
    Jetzt nur noch in der Schleife durch 10 Teilen, damit deine Zahl immer um den Faktor 10 kleiner wird.
    Ich hoffe mich nicht zu kompliziert ausgedrückt zu haben.

    LG
    Shrimps

  3. #3
    Registriert seit
    16.03.2014
    Beiträge
    359
    Danke
    74
    Erhielt 45 Danke für 38 Beiträge

    Standard

    Habe das mal auf die schnelle probiert:
    Die tmp1 und tmp2 sind nur kleine Hilfen fürs tracen, kann man alles logischerweise zusammencrunchen...
    Die Schrittkette ist nur für mein Gewissen

    LG
    Shrimps
    Code:
    PROGRAM MAIN
    VAR
    
        aZahlen    : ARRAY [0..9] OF INT;
        iTest    : INT := 3456;
        Index    : INT;
        iLen        : INT;
        Schritt     : UINT;
        tmp1, tmp2    :  INT;
    END_VAR
    
    CASE Schritt OF
    
    0:
        iLen    := LEN(INT_TO_STRING(iTest));
        Schritt := 10;
    
    10:
        FOR Index := 0 TO iLen - 1 DO;
            tmp1 := itest / 10 * 10;
            tmp2 := itest - tmp1;
            aZahlen[Index] := tmp2;
            itest := itest / 10;
        END_FOR
    
        Schritt := 20;
    
    20: ;
    
    END_CASE

  4. #4
    MrChipsy ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    05.01.2014
    Beiträge
    7
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Vielen Dank für die Tipps.
    Die Berechnung von tmp1 erschließt sich mir noch nicht. itest/10 *10 =>itest.
    Kannst du deine Berechnung nochmal erleutern?

  5. #5
    Registriert seit
    16.03.2014
    Beiträge
    359
    Danke
    74
    Erhielt 45 Danke für 38 Beiträge

    Standard

    Hi,
    ich war etwas "schmutzig":
    Da die variable temp1 als INT deklariert ist, nutze ich diese zum Runden.
    Wenn du also 3456 /10 * 10 rechnest, kommt 3450 raus !
    Daher: 3456 - 3450 = 6 !!!

    usw...


    LG
    Shrimps

  6. #6
    MrChipsy ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    05.01.2014
    Beiträge
    7
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Super, vielen Dank. Ich muss unbedingt mehr auf die Datentypen achten.

  7. #7
    Registriert seit
    12.04.2005
    Ort
    Black Forest
    Beiträge
    1.336
    Danke
    27
    Erhielt 130 Danke für 117 Beiträge

    Standard

    Als Alternative könnte man auch die Zahl in ein String wandeln (INT to String) und dann auf die einzelnen Zeichen (CHAR) zugreifen!
    Entweder wandelt man jedes einzelnes Zeichen dann wieder zurück in INT (String to INT) wenn man es in Array schreibt,
    oder man kann auch den Zeichenwert – 30hex nehmen und hat somit den Zahlenwert.

    „Eine Frage raubt mir den Verstand bin ich verrückt oder sind es die Anderen ?“

    Albert Einstein

  8. #8
    Registriert seit
    20.01.2012
    Beiträge
    98
    Danke
    0
    Erhielt 36 Danke für 34 Beiträge

    Standard

    Hallo,

    ich habe auch noch etwas. Um an die Länge zu kommen könnte man anstelle von
    Code:
    iLen    := LEN(INT_TO_STRING(iTest));
    auch mit dem Logarithmus arbeiten
    Code:
    iLen    := LOG(iTest)+1;
    Hier jetzt noch eine Lösung mit while Schleife
    Code:
    WHILE iTest<>0 DO
        temp := iTest/10;
        aZahlen[Index] := iTest-temp*10;
        iTest := temp;
        Index := Index+1;
    END_WHILE
    Gruß

  9. Folgender Benutzer sagt Danke zu Thruser für den nützlichen Beitrag:

    shrimps (04.02.2015)

  10. #9
    Registriert seit
    20.01.2012
    Beiträge
    98
    Danke
    0
    Erhielt 36 Danke für 34 Beiträge

    Standard

    Mist,

    jetzt habe ich auch noch den Modulo vergessen

    Code:
    WHILE iTest <>0 DO
        aZahlen[Index] := iTest mod 10;
         iTest := iTest/10;
         Index := Index+1;
     END_WHILE
    Gruß
    Geändert von Thruser (04.02.2015 um 16:13 Uhr)

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

    shrimps (04.02.2015)

  12. #10
    Registriert seit
    16.03.2014
    Beiträge
    359
    Danke
    74
    Erhielt 45 Danke für 38 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Thruser,
    die Idee mit dem LOG() habe ich nachgestellt und bei meiner Typendeklaration (INT) geht dies nicht !
    Gibt ne Fehlermeldung !!!
    (Fehler 4010: Unverträgliche Typen, kann REAL nicht in INT konvertieren )
    Geht demnach nur mit
    iLen := rela_to_int(log(iTest)) + 1;

    LG
    Shrimps

Ähnliche Themen

  1. Aus einem ARRAY ausgewählte Werte in ein anderes ARRAY kopieren
    Von lacosta19 im Forum CODESYS und IEC61131
    Antworten: 7
    Letzter Beitrag: 06.08.2014, 15:42
  2. Array in mehrdiomensionales Array kopieren
    Von Curby im Forum CODESYS und IEC61131
    Antworten: 5
    Letzter Beitrag: 28.01.2014, 16:02
  3. TIA Struct nach Array kopieren
    Von Christof G im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 04.07.2013, 13:37
  4. Array kopieren
    Von gloeru im Forum CODESYS und IEC61131
    Antworten: 5
    Letzter Beitrag: 05.03.2011, 20:06
  5. S7-200 - Wandlung Dezimalzahl nach Hex
    Von smartie im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 05.05.2009, 13:36

Lesezeichen

Berechtigungen

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