Unterrichtsmaterial

Table of Contents

1. Klasse 8 - Pflichtfach Informatik

1.1. Block 1 - Robotik / Algorithmen

1.1.1. Algorithmus

Eine definierte, endliche abfolge von Anweisungen

1.1.2. Schleifen

Ein Werkzeug, womit man Algorithmen beliebig oft wiederholen kann.

1.1.3. If-Abfragen

Ein Wekrzeug, womit man Algorithmen basierend auf Zustände kontrollieren kann. Z.B. wenn irgendwas, dann mach das. Wenn nicht, mach was anderes.

1.1.4. Funktionen

Ein von dem Benutzer selbst definierter Block, wodurch man Coderepetition vermeiden und die Übersichtlichkeit verbessern kann.

1.2. Block 2 - Rechnernetzte

1.2.1. IP-Adresse (Internet Protocol Address)

  • Eindeutige Adresse für jedes Gerät im Internet oder Netzwerk
  • Funktioniert wie eine Postanschrift/Adresse/Hausnummer für Computer
  • Besteht aus vier Zahlengruppen (Oktetten), getrennt durch Punkte (z.B. 192.168.1.1)
  • Ermöglicht den korrekten Austausch von Datenpaketen zwischen Sender und Empfänger
  • Besteht aus Netzwerk-ID und Host-ID
    • Wird durch Netzmaske gezeigt. Bei z.B. IP-Adresse 192.168.178.12 mit der Netzmaske 255.255.255.0 (auch als /24 dargestellt) wird gezeigt, dass 192.168.178 die Netzwerkadresse und 12 die Host-Adresse ist.

1.2.2. MAC-Adresse (Media Access Control Address)

  • Physikalische Adresse, die fest einem Gerät zugeordnet ist
  • Dient zur Identifizierung der Netzwerkadapter
  • Besteht aus 12 hexadezimalen Zeichen (Zahlen und Buchstaben) (6 Oktetten, Hexadezimal) (z.B. a1:b2:c3:d4:e5:f6)
  • Sie werden durch Doppelpunkte getrennt
  • Jede MAC-Adresse ist (theoretisch) weltweit einzigartig

1.2.3. MAC- und IP-Adressen Cheatsheet

IP-Adresse MAC-Adresse
4 Oktetten 6 Oktetten
Die Oktetten sind mit . voneinander getrennt Die Oktetten sind mit : voneinander getrennt
Dezimalsystem Hexadezimalsystem
Veränderbar Nicht Veränderbar
(theoretisch) nicht Einzigartig Einzigartig
Wie Adresse Wie Name
Besteht aus Netz- und Host-ID  

1.2.4. Binärsystem (Zweiersystem/Dualsystem)

  • Zahlensystem mit nur zwei Ziffern: 0 und 1
  • Computer nutzen ausschließlich das Binärsystem
  • Grundlage für fast alles in der Informatik
  • Die Stellen verdoppeln sich. Das heisst: 1111 = 1x8 + 1x4 + 1x2 + 1x1 = 15
  • Video

1.2.5. Hexadezimalsystem (Sechzehnersystem)

  • Zahlensystem mit 16 Grundziffern: 0-9 und A-F
  • Erleichtert die Lesbarkeit von langen Binärzahlen
  • Komprimiert Daten mit weniger Zeichen
  • Die Stellen werden mal 16. Das heisst: 13 = 1x16 + 3x1 = 19
  • Video

1.2.6. Zahlensysteme Cheatsheet

Dezimalsystem Binärsystem Hexadezimalsystem
10 Zeichen 2 Zeichen 16 Zeichen
0-9 0-1 0-9, A-F
“Normale Zahlen”/Grundsystem Computerzahlen Computerzahlen
321 = 3x10² + 2x10¹ + 1x10⁰ = 321 110 = 1x2² + 1x2¹ + 0x2⁰ = 6 A3 = 10x16¹ + 3x16⁰ = 163

1.2.7. LAN (Local Area Network)

  • Lokales Netzwerk in einem begrenzten Bereich
  • Verbindet Geräte wie Computer, Drucker und Server
  • Beispiele: Netzwerk zu Hause, in der Schule oder im Büro
  • Geräte sind meist durch Kabel miteinander verbunden

1.2.8. WAN (Wide Area Network)

  • WAN (Wide Area Network) deckt große geografische Gebiete ab
  • Es verbindet mehrere lokale Netzwerke (LANs) miteinander
  • Ein WAN nutzt öffentliche Übertragungswege und Telekommunikationsleitungen
  • Das Internet ist das bekannteste Beispiel für ein WAN

1.2.9. Hub (Netzwerk-Verteiler)

  • Einfaches Gerät zur Verbindung mehrerer Computer
  • Verteilt eingehende Daten an alle angeschlossenen Geräte
  • Weniger effizient als ein Switch
  • Heute kaum noch im Einsatz

1.2.10. Switch (Netzwerk-Schalter)

  • Gerät zur intelligenten Verteilung von Daten im Netzwerk
  • Verbindet mehrere Computer miteinander
  • Sendet Daten gezielt nur an den richtigen Empfänger
  • Effizienter als ein Hub

1.2.11. Router

  • Verbindet mehrere (i.d.R. 2) Netzwerke miteinander
  • z.B. 10.7.254.0 mit 10.7.249.0
  • Besitzt zwei Netzwekkarten, konfiguriert i.d.R. auf 1.
  • Z.B. 10.7.254.1 und 10.7.249.1.

1.2.12. Heimrouter

  • Ein Gerät, wie z.B. Fritzbox
  • Beinhaltet:
    • DHCP Server
    • Router (WAN/LAN Router)
    • Switch
    • Wireless Access Point
    • Firewall
    • und mehr!

1.2.13. DNS

  • Steht für Domain Name System
  • Record für alle Websites und IP-Adressen
  • Wird oft mit DHCP eingerichtet, damit ein Browser weiß, wie er z.B. youtube.de auflösen soll.
Domain IP-Adresse
youtube.com 8.8.8.9
omidmash.de 172.173.83.18

1.2.14. Protokolle (Netzwerkprotokolle)

  • Regelwerke für die Kommunikation zwischen Computern
  • Legen fest, wie Daten ausgetauscht werden
  • Verschiedene Protokolle für verschiedene Aufgaben
  1. DHCP (Dynamic Host Configuration Protocol)
    • Protokoll zur automatischen Vergabe von IP-Adressen und Netzwekkonfigurationen
    • Weist Geräten im Netzwerk automatisch Netzwerkeinstellungen zu
    • Vereinfacht die Netzwerkverwaltung erheblich
    • Funktioniert nach dem Client-Server-Modell
  2. Telnet (Telecommunication Network)
    • Protokoll für Fernzugriff auf andere Computer
    • Ermöglicht Bedienung eines entfernten Rechners
    • Überträgt Daten unverschlüsselt (unsicher)
    • Heute meist durch SSH ersetzt
  3. SSH (Secure Shell)
    • Verschlüsseltes Protokoll für sichere Fernverbindungen
    • Ermöglicht sicheren Zugriff auf entfernte Computer
    • Schützt Passwörter und Daten durch Verschlüsselung
    • Sicherer als Telnet
  4. SFTP/FTP (File Transfer Protocol)
    • Protokoll zur Übertragung von Dateien
    • Regelt den Datenaustausch zwischen Computern im Netzwerk
    • Ermöglicht Upload und Download von Dateien
    • Standard für Dateiübertragungen
  5. HTTP/HTTPS (Hyper Text Transfer Protocoll)
    • Protokoll zur Übertragung von Hypertext / Websites
    • HTTP wird i.d.R. nicht mehr benutzt und ist durch HTTPS (secure) ersetzt.
  6. ICMP (Internet Control Message Protocol)
    • Protokoll zum Austausch von Informations- und Fehlermeldunge
    • Wird für Netzwerkdiagnose verwendet (z.B. Ping-Befehl)
    • Meldet Probleme im Netzwerk
  7. SMTP (Simple Mail Transfer Protocol)
    • Protokoll für den Versand von E-Mails
    • Sorgt dafür, dass E-Mails zugestellt werden
    • Überträgt Nachrichten zwischen E-Mail-Servern
    • Postausgangsserver des E-Mail-Kontos
  8. IMAP/POP3
    • Protokoll für den Empfang von E-Mails
    • Sorgt dafür, dass E-Mails ankommen und im richtigen Ordner landen

2. WPU 10

2.1. Elementare Datentypen

Typ Beschreibung Beispiel
Variabel Etiketten, die Werte speichern; dürfen Buchstaben, Ziffern und Unterstriche enthalten; keine Leerzeichen; werden kleingeschrieben message = "hallo"
Integers Ganze Zahlen 3, -12, 0
Floats Zahlen mit Kommastellen 3.14, -12.00, 0.0000
Char Einzelne Unicode-Zeichen 'a', '!', '🐏'
Strings Geordnete Zeichenketten "hallo!"
Listen Geordnete, veränderliche Sammlung von Elementen; 0-indiziert [1, 2, 3, "4", "hallo"]
Tuples Geordnete, unveränderliche Sammlung von Elementen (1, 2, 3)
Dictionaries Sammlung von Schlüssel-Wert-Paaren {"name": "MZ", "email": "xyz@gymhum.de", "Alter": 32}

2.2. Gebräuchliche Funktionen

Funktion Beschreibung Beispiel
print() Gibt Objekte auf Standardausgabe aus print("Hallo")
len() Gibt Länge eines Objekts zurück len([1,2,3]) → 3
type() Gibt den Typ eines Objekts zurück type(42) → <class 'int'>
str(), int(), float() Konvertiert Werte in den entsprechenden Typ str(123) → "123"
range() Erzeugt eine Sequenz von Zahlen range(0,5) → 0,1,2,3,4
sorted() Gibt eine sortierte Liste zurück sorted([3,1,2]) → [1,2,3]
sum() Summiert Elemente einer iterierbaren Sequenz sum([1,2,3]) → 6
max(), min() Gibt größten/kleinsten Wert zurück max([1,2,3]) → 3
input() Liest Benutzereingabe von der Konsole name = input("Name? ")
help() Zeigt Hilfedokumentation an help(len)

2.3. Gebräuchliche Methoden

Typ Methode Beschreibung Beispiel
Liste .append(x) Fügt Element am Ende hinzu lst.append(4)
  .remove(x) Entfernt erstes Vorkommen von x lst.remove(2)
  .sort() Sortiert Liste in-place lst.sort()
  .pop(i) Entfernt und gibt Element an Index i zurück x = lst.pop(0)
Dict .keys() Gibt Schlüssel des Dictionary zurück d.keys()
  .values() Gibt Werte des Dictionary zurück d.values()
  .items() Gibt Schlüssel-Wert-Paare zurück d.items()
  .get(k, d) Gibt Wert für Schlüssel k zurück d.get("name", "n/a")
String .split(s) Trennt String an Trennzeichen s "a,b".split(",") → ["a","b"]
  .join(list) Verbindet Liste von Strings " ".join(["a","b"]) → "a b"
  .strip() Entfernt Leerzeichen am Anfang und Ende " a ".strip() → "a"
  .upper(), .lower() Wandelt in Groß-/Kleinschreibung um "a".upper() → "A"

2.4. Wichtige Konzepte

Konzept Beschreibung Beispiel
Klasse Bauplan für Objekte, definiert Attribute und Methoden class Person:
Instanz Konkretes Objekt einer Klasse p = Person()
Attribute Daten, die zu einer Instanz gehören (Instanz- oder Klassenattribute) self.name = "MZ"
__init__() Konstruktor: Initialisiert neue Instanz def __init__(self, name): self.name = name
Vererbung Kindklasse erbt von Elternklasse; ermöglicht Wiederverwendung class Student(Person):
super() Greift auf Methoden der Elternklasse zu super().__init__(name)
__str__() Gibt lesbare String-Repräsentation des Objekts zurück def __str__(self): return f"{self.name}"
__repr__() Gibt unverwechselbare String-Repräsentation für Entwicklung zurück def __repr__(self): return f"Person('{self.name}')"
__len__(), __getitem__() Ermöglicht Integration in Python-Syntax (z.B. len(), Indexzugriff) def __len__(self): return len(self.items)

3. Oberstufe

3.1. Rechnernetze

3.1.1. Authentizität

Die Authentizität bezieht sich darauf, dass die Identität von Benutzern, Geräten oder Informationen verifiziert werden kann. Es geht darum sicherzustellen, dass diejenigen, mit denen man interagiert, tatsächlich diejenigen sind, für die sie sich ausgeben.

3.1.2. Integrität

Mit der Integrität der Daten soll sichergestellt werden, dass keine Veränderung an den Daten unerkannt bleibt. Hier geht es also darum nachvollziehen zu können, welche Änderungen an den Daten vorgenommen wurden.

3.1.3. Vertraulichkeit

Durch die Vertraulichkeit wird sichergestellt, dass bestimmte Informationen nur den Personen zugänglich sind, die die entsprechenden Berechtigungen haben.

3.1.4. PKI (Public Key Infrastructure)

Infrastruktur zur Verwaltung digitaler Zertifikate.

  1. CA (Certificate Authority)
    • Zertifizierungsstelle zur Ausstellung digitaler Zertifikate
  2. RA (Root Authority)
    • Registrierungsstelle zur Identitätsprüfung in einer PKI

3.1.5. Web of Trust

Dezentrales Vertrauensmodell durch gegenseitige Bestätigung

3.2. Verschlüsselung

3.2.1. Klartext

Unverschlüsselte, lesbare Nachricht

3.2.2. Geheimtext

Verschlüsselte Nachricht

3.2.3. Asymmetrisches Verfahren

  • Verfahren mit öffentlichem und privatem Schlüssel
  • Ein Schlüssel zum ent- und ein Schlüssel zum verschlüsseln

3.2.4. Symmetrisches Verfahren

Ein Schlüssel zum Ver- und Entschlüsseln.

3.2.5. Schlüsseltauschproblem

Problem des sicheren Schlüsselaustauschs, lösbar durch z.B:

  1. Diffie-Hellman Verfahren

3.2.6. RSA Verfahren

Weit verbreitetes asymmetrisches Verschlüsselungsverfahren

3.2.7. Monoalphabetische Verfahren

  • Substitution mit festem Schlüsselalphabet
  • Caesar, RSA(?)

3.2.8. Polyalphabetische Verfahren

  • Substitution mit wechselndem Schlüssel, z.B. ein Wort
  • Vigénere

3.3. Programmierung Allgemein (CompSci)

3.3.1. Rekursive Funktionen

Funktionen, die sich selbst aufrufen.

In Python:

def fib(n):
    if n in [0,1]:
        return 1
    else:
        return fib(n - 1) + fib(n - 2)

In Haskell:

fib 0 = 0
fib 1 = 1
fib n = fib (n - 1) + fib (n - 2)

3.4. Haskell

3.4.1. Link für Infos und Übungen:

3.4.2. Mit Listen arbeiten

l = [1, 3..10]

l      -- [1,3,5,7,9]
tail l -- [3,5,7,9]
head l -- 1
init l -- [1,3,5,7]
take 2 l -- [1,3]
drop 2 l --[5,7,9]

3.4.3. Implementation von Caesar

import Data.Char (isLower, isUpper, ord, chr)

shift :: Int -> Char -> Char
shift n c
| isLower c = chr $ (ord c - ord 'a' + n) `mod` 26 + ord 'a'
| isUpper c = chr $ (ord c - ord 'A' + n) `mod` 26 + ord 'A'
| otherwise = c

caesarRec :: Int -> String -> String
caesarRec _ []          = []
caesarRec n (c:cs)      = shift n c : caesarRec n cs

3.5. Python und OOP

3.5.2. UML Diagramme

3.5.3. Code Snippets für UML-Übungen

class Restaurant:
    def __init__(self, restaurant_name, cuisine_type):
        self.restaurant_name = restaurant_name
        self.cuisine_type = cuisine_type
    def describe_restaurant(self):
        print(f"Restaurant Name: {self.restaurant_name.title()}\nArt der Cuisine: {self.cuisine_type.title()}")
    def open_restaurant(self):
        print("Das Restaurant hat jetzt auf!")
class IceCreamStand(Restaurant):
    def __init__(self, restaurant_name, cuisine_type):
        super().__init__(restaurant_name, cuisine_type)
        self.flavour = ['vanilla', 'strawberry', 'chocolate']
    def describe_flavour(self):
        print("These flavors are available!")
        for flavour in self.flavour:
            print(flavour.title())
class User:
    def __init__(self, first_name, last_name, date_of_birth, username, login_attempts = 0):
        self.first_name = first_name
        self.last_name = last_name
        self.date_of_birth = date_of_birth
        self.username = username
        self.login_attempts = login_attempts
     
    def describe_user(self):
        print(
            f"First Name: {self.first_name.title()}\n"
            f"Last Name: {self.last_name.title()}\n"
            f"Date of Birth: {self.date_of_birth.title()}\n"
            f"Username: {self.username}"
        )
     
    def greet_user(self):
        print(
            f"Hallo {self.first_name.title()} {self.last_name.title()}. "
            "Herzlich Willkommen!"
        )
     
    def increment_login_attempts(self):
        self.login_attempts += 1
     
    def reset_login_attempts(self):
        self.login_attempts = 0
     
class Admin(User):
    def __init__(self, first_name, last_name, date_of_birth, username, login_attempts = 0):
        super().__init__(first_name, last_name, date_of_birth, username, login_attempts = 0)
        self.privileges = Privileges(['can add post', 'can delete post', 'can ban user'])
        
     
class Privileges():
    def __init__(self, privileges):
        self.privileges = privileges
    def show_privileges(self):
        for privilege in self.privileges:
            print(privilege)

3.6. Muster Aufgaben

3.6.1. Users erstellen

  1. Aufgabe

    Du hast die Aufgabe bekommen, für IServ ein Login-System zu implementieren. Es gibt viele Benutzer, die sich einloggen wollen, und sie sollten unterschiedliche Rechte haben. Insgesamt gibt es drei Gruppen: Administrator, Lehrer und SuS. Der Auftraggeber will, dass die drei Gruppen von einem Hauptobjekt class User erben. Jeder User sollte Felder für Vorname, Nachname, Geburtsdatum, Benutzername und E-Mail-Adresse haben. Die Lehrer sollten zusätzlich noch Felder für Telefonnummer und Adresse haben. Bei der Admin-Gruppe sollte es auch noch eine Variable is_admin = True geben. Die Benutzernamen werden automatisch durch das Muster <vorname>.<nachname> erstellt, und die E-Mail-Adressen sollten durch das Muster <benutzername>@gymhum.de automatisch erstellt werden.

    • Erstelle ein grafisches Diagramm dafür, wie das Programm und die Objekte funktionieren sollen.
    • Implementiere das Programm in Python.

3.6.2. Ackermannfunktion

  1. Aufgabe

    Angenommen, dass eine Funktion namens ack so definiert ist, rechne ack 1 10, ack 2 4 und ack 3 3.

    ack :: Integer -> Integer -> Integer
    ack 0 n = n + 1
    ack m 0 = ack (m - 1) 1
    ack m n = ack (m - 1) (ack m (n - 1))
    

    Implementiere diese Funktion in Python.

3.6.3. Pascalschs Dreieck

  1. Aufgabe

    Das folgende Zahlenmuster wird Pascalsches Dreieck genannt.

            1
          1   1
        1   2   1
      1   3   3   1
    1   4   6   4   1
           ...
    

    Die Zahlen am Rand des Dreiecks sind alle 1, und jede Zahl im Inneren des Dreiecks ist die Summe der beiden Zahlen darüber.

    • Schreibe eine Prozedur in Haskell, die die Elemente des Pascalschen Dreiecks mittels eines rekursiven Prozesses berechnet.
    • Schreibe deinen Algorithmus in Python um.
  2. Lösung
    pascal :: Int -> Int -> Int
    pascal row col
      | col < 0 || col > row = 0
      | col == 0 || col == row = 1
      | otherwise = pascal (row - 1) (col - 1) + pascal (row - 1) col
    

3.6.4. Diffie-Hellman Schlüsselaustausch

  1. Aufgabe
    1. Teil 1: Haskell

      Schreibe eine Funktion diffieHellman, die die Parameter p, g, a und b entgegennimmt und K1 und K2 berechnet.

    2. Teil 2: Python

      Implementiere dasselbe Verfahren in Python.

    3. Beispielwerte
      • Primzahl: p = 23
      • Basis: g = 5
      • Alice privat: a = 6
      • Bob privat: b = 15

3.6.5. Haskell Sammlung an Lektüre

4. Buchempfehlung

5. Interessante Artikel

6. michmichs

Author: Omid Mashregh-Zamini

Created: 2026-03-16 Mo 08:13