Markus1984: Binärcode

Hallo!

Ich bin sozusagen ein Quereinsteiger und hab vorher mit Codieren eigentlich nichts zu tun gehabt. Jetzt haben wir die Aufgabe bekommen ein Thermometer mit einem möglichst effizienten Binärcode zu codieren in 0.5 Grad schritten von -42.5 Grad bis +51 Grad. Da wir in der Vorlesung keinerlei Beispiele in dieser Art durchgemacht haben bin ich etwas unsicher wie das Ganze aussehn soll. Wäre dankbar wenn mir jemand den zündenden Funken spendieren könnte .).. bis denn

  1. Hallo,

    Jetzt haben wir die Aufgabe bekommen ein Thermometer mit einem möglichst effizienten Binärcode zu codieren in 0.5 Grad schritten von -42.5 Grad bis +51 Grad.

    Dein abzudeckender Bereich umfasst somit (51 + 42.5) * 2 + 1 = 186 verschiedene Werte.

    Nun hast Du bei der Binärdarstellung mit

    1 Bit: 2^1 =   2
    2 Bit: 2^2 =   4
    3 Bit: 2^3 =   8
    4 Bit: 2^4 =  16
    5 Bit: 2^5 =  32
    6 Bit: 2^6 =  64
    7 Bit: 2^7 = 128
    8 Bit: 2^8 = 256

    Möglichkeiten.

    Du siehst, dass Du um den geforderten Bereich abdecken zu können, acht Bits benötigst. Ich persönlich würde die Werte analog zu einer vorzeichenbehafteten Ganzzahl codieren (schau Dir dazu den Wikipedia-Artikel Zweierkomplement an). Du bekämst damit einen Wertebereich von -64.0 bis +63.5 Grad, der die Aufgabe wunderbar und speichereffizient abdeckt.

    Freundliche Grüße

    Vinzenz

  2. Moin!

    Ich bin sozusagen ein Quereinsteiger und hab vorher mit Codieren eigentlich nichts zu tun gehabt. Jetzt haben wir die Aufgabe bekommen ein Thermometer mit einem möglichst effizienten Binärcode zu codieren in 0.5 Grad schritten von -42.5 Grad bis +51 Grad.
    Da wir in der Vorlesung keinerlei Beispiele in dieser Art durchgemacht haben bin ich etwas unsicher wie das Ganze aussehn soll.

    Ich vermute, die Aufgabe ist absichtlich etwas anspruchsvoller gemacht worden, indem die Anforderung mit 0.5°-Schritten dazukam. Denn so hast du zwei Aspekte, über die du dir Gedanken machen musst:
     * wie codiere ich die gebrochenen Zahlenwerte?
     * wie gehe ich mit negativen Werten um?

    Wäre dankbar wenn mir jemand den zündenden Funken spendieren könnte .)..

    Tipp: Definiere dir eine Zahlenreihe, die den gewünschten Wert als "Anzahl der 0.5°-Schritte vom Nullpunkt aus" beschreibt. Diese Anzahl der Schritte ist ganzzahlig und kann positiv oder negativ sein. Um diesen Wert zu codieren, bietet sich nun das Zweierkomplement-Verfahren an.

    Schönes WE noch,
     Martin

    --
    Ich bin im Prüfungsstress, ich darf Scheiße sagen.
      (Hopsel)
    1. wow danke für die schnellen antworten.. ich hoffe ich hab das richtig verstanden:

      -0,5° = 11111111
       0°   = 00000000
       0,5  = 00000001

      oder bin ich auf dem falschen Weg?

      1. Hi,

        ich hoffe ich hab das richtig verstanden:

        -64.0  = 10000000
             ...

        -0,5° = 11111111
        0°   = 00000000
        +0,5  = 00000001

        ...
          +63.5  = 01111111

        oder bin ich auf dem falschen Weg?

        ich glaube nicht, genau so hatte ich mir das auch vorgestellt. Damit ist der darstellbare Zahlenbereich zwar größer als gefordert, aber das dürfte ja wohl niemand stören.
        So kannst du den Binärwert als vorzeichenbehaftete Ganzzahl speichern, und zur Ausgabe brauchst du diesen Wert nur durch 2 zu teilen (Vorsicht: keine Ganzzahl-Division).

        So long,
         Martin

        --
        Noch Fragen? - Ich weiß es auch nicht.
        1. Danke euch beiden. Habt mir sehr viel weiter geholfen..
          Ich hoffe ich kann euch mit der Zeit noch mit mehr Anfängerfragen belästigen .)...

          bis denn

        2. echo $begrüßung;

          -64.0  = 10000000
               ...

          -0,5° = 11111111
          0°   = 00000000
          +0,5  = 00000001
               ...
            +63.5  = 01111111

          oder bin ich auf dem falschen Weg?

          ich glaube nicht, genau so hatte ich mir das auch vorgestellt. Damit ist der darstellbare Zahlenbereich zwar größer als gefordert, aber das dürfte ja wohl niemand stören.
          So kannst du den Binärwert als vorzeichenbehaftete Ganzzahl speichern, und zur Ausgabe brauchst du diesen Wert nur durch 2 zu teilen (Vorsicht: keine Ganzzahl-Division).

          Erweitern könnte man das System noch um einen NULL-Wert. Wenn beispielsweise das Thermometer aus irgenwelchen Gründen keinen Messwert liefern konnte, sollte man für diesen Zeitpunkt nicht den Wert für 0° notieren, denn das ist ja eine gültige Temperatur und verfälschte bei einer Durchschnittsbildung das Ergebnis. Man könnte den Wert für -64.0 als NULL definieren, müsste aber bei Berechnungen immer auf diesen Wert testen und ihn ausschließen oder sonderbehandeln.

          echo "$verabschiedung $name";

  3. Hallo,

    Hallo!
    [...] Jetzt haben wir die Aufgabe bekommen ein Thermometer mit einem möglichst effizienten Binärcode zu codieren in 0.5 Grad schritten von -42.5 Grad bis +51 Grad.

    erst mal muss man herausfinden, wieviele
    Grad-Schritte es überhaupt gibt:

    (51 - (-42.5))*2 + 1 = 188

    Von -42.5 bis 51.0 in 0.5-Grad-Schritten
    gibt es also 188 verschiedene Werte.
    Da 2^7 = 128 und 2^8 = 256,
    reicht zur Darstellung eine 8-bit-Binärzahl.

    Nun kann man definieren, dass die kleinste
    Temperatur -42.5 der Binärzahl 0 (00000000) entsprechen soll,
    dann hat der höchste Wert die Nummer 187 oder binär 10111011.

    Ist T die Temperatur und N die Binärzahl, dann
    gilt demnach

    T = -42.5 + 0.5*N bzw. N = 2*(T + 42.5)

    Viele Grüße

    Andreas