Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
ef_informatik:zahlensysteme [2024-08-20 11:46] – [Dezimalzahlen mit Nachkommastellen] scaef_informatik:zahlensysteme [2024-08-27 12:40] (aktuell) – [Weitere Aufgaben] sps
Zeile 1: Zeile 1:
 ====== - Zahlensysteme & Datentypen ====== ====== - Zahlensysteme & Datentypen ======
 +
 +++++Lernziele|
 +
 +Grundsätzlich kann alles bis und mit Kapitel "Weitere Aufgaben" geprüft werden. Die folgenden Lernziele dienen als eine Art Checklist, sind aber nicht zwingend komplett:
 +
 +   * Wissen, warum Datentypen wichtig sind in C Sprachen.
 +   * Dynamische und statische Typisierung vergleichen. Vor- und Nachteile?
 +   * Zahlen in wissenschaftlicher Schreibweise darstellen.
 +   * Umwandlung von ganzen Zahlen (ints) dezimal <-> binär
 +   * Binärzahl in Gleitkommadarstellung bringen ...
 +   * ... und zugehörige Fachbegriffe (Mantisse, ...) erklären können.
 +   * Umwandlung von Gleitkommazahlen dezimal <-> binär
 +   * Umwandlung Gleitkommadarstellung in Binärzahl oder Dezimalzahl
 +   * Sonderfälle für binäre Gleitkommazahlen kennen und verstehen.
 +   * Binäre floats addieren können.
 +   * Codes zu den obigen Punkten verfassen können in Python oder C#.
 +
 +++++
 +
 +++++Praktische Python Befehle|
 +
 +<code python>
 +# Length
 +len("laenge von einem String oder Liste ...")
 +
 +# Data types
 +str(42)
 +int("132")
 +float(13)
 +type(42)
 +bin(132)
 +
 +# Strings
 +s = "ich bin ein String"
 +s[2:]
 +s[4:7]
 +s[:5]
 +s.replace('b','B')
 +li = s.split(' ')
 +s.strip("    hallo     ")
 +s.lstrip("    hallo     ")
 +s.rstrip("    hallo     ")
 +s = s.upper()
 +s = s.lower()
 +s.find("bin")
 +many_zeros_string = "0" * 100
 +
 +## TIPP: In diesem Thema bietet es sich meist an, mit Strings anstelle Listen zu arbeiten. Sollte man aber das Bedürfnis nach Listen haben, hier die wichtigsten Befehle:
 +li = ['k','s','r']
 +len(li)
 +li.append('romanshorn')
 +li.pop(2)
 +li.remove('k')
 +print(li)
 +</code>
 +
 +++++
  
 ===== - Voraussetzungen ===== ===== - Voraussetzungen =====
Zeile 283: Zeile 340:
 <nodisp 1> <nodisp 1>
 ++++Lösung| ++++Lösung|
 +
 +<code python>
 +def binary_string_to_float(bin_str,len_exp=5,len_mant=10):
 +    # SIGN
 +    sign = '0'
 +    if bin_str[0] == '-': sign = '1'
 +
 +    # SPECIAL CASE: ZERO
 +    if '1' not in bin_str: return [sign,'0'*len_exp,'0'*len_mant]
 +
 +    # TODO: other special cases (too small, too big, nan)
 +
 +    # if int convert into float
 +    if not '.' in bin_str: bin_str += '.'
 +
 +    # EXPONENT, MANTISSA
 +    bin_str = bin_str.lstrip('-').lstrip('0') # remove unnecessary stuff
 +    bias = (2**len_exp - 2)//2
 +    mantissa = bin_str
 +
 +    # determine exponent
 +    i_one = bin_str.find('1') # index of first '1' from left
 +    i_point = bin_str.find('.') # index of decimal point
 +    exponent = i_point - i_one
 +    if exponent > 0: exponent -= 1
 +
 +    # remove point from mantissa
 +    if '.' in bin_str: mantissa = bin_str[0:i_point] + bin_str[i_point+1::]
 +
 +    # add bias to exponent
 +    exp_w_bias = bin(exponent+bias)[2:]
 +    exp_w_bias = '0' * (len_exp - len(exp_w_bias)) + exp_w_bias
 +    if len(exp_w_bias) > len_exp:
 +        return [sign,'1'*len_exp,'0'*len_mant]
 +    
 +    # normalize mantissa
 +    mantissa = mantissa.lstrip('0')
 +    mantissa_normalized = mantissa[1::] # remove first '1' (i.e. normalize)
 +    # ensure mantissa has correct length
 +    if len(mantissa_normalized) > len_mant:
 +        mantissa_normalized = mantissa_normalized[0:len_mant]
 +    else:
 +        mantissa_normalized += '0' * (len_mant - len(mantissa_normalized))
 +
 +    # TODO: round mantissa correctly
 +    
 +    return [sign,exp_w_bias,mantissa_normalized]
 +</code>
 +
 ++++ ++++
 </nodisp> </nodisp>
Zeile 303: Zeile 409:
  
    * $42\_{10} = 101010\_2$    * $42\_{10} = 101010\_2$
-   * $0.375_{10} = 0.011$2+   * $0.375_{10} = 0.011\_2$
  
 Es gilt also $$42.375_{10} = 101010.011_2$$ Es gilt also $$42.375_{10} = 101010.011_2$$
Zeile 351: Zeile 457:
  
 <box 100%> <box 100%>
-**Aufgabe:** Schreibe eine Funktion z.B. in Python, mit der man ...+<color magenta>**Programmieraufgabe:**</color> Schreibe eine Funktion z.B. in Python, mit der man ...
  
    1. Ganze Dezimalzahlen ins Binärsystem umrechnet. Repetition, implementiere selbst den Restwertalgorithmus und verwende nicht z.B. `bin(...)`.\\ \\    1. Ganze Dezimalzahlen ins Binärsystem umrechnet. Repetition, implementiere selbst den Restwertalgorithmus und verwende nicht z.B. `bin(...)`.\\ \\
Zeile 358: Zeile 464:
  
 ++++Lösung| ++++Lösung|
- 
  
  
Zeile 364: Zeile 469:
 </box> </box>
  
-===== Zusatzaufgaben =====+===== Weitere Aufgaben =====
  
 <box 100%> <box 100%>
Zeile 465: Zeile 570:
    * Exponenten ermitteln    * Exponenten ermitteln
    * Mantissen ermitteln    * Mantissen ermitteln
-   * Exponenten angleichen, Komma der Mantissen entsprechend verschieben. Bias beibehalten+   * Exponenten angleichen, Komma der Mantissen entsprechend verschieben. Bias beibehalten.
    * Addition durchführen    * Addition durchführen
    * Komma verschieben, Exponent angleichen    * Komma verschieben, Exponent angleichen
Zeile 499: Zeile 604:
 **Aufgabe:** **Aufgabe:**
  
-   1. Bestimme die grösste und zweitgrösste Zahl, die man in einem C\#-Float (8-Bit Exponent, 23-Bit Mantisse). Verwende Python.\\ \\+   1. Bestimme die grösste und zweitgrösste Zahl, die man in einem C\#-Float (8-Bit Exponent, 23-Bit Mantisse) speichern kann. Verwende Python.\\ \\
    1. Wie gross ist die Differenz? Verwende Python.\\ \\    1. Wie gross ist die Differenz? Verwende Python.\\ \\
    1. Überzeuge dich davon, dass C\# nicht zwischen der grössten Zahl und zwischen einer Zahl, die in diesem Gap liegt, unterscheiden kann, zum Beispiel indem du diese von einander subtrahierst. Python hingegen hat da keine Probleme.\\    1. Überzeuge dich davon, dass C\# nicht zwischen der grössten Zahl und zwischen einer Zahl, die in diesem Gap liegt, unterscheiden kann, zum Beispiel indem du diese von einander subtrahierst. Python hingegen hat da keine Probleme.\\
  • ef_informatik/zahlensysteme.1724154364.txt.gz
  • Zuletzt geändert: 2024-08-20 11:46
  • von sca