====== - Zahlensysteme & Datentypen ====== ++++Lernziele| **1 Integers** * Ich kann erklären, was ein **Datentyp** ist, und den Unterschied zwischen **statischer** (C\#, C\+\+) und **dynamischer** (Python) Typisierung an einem Beispiel erläutern -- inklusive je eines Vor- und eines Nachteils. * Ich kann für $n$ Bit berechnen, **wie viele** Zahlen darstellbar sind sowie die **kleinste** und die **grösste** Zahl -- je für `int` und `unsigned int`. * Ich kann für eine konkrete Anwendung einen **passenden Datentyp wählen** und meine Wahl mit einer Abschätzung des Wertebereichs begründen. * Ich kann erklären, was ein **Überlauf (Overflow)** ist, warum dabei aus der grössten positiven die kleinste negative Zahl wird, und warum das so gefährlich ist (Ariane 5). **2 Programmieren in C\#** * Ich kann in C\# ein einfaches Programm schreiben: Variablen **deklarieren** und mit Werten belegen, rechnen, ausgeben, sowie **Verzweigungen** und **Schleifen** verwenden. Insbesondere kenne ich die Falle der **Ganzzahldivision** (`7 / 3` ergibt `2`). **3 Gleitkommazahlen** * Ich kann eine Dezimalzahl mit Nachkommateil ins **Binärsystem** umwandeln und in **wissenschaftlicher Schreibweise** $1.M_2 \cdot 2^{e}$ darstellen -- und umgekehrt. * Ich kann den **Aufbau einer Gleitkommazahl** erklären: Vorzeichenbit, Exponent mit **Bias** und **normalisierte Mantisse** mit **impliziter Eins**. * Ich kann eine Dezimalzahl ins **Mini-Float-Format** (oder ähnliches Format mit vorgegebener Anzahl Bits) umwandeln und ein Bitmuster zurück in eine Dezimalzahl. Ich kann damit die grösste und die kleinste darstellbare Zahl bestimmen. * Ich kann erklären, warum $0.1$ **nicht exakt** darstellbar ist und warum `0.1 + 0.2 == 0.3` zu `False` führt -- und weiss, wie man Gleitkommazahlen stattdessen vergleicht. * Ich kann erklären, warum Gleitkommazahlen **ungleichmässig** auf dem Zahlenstrahl liegen, und welche Folgen das hat (Rundungsfehler summieren sich auf, **Absorption**). * Ich kenne die **Sonderfälle** $\pm 0$, $\pm\infty$ und `NaN` und weiss, dass keiner davon eine Fehlermeldung auslöst. ++++ ++++Praktische Python Befehle| # 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) ++++ ===== Voraussetzungen ===== Aus dem Grundlagenfach weisst du bereits, was Zahlensysteme sind. Insbesondere kennst du das Binärsystem und kannst: * Umrechnen: Dezimalsystem <-> Binärsystem * Darstellung negativer Zahlen * Rechnen mit Binärzahlen: Addition, Multiplikation, Subtraktion * mithilfe des Binärsystems Mitmenschen (die es verdient haben) eloquent beleidigen können * Gegeben $x-$Bits für Darstellung -> min./max. Zahl bestimmen, die damit dargestellt werden kann Das Dossier **Zahlensysteme** aus dem Grundlagenfach findest du hier: {{ :ef_informatik:gfif_zahlensysteme_dossier.pdf |Dossier Zahlensysteme (GFIF)}} ===== Dossier ===== {{ :ef_informatik:ef_datentypen.pdf |Dossier Datentypen}}