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

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

Thema: Gerade oder Ungerade?

  1. #1
    Registriert seit
    16.02.2007
    Beiträge
    149
    Danke
    33
    Erhielt 17 Danke für 15 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    mir will einfach nix vernünftiges (und einfaches) einfallen um festzustellen, ob eine Zahl (DINT) gerade oder ungerade ist. Hat jemand einen Denkanstoss für mich?

    Gruß Wilhelm
    Zitieren Zitieren Gerade oder Ungerade?  

  2. #2
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.181
    Danke
    923
    Erhielt 3.289 Danke für 2.658 Beiträge

    Standard

    Ich lass' dann mal anderen den Vortritt und verweise nur auf die Forums-Suche...

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  3. #3
    Registriert seit
    15.04.2011
    Beiträge
    1.122
    Danke
    229
    Erhielt 208 Danke für 176 Beiträge

    Standard

    Hallo PN/DP,

    mal schauen, wie lange Dich die anderen "hängen" lassen....
    Gruß
    190B

  4. #4
    Registriert seit
    05.10.2005
    Beiträge
    2.373
    Danke
    321
    Erhielt 296 Danke für 266 Beiträge

    Standard

    Wie würdest du denn in Mathematik eine gerade oder ungerade Zahl beschreiben? ...


    ...geht aber auch einfacher...
    Gesendet von meinem GT-N7100 mit Tapatalk 2
    Geändert von thomass5 (15.03.2013 um 17:41 Uhr)

  5. #5
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.224
    Danke
    630
    Erhielt 955 Danke für 769 Beiträge

    Standard

    Denkanstoß: Welches Bit ist bei einer ungeraden Zahl immer gesetzt?
    Rainer Hönle
    DELTA LOGIC GmbH

    Ein Computer kann das menschliche Gehirn nicht ersetzen. Engstirnigkeit kann unmöglich simuliert werden. (Gerd W. Heyse)

  6. #6
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.181
    Danke
    923
    Erhielt 3.289 Danke für 2.658 Beiträge

    Standard

    Hmm, nun bin ich aber überrascht, daß ich auf Anhieb nichts in der Forumssuche finde... Ich hätte schwören können ...
    Ich glaube, für diese Aufgabe brauchen wir eine FAQ.

    Da der TE nicht mehr online ist wird er die Forumssuche wohl auch nicht (mehr) nutzen.

    Also mein Tip: das niederwertigste Bit auswerten
    z.B. mit "SRD 1" in das Statusbit A1 schieben und mit "U ==0 oder U <>0" abfragen oder mit "UD DW#16#1" ausmaskieren

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  7. #7
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.220
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Doch da ist was zu finden, wenn auch nicht viel, uralter Beitrag würde ich sagen: http://www.sps-forum.de/showthread.p...light=Ungerade
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  8. #8
    WL7001 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    16.02.2007
    Beiträge
    149
    Danke
    33
    Erhielt 17 Danke für 15 Beiträge

    Standard

    Zitat Zitat von Ralle Beitrag anzeigen
    Doch da ist was zu finden, wenn auch nicht viel, uralter Beitrag würde ich sagen: http://www.sps-forum.de/showthread.p...light=Ungerade
    Danke für den Hinweis Ralle, der reicht völlig aus und enthält den Denkanstoß der mir gerade nich einfiel.

    @all: Ich hatte natürlich vorher die Forensuche bemüht und ca. 1h gelesen, aber das was ich suchte habe ich nicht gefunden. Auf das "rechteste Bit" bin ich gerade eben nicht gekommen. Ist euch sicher völlig unbekannt, das einem eine recht einfache Lösung nicht einfällt.


    Gruß Wilhelm

  9. #9
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.181
    Danke
    923
    Erhielt 3.289 Danke für 2.658 Beiträge

    Standard

    Also da in der Forumssuche so wenig zu finden ist, will ich mal ein paar Lösungen nennen (es gibt ja sooo viele). Damit die Forumssuche beim nächsten mal tatsächlich was findet. Gerade die eine gefundene Lösung ist ja überhaupt nicht zu empfehlen.
    Welche Programmiersprache sollte es denn überhaupt sein? Nicht alle Lösungen sind in jeder Programmiersprache realisierbar.

    (im folgenden ist X der zu testende DINT-Wert)

    (1) Zunächst gibt es die quick-and-dirty-Lösung mit dem Speichern von X in einen Schmiermerkerspeicher (lokal oder global) und direkte Adressierung des niederwertigsten Bits (T LD0 / U L3.0). Auch in SCL mittels der AT-Sicht realisierbar.

    (2) Dann gibt es die imho effizienteste Lösung, das niederwertigste Bit in das Statusbit A1 zu schieben (SRD 1) oder zu rotieren (RRD 1) und dann A1 abzufragen (U <>0 / U >0).
    (das wurde so auch schon in Beitrag #6 empfohlen)

    (3) Oder man kann das niederwertigste Bit mit einer Wordverknüpfung ausmaskieren (UD DW#16#1). Ist das Ergebnis = 0 dann war X gerade. Diese Lösung eignet sich zum Testen eines beliebigen Bits (auch das Vorzeichen!) in X (durch geeignete Wahl des Maskierwertes).

    (4) X durch 2 dividieren und wieder mit 2 multiplizieren. Kommt dabei das gleiche Ergebnis raus wie X, dann ist X gerade.

    (5) X durch 2 dividieren und den Divisionsrest betrachten (modulo): Rest = 0: X ist gerade / Rest = 1: X ist ungerade

    (6) den AKKU um 31 Bits nach links schieben (SLD 31). Ist danach der AKKU = 0, dann war X gerade. Ist AKKU <> 0 (bzw. AKKU < 0), dann war X ungerade.

    (7) den AKKU um 1 Bit nach rechts rotieren (RRD 1). Ist danach der AKKU < 0 (negativ), dann war X ungerade. AKKU >=0 (positiv), dann war X gerade.


    (2a) Wenn man X nur testen will und X unverändert im Akku1 behalten will:
    Code:
    // der zu testende Wert ist im AKKU1
          RRD  1            // niederwertigstes Bit --> A1
          U    <>0          // A1 --> VKE
          RLD  1            // AKKU1 wiederherstellen
    // AKKU1 und AKKU2 sind unverändert, die Information ob gerade oder ungerade steckt im VKE
    // VKE = 0: der Wert in AKKU1 ist gerade / VKE = 1: der Wert im AKKU1 ist ungerade
    Kennt jemand weitere Möglichkeiten? Gibt es Vielleicht sogar was über Umwandlung in Gleitkommazahl?


    @WL7001
    Sorry Wilhelm, daß ich Dir nicht gleich die Lösung präsentiert habe, doch gerade eine Stunde vorher wurde mir nahegelegt, anderen Forumsteilnehmern auch mal eine Chance zur Antwort zu geben ...

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet
    Zitieren Zitieren Viele Wege führen nach Rom - gerade und ungerade  

  10. Folgende 5 Benutzer sagen Danke zu PN/DP für den nützlichen Beitrag:

    190B (15.03.2013),hucki (16.03.2013),Perfektionist (16.03.2013),Rainer Hönle (16.03.2013),WL7001 (16.03.2013)

  11. #10
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.181
    Danke
    923
    Erhielt 3.289 Danke für 2.658 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    (8)(9) Kann/Darf man keine Vergleiche nutzen und keine Statusbits auswerten, dann kann man auch eine Sprungleiste oder die LOOP-Operation nutzen:
    Code:
    // (8)
          L    "X"
          UD   DW#16#1      // UW W#16#1 reicht auch
          SPL  ETAB
          SPA  EVEN         // gerade
          SPA  ODD          // ungerade
    ETAB: NOP  0
    
    // (9)
          L    "X"
          UD   DW#16#1      // UW W#16#1 reicht auch
          LOOP EVEN         // gerade
    ODD:  NOP  0
    ...
    EVEN: NOP  0
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet
    Zitieren Zitieren Zwei habe ich noch...  

  12. Folgende 3 Benutzer sagen Danke zu PN/DP für den nützlichen Beitrag:

    190B (15.03.2013),hucki (16.03.2013),Rainer Hönle (16.03.2013)

Ähnliche Themen

  1. Gerade od. Ungerade das ist hier die Frage
    Von Anonymous im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 05.02.2014, 15:07
  2. Ungerade Adressierung im Datenbaustein
    Von matziane im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 11.10.2011, 11:11
  3. Antworten: 12
    Letzter Beitrag: 11.12.2007, 07:43
  4. Bin glaub gerade zu doofi
    Von maxi im Forum Antriebstechnik
    Antworten: 2
    Letzter Beitrag: 31.10.2006, 17:06
  5. gerade oder Ungerade Anzahl der Ausgänge
    Von Otto im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 31.10.2006, 09:17

Lesezeichen

Berechtigungen

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