dringend Hilfe zu Zählern

Eagle

Level-1
Beiträge
1
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Tag!
Ich bin neu hier im Forum und habe ein Problem mit einer Prüfungsaufgabe.

Es soll gezählt werden, wie viele Bits im Eingangsbyte 0 den Wert 1 haben. Wenn der Wert gerade ist, dann wird M20.0=0, ansonsten o.
Die Zahl 0 ist eine gerade Zahl.

Eine Lösung in AWl wäre sehr hilfreich. Danke schon mal im voraus.
 
Hallo,

bei solchen Sachen werden dir die meisten erst helfen wenn du zumindest einen Ansatz bietest und dann fragen hast wo du nicht weiterkommst.
Bei Prüfungs- und Schulaufgaben wird sonst kaum einer tätig hier.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Da Du ja dringend hilfe brauchst hier:

Code:
FUNCTION countBits : BOOL
VAR_INPUT
    Eingangsbyte    :BYTE;
END_VAR
VAR
    Counter         :BYTE;
END_VAR
Code:
Counter := 0;
IF Eingangsbyte.0 THEN
    Counter := Counter + 1;
END_IF;
IF Eingangsbyte.1 THEN
    Counter := Counter + 1;
END_IF;
IF Eingangsbyte.2 THEN
    Counter := Counter + 1;
END_IF;
IF Eingangsbyte.3 THEN
    Counter := Counter + 1;
END_IF;
IF Eingangsbyte.4 THEN
    Counter := Counter + 1;
END_IF;
IF Eingangsbyte.5 THEN
    Counter := Counter + 1;
END_IF;
IF Eingangsbyte.6 THEN
    Counter := Counter + 1;
END_IF;
IF Eingangsbyte.7 THEN
    Counter := Counter + 1;
END_IF;

IF ((Counter MOD 2) <> 0) THEN
    countBits := TRUE;
ELSE
    countBits := FALSE;
END_IF;
 
Zuletzt bearbeitet:
hallöchen

matmer du sprichts mir aus der seele

noch besser ist es wenn schülerchen aufgaben von internet abgeben und dann nicht wissen was programmiert ist

so aber zu deinen problem

Du hast ein Byte wo du die 1 Bits zählen willst
du hast einige möglichkeiten

entweder du schiebst dir das bit 1 nach denn anderen nach rechts und siehst nach was am 1 bit ansteht und zählst dies

oder du machst eine einfache addition wo du bei einen 1 am bit deine zahl um 1 hochrechnest

probiers mal aus stell denn code online und deine fragen dazu
 
Zuviel Werbung?
-> Hier kostenlos registrieren
In der Standartbibliothek gibt es irgendwo einen FC99 "Bitsum".
Dieser Zählt die Bits in einem Doppelwort, die Auswertung ob gerade oder nicht
sollte ja kein Problem mehr darstellen.

Mfg
Manuel
 
...
entweder du schiebst dir das bit 1 nach denn anderen nach rechts und siehst nach was am 1 bit ansteht und zählst dies
...

...das gefällt mir.


Code:
FUNCTION countBits_for : BOOL
VAR_INPUT
    Eingangsbyte    :BYTE;
END_VAR
VAR
    Hilfsbyte       :BYTE;
    Counter         :BYTE;
    forCount        :INT;
END_VAR
Code:
Counter := 0;

FOR forCount := 0 TO 7 DO
    Hilfsbyte := SHR(Eingangsbyte,forCount);
    IF Hilfsbyte.0 = TRUE THEN
        Counter := Counter + 1;
    END_IF;
END_FOR;

IF ((Counter MOD 2) <> 0) THEN
    countBits_for := TRUE;
ELSE
    countBits_for := FALSE;
END_IF;
 
Zuletzt bearbeitet:
zotos er will awl nicht scl

und wieso machen wir seine aufgaben
der soll doch was lernen

Das er AWL will ist klar. Eben weil ich ihm nicht die Hausaufgabe machen will gebe ich ihm die Lösung nicht in AWL ;o)

Aber vieleicht gefällt dir das auch

wenn du in deinen zähler byte das ganz rechte bit ansiehst weist du auch obs gerade oder ungerade ist dann ganzt du dir deine ganze modula berechnung sparen

rechte bit 1 = ungerade
rechte bit 0 = gerade

Nee das gefällt mir nicht.

Bei Modulo sehe ich auf den ersten Blick ohne Kommentar um was es geht.
Und bei Alternatvie die Du erwähnt hast wird der Code zwar kürzer aber nicht hübscher. Wo bei das im Auge des Betrachters liegt.

Mit Modulo
Code:
IF ((Counter MOD 2) <> 0) THEN
    countBits_for := TRUE;
ELSE
    countBits_for := FALSE;
END_IF;
Ohne Modulo
Code:
countBits_for := Counter.0;
 
Zuletzt bearbeitet:
ZOTOS soviel gemeinheit hätte ich dir nicht zugetraut


aber was was das bester bei diesen artikel ist

DRINGENDE HILFE .....

und er meldet sich nicht :rolleyes:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ZOTOS soviel gemeinheit hätte ich dir nicht zugetraut

Da bist Du wohl die Ausnahme ;o)

Ich denke aber das es nun egal ist ob ich etas mit Worten umschreibe oder ein Beispiel in ST liefere das Prinziep sollte er doch erkennen ;o)

Und weil es mir Spaß macht hier noch eine Abwandlung:

Code:
FUNCTION ungeradeBits : BOOL
VAR_INPUT
    EingangsByte        :BYTE;
END_VAR
VAR
    BitCount            :INT;
    forCount            :INT;
END_VAR
Code:
BitCount := 0;
FOR forCount := 0 TO 7 DO
    IF EingangsByte.0 = TRUE THEN
        BitCount := BitCount + 1;
    END_IF;
    EingangsByte := SHR(EingangsByte, 1);
END_FOR;
ungeradeBits := BitCount.0;
 
Zuletzt bearbeitet:
Zurück
Oben