Python & Algorithmen

Listen, Dictionaries, OOP, Sortierverfahren & Rekursion.

3.1 Listen & Dictionaries

Erstelle ein Dictionary mit 5 Wörtern und der Übersetzung Deutsch → Englisch und ein zweites Englisch → Italienisch. Erstelle eine Abfragemöglichkeit Deutsch → Italienisch.

3.2 Objektorientierung

Erstelle eine Klasse Fahrzeug mit Attributen: Marke, Baujahr. FĂŒge eine Methode info() hinzu, die die Daten ausgibt. Erstelle zwei Objekte und rufe die Methode auf.

3.3 Algorithmen

1. Bubblesort: Sortiere 10 Zahlen.
2. FakultÀt: Schreibe eine rekursive und eine iterative Funktion zur Berechnung der FakultÀt und vergleiche beide.

Dictionaries (DE → IT)

GEGEBENES SNIPPET
namen = ["Hans", "Sepp", "Greti"]
print(farben[0])

AutoHersteller = {"Golf": "VW", "Amarok": "VW", "Spring": "Dacia"}
print(AutoHersteller["Amarok"])
DEINE LÖSUNG
word = input("test")

DeutschEnglisch = {
    "Auto": "car",
    "Banane": "banana",
    "Sonne": "sun"
}

EnglischItalienisch = {
    "car": "macchina",
    "banana": "banana",
    "sun": "sole"
}
if word in DeutschEnglisch:
    print(EnglischItalienisch[DeutschEnglisch[word]])
else:
    print("Oida des Wort gibt ned!")

Klasse Fahrzeug

GEGEBENES SNIPPET
class Fahrzeug:
    def __init__(self, marke, Farbe):
        self.marke = marke
        self.Farbe = Farbe

    def printFarbe(self, wert):
        print("Ich bin in Farbe ", self.Farbe)
DEINE LÖSUNG
class Car:
    def __init__(self, x, y):
        self.Marke = x
        self.Baujahr = y

    def info(self):
        print(self.Marke, self.Baujahr)

car1 = Car("VW", 2000)
car2 = Car("Audi", 2010)

car1.info()
car2.info()

Bubblesort (Kein Snippet gegeben)

DEINE LÖSUNG
list = [9,43,19,430,34,5,92,10,8,123]

for f in range(len(list)):
    tausch = False
    for i in range(len(list)-1-f):
        if list[i] > list[i+1]:
            x = list[i]
            list[i] = list[i+1]
            list[i+1] = x
            tausch=True
    if not tausch:
        break

print(list)

⚡ Bubblesort Live-Visualisierung

Klicke "Sortieren", um den Bubblesort Schritt fĂŒr Schritt animiert zu sehen. "Neu mischen" generiert neue Zufallszahlen.

Bereit.

FakultÀt (Kein Snippet gegeben)

DEINE LÖSUNG
number = int(input("Gib eine Zahl ein: "))

def fakultaet(n):
    if n == 0:
        return 1
    else:
        return n * fakultaet(n-1)

print(fakultaet(number))

Datentypen (Python)

Listen ([]) sind verÀnderbar und geordnet. Dictionaries ({}) speichern Key-Value-Paare und greifen via Key (z.B. dict["key"]) auf Werte zu.

Prozedural vs. Objektorientiert

Prozedural: Funktionen und Anweisungen werden sequenziell abgearbeitet.
OOP: Daten (Attribute) und Logik (Methoden) werden in Klassen gekapselt, was die Wiederverwendbarkeit erhöht.

Rekursion vs Iteration

Rekursive Algorithmen rufen sich selbst auf. Sie sind oft eleganter, haben aber die Gefahr eines Stack Overflows (Fehlerquelle), wenn die Abbruchbedingung fehlt. Iteration (Schleifen) benötigt meist weniger Speicher.

JavaScript

DOM-Manipulation und Events (Klick, Onload, Timeouts).

4.1 Button-Interaktion

Erstelle eine HTML-Seite, auf der ein Button beim Anklicken seine Farbe Àndert.

4.2 Zeitgesteuerte Aktionen

Nach dem Laden der Seite soll sich nach 3 Sekunden die Hintergrundfarbe der gesamten Seite Àndern.

Button Farbe Àndern (Live Demo)

GEGEBENES SNIPPET
<a id="link1" href="#" onclick="meineFunktion(this)">Klick mich</a>

<script>
let l1 = document.getElementById("link1");
function meineFunktion(element) {
    element.style.height = 15;
}
</script>
DEINE LÖSUNG
<button id="btn">Klick</button>
<script>
document.getElementById("btn").addEventListener("click", function() {
    this.style.backgroundColor = "red";
});
</script>

Zeitgesteuert (3s Timeout)

GEGEBENES SNIPPET
<body onload="setTimeout(function(){ 
    alert('10 Sekunden vorbei!'); 
}, 10000)">
DEINE LÖSUNG
window.onload = function() {
    setTimeout(function() {
        document.body.style.backgroundColor = "blue";
    }, 3000); // 3000ms = 3s
};

DOM (Document Object Model)

Das DOM ist eine Programmierschnittstelle fĂŒr HTML. JS kann damit HTML-Elemente finden (getElementById), verĂ€ndern (.style.color) oder löschen.

Client vs. Server (JS vs. PHP)

JavaScript: LĂ€uft im Browser des Users (Client). Ist schnell, gut fĂŒr UI-Effekte, aber der Code ist fĂŒr jeden sichtbar (keine Passwörter!).
PHP: LĂ€uft am Server. Generiert das HTML, das an den Client geschickt wird. Ist sicher fĂŒr DB-Anbindungen.

PHP & Datenbanken

Formulare, SQLite, PDO/Prepared Statements und Login-Systeme.

5.1 Einfaches Formular

Formular, das einen Namen abfragt. Das PHP-Skript gibt „Hallo“ + Namen aus.

5.2 SQLite-Datenbank

Erstelle eine SQLite-DB mit Name, Wohnort. Seite 1: Formular eintragen. Seite 2: Ausgabe aller Daten, Filter nach Wohnort.

5.3 Login-System

Tabelle mit Benutzername und gehashtem Passwort. Bei korrekten Daten Weiterleitung, bei falschen Fehlermeldung.

Formulare & Login

GEGEBENES SNIPPET
<form action="check.php" method="post">
    <input type="text" name="t1">
    <button type="submit">Login</button>
</form>
if ($_POST["t1"] == "geheim") echo "richtig";    
header("Location: geheim.php");
DEINE LÖSUNG (Sicheres Login)
<?php
// $hash kommt aus der DB, eingegebenes PW aus Formular
if (password_verify($_POST['passwort'], $hash)) {
    session_start();
    $_SESSION['login'] = true;
    header("Location: dashboard.php");
    exit();
} else {
    echo "Falsches Passwort!";
}
?>

SQLite Eintragen & Filtern

GEGEBENES SNIPPET (MySQL)

Achtung: Snippet ist fĂŒr MySQL, Lösung nutzt SQLite (wie verlangt).

$conn = new mysqli("loc", "root", "p", "db");
$stmt = $conn->prepare("SELECT * FROM database WHERE ort = ?");
$stmt->bind_param("s", $ort);
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
    echo $row["name"];
}
DEINE LÖSUNG (SQLite)
<?php
$db = new SQLite3('daten.sqlite');

// 1. EinfĂŒgen (Seite 1)
$stmt = $db->prepare('INSERT INTO personen (name, wohnort) VALUES (:n, :o)');
$stmt->bindValue(':n', $_POST['name']);
$stmt->bindValue(':o', $_POST['wohnort']);
$stmt->execute();

// 2. Auslesen & Filtern (Seite 2)
$filter = $_GET['ort'];
$stmt = $db->prepare('SELECT * FROM personen WHERE wohnort = :o');
$stmt->bindValue(':o', $filter);
$res = $stmt->execute();

while ($row = $res->fetchArray()) {
    echo $row['name'];
}
?>

GET vs. POST

GET: Daten werden an die URL angehĂ€ngt (sichtbar). Nur fĂŒr harmlose Abfragen/Filter nutzen (z.B. Suche).
POST: Daten werden versteckt im HTTP-Body ĂŒbertragen. Zwingend fĂŒr Passwörter und Datenbank-Inserts.

Datenbank Normalisierung

1. NF: Atomare Werte (z.B. Vor- und Nachname trennen).
2. NF: Jedes Nicht-SchlĂŒsselfeld ist voll vom Primary Key abhĂ€ngig.
3. NF: Keine transitiven AbhÀngigkeiten (Keine Spalte darf aus einer anderen berechenbar sein).

SQL Injection (Gefahr!)

Wenn User-Eingaben direkt ins SQL geschrieben werden, können Hacker die DB löschen. Lösung: Immer Prepared Statements (prepare / bind_param) nutzen, wie im Matura Snippet vorgegeben!

Raspberry Pi & Server

Hardwareprogrammierung mit GPIO (Python) und Webserver Setup.

6.1 Lauflicht & GPIO

Schreibe ein Python-Programm, das ein Lauflicht ĂŒber 5 AusgĂ€nge erzeugt. Zwei EingĂ€nge sollen jeweils einen eigenen Ausgang schalten (z. B. Taster → LED).

7. Webserver

Installiere einen Webserver (Apache oder Nginx). Lege im Webroot eine PHP-Testdatei an, die „Hello World“ ausgibt.

Lauflicht 5 LEDs

GEGEBENES SNIPPET
from EmulatorGUI import GPIO
GPIO.setmode(GPIO.BCM)
# GPIO.BCM = logische GPIO-Nummern
# GPIO.BOARD = physikalische Pin-Nummern

GPIO.setup(17, GPIO.OUT)
GPIO.setup(17, GPIO.IN)
GPIO.output(17,1)
value = GPIO.input(18)
DEINE LÖSUNG
import time
from EmulatorGUI import GPIO
GPIO.setmode(GPIO.BCM)

leds = [17, 18, 27, 22, 23]
for led in leds: GPIO.setup(led, GPIO.OUT)

while True:
    for led in leds:
        GPIO.output(led, 1)
        time.sleep(0.2)
        GPIO.output(led, 0)

Taster schaltet LED:

GPIO.setup(5, GPIO.IN) # Taster
GPIO.setup(17, GPIO.OUT) # LED

while True:
    if GPIO.input(5) == 1:
        GPIO.output(17, 1)
    else:
        GPIO.output(17, 0)

Apache Webserver (Linux Shell)

DEINE LÖSUNG
# Installieren
sudo apt update
sudo apt install apache2 php

# In Webroot wechseln und Datei erstellen
cd /var/www/html
sudo nano test.php
# test.php: <?php echo "Hello World"; ?>

Netzwerk: OSI-Modell Schichten 1-4

1. BitĂŒbertragung (Kabel, Hubs)
2. Sicherung (MAC-Adresse, Switch)
3. Vermittlung (IP-Adresse, Router)
4. Transport (TCP/UDP, Ports)

HTTP vs HTTPS

HTTP (Port 80): UnverschlĂŒsselt. Jeder im Netzwerk kann mitlesen.
HTTPS (Port 443): VerschlĂŒsselt mittels SSL/TLS. Wichtig bei Login-Daten.

Linux: apt

apt (Advanced Packaging Tool) ist die Softwareverwaltung in Debian/Ubuntu (RaspiOS).
apt update (Paketliste aktualisieren), apt install X (Paket installieren).

Netzwerktechnik & Server

OSI-Modell, DNS, DHCP, E-Mail-Protokolle und Netzwerkbefehle.

Das OSI-Referenzmodell teilt die Netzwerkkommunikation in 7 Schichten auf. FĂŒr die Matura sind die Schichten 1 bis 4 (Transportschicht bis BitĂŒbertragungsschicht) am wichtigsten. Klicke auf eine Schicht, um Details zu sehen:

Schicht 4 Transportschicht TCP / UDP
Schicht 3 Vermittlungsschicht (Network) IP, Router
Schicht 2 Sicherungsschicht (Data Link) MAC, Switch
Schicht 1 BitĂŒbertragungsschicht (Physical) Kabel, Hub, Bits

Schicht 4: Transportschicht (Transport Layer)

Aufgabe: Stellt die Ende-zu-Ende-Verbindung zwischen den Anwendungen her. Zerlegt Daten in Pakete und setzt sie wieder zusammen.

Wichtigste Protokolle:

  • TCP (Transmission Control Protocol): Verbindungsorientiert, zuverlĂ€ssig (Datenverlust wird korrigiert), stellt Reihenfolge sicher. Genutzt fĂŒr Web (HTTP) und E-Mail.
  • UDP (User Datagram Protocol): Verbindungslos, unzuverlĂ€ssig aber extrem schnell. Genutzt fĂŒr Streaming, DNS und Gaming.

SchlĂŒsselbegriff: Ports (z. B. Port 80 fĂŒr HTTP, 443 fĂŒr HTTPS, 53 fĂŒr DNS).

DNS (Domain Name System) & Server-AblÀufe

Das DNS ĂŒbersetzt Domainnamen (z.B. google.com) in IP-Adressen (z.B. 142.250.74.46). Starte die interaktive Simulation, um zu sehen, wie der normale Ablauf und eine DNS-Manipulation (Spoofing) aussehen:

đŸ’»
Client (PC)
🌐
DNS Server
đŸ–„ïž
Webserver (Ziel)
đŸ„·
Hacker-DNS
Console bereit. Klicke auf einen der AblÀufe oben, um die Animation zu starten.

Netzwerk-Befehlszeile (Shell Simulator)

Diese Werkzeuge sind essenziell fĂŒr die Netzwerkanalyse auf Windows und Linux. Klicke auf einen Befehl, um ihn in der simulierten Konsole auszufĂŒhren:

admin@matura-diagnostics:~
Ready for diagnostics...

Netzwerk-Hardware & WAN

Hub vs. Switch vs. Router

Hub (Schicht 1): Ein passiver Verteiler. Daten werden an ALLE Ports gesendet (Broadcast). Verursacht hohe Netzwerklast und ist unsicher.

Switch (Schicht 2): Ein intelligenter Verteiler. Leitet Daten gezielt nur an den Port des ZielgerÀts weiter (anhand der MAC-Adresse).

Router (Schicht 3): Verbindet verschiedene Netzwerke (Heimnetzwerk mit Internet) und leitet Pakete anhand der IP-Adresse weiter.

DHCP (Dynamic Host Configuration Protocol)

Zweck: Automatische Zuweisung von Netzwerkkonfigurationen an GerÀte (IP, DNS, Gateway).

Ablauf (D.O.R.A.):

  1. Discover: Client sucht im Netz nach DHCP-Servern.
  2. Offer: Server bietet freie IP-Adresse an.
  3. Request: Client fordert diese IP an.
  4. Acknowledge: Server bestÀtigt und sendet Config.

E-Mail Protokolle (DNS-gestĂŒtzt)

SMTP (Simple Mail Transfer Protocol): Sendet E-Mails zum Server (Port 25 / 587).

POP3 (Post Office Protocol v3): LĂ€dt E-Mails vom Server herunter und löscht sie standardmĂ€ĂŸig dort (Port 110).

IMAP (Internet Message Access Protocol): Synchronisiert E-Mails, diese verbleiben auf dem Server (Port 143).

WAN (Wide Area Network) & IP

WAN Technologien: DSL (Kupferleitung), Glasfaser (FTTH - hohe Bandbreite, geringe Latenz), Mobilfunk (4G/5G).

IP-Adressen (v4 vs. v6): IPv4 nutzt 32-Bit (4 Milliarden Adressen), IPv6 nutzt 128-Bit (Hexadezimal, schier unendlich).

Public vs. Private IP: Private IPs (z.B. 192.168.x.x) gelten nur im lokalen LAN. Public IPs werden im weltweiten Internet geroutet.

Datenbanken

Normalformen, ER-Modell, SQL und Datenbanken in der Gesellschaft.

Normalformen verhindern Redundanz und Anomalien in Datenbanken. Klicke durch die Schritte, um die Normalisierung live zu sehen:

❌ Unnormalisierte Tabelle

Mehrere Werte in einer Zelle, Wiederholungsgruppen. Das fĂŒhrt zu Redundanz und macht Updates fehleranfĂ€llig.

ER-Modell Grundbegriffe

EntitÀt

Ein reales Objekt (z.B. SchĂŒler, Auto). Wird zur Tabelle in der DB.

Attribut

Eigenschaft einer EntitÀt (z.B. Name, Alter). Wird zur Spalte in der Tabelle.

Beziehung

VerknĂŒpfung zwischen EntitĂ€ten (z.B. SchĂŒler besucht Kurs). Über FremdschlĂŒssel realisiert.

🔑 PK

Primary Key: Eindeutiger Identifikator jeder Zeile. Darf nie NULL sein.

SQL Befehle Übersicht

Die wichtigsten SQL-Befehle fĂŒr die Matura auf einen Blick:

SELECT (Lesen)

SELECT name, wohnort
FROM personen
WHERE wohnort = 'Wien'
ORDER BY name ASC;

Liest Daten aus. WHERE filtert, ORDER BY sortiert.

INSERT (EinfĂŒgen)

INSERT INTO personen
  (name, wohnort)
VALUES
  ('Max', 'Wien');

FĂŒgt einen neuen Datensatz in die Tabelle ein.

UPDATE (Ändern)

UPDATE personen
SET wohnort = 'Graz'
WHERE name = 'Max';

Ändert bestehende Daten. Immer WHERE angeben, sonst werden ALLE Zeilen geĂ€ndert!

DELETE (Löschen)

DELETE FROM personen
WHERE name = 'Max';

Löscht DatensĂ€tze. Vorsicht ohne WHERE – löscht alles!

CREATE TABLE

CREATE TABLE personen (
  id INTEGER PRIMARY KEY,
  name TEXT NOT NULL,
  wohnort TEXT
);

Erstellt eine neue Tabelle mit definierten Spalten und Datentypen.

JOIN (VerknĂŒpfen)

SELECT s.name, k.titel
FROM schueler s
JOIN kurse k
  ON s.kurs_id = k.id;

Verbindet zwei Tabellen ĂŒber einen gemeinsamen SchlĂŒssel (FremdschlĂŒssel).

Referentielle IntegritÀt & Löschweitergabe

Referentielle IntegritĂ€t stellt sicher, dass FremdschlĂŒssel immer auf existierende DatensĂ€tze zeigen. Löschweitergabe (CASCADE): Wird ein Datensatz in der Elterntabelle gelöscht, werden automatisch alle verknĂŒpften DatensĂ€tze in der Kindtabelle mitgelöscht.

SQLite vs. MySQL vs. Access

SQLite: Serverlose Datei-DB, perfekt fĂŒr kleine Apps und Raspberry Pi. Kein separater Server nötig.
MySQL: Server-basiert, fĂŒr große Webanwendungen (z.B. WordPress).
Access: Microsoft-Produkt mit GUI, fĂŒr kleinere BĂŒroanwendungen.

Datenbanken in der Gesellschaft

Vorteile: Schneller Zugriff, zentrale Datenhaltung, Konsistenz, MehrbenutzerfÀhigkeit.
Nachteile/Risiken: Datenschutz (DSGVO!), Missbrauch durch Überwachung, Datensammlung durch Big-Tech, Single Point of Failure bei zentralen Systemen.

Prepared Statements (Sicherheit!)

Benutzereingaben dĂŒrfen nie direkt in SQL-Strings eingebaut werden → SQL Injection! Lösung: prepare() und bindValue() trennen Befehl und Daten. Das steht auch so in den Matura-Snippets!

Zahlensysteme

Dezimal, BinĂ€r, Oktal, Hexadezimal – Umrechnung und Bedeutung.

Interaktiver Zahlensystem-Konverter

Gib eine Zahl in ein beliebiges Feld ein – die anderen Systeme werden sofort berechnet:

Unser Alltags-System (0-9)

Nur 0 und 1 – die Sprache der Hardware

Ziffern 0-7 – genutzt fĂŒr Linux-Rechte (chmod)

0-9 + A-F – genutzt fĂŒr Farben, MAC-Adressen

8-Bit Visualisierer

Klicke auf die Bits, um sie zu toggeln. Die Dezimalzahl wird live berechnet (1 Byte = 8 Bit = Werte 0-255):

128
0
64
0
32
0
16
0
8
0
4
0
2
0
1
0
Dezimal0
BinÀr00000000
Hex00
Oktal000

Warum 8 Bit?

Ein Byte besteht aus 8 Bit und kann 2⁞ = 256 verschiedene Werte darstellen (0–255). Das reicht fĂŒr ein einzelnes ASCII-Zeichen, einen Farbkanal (R, G oder B), oder eine kleine Ganzzahl. IPv4-Adressen bestehen aus 4 Bytes (32 Bit).

Warum BinÀr? (Verbindung Hardware)

Computer arbeiten mit Transistoren, die nur zwei ZustÀnde kennen: AN (1) oder AUS (0). Darum ist das Dualsystem (Basis 2) die Grundlage aller digitalen Technik. Alles (Text, Bilder, Programme) wird intern als Folge von Nullen und Einsen dargestellt.

Hexadezimal & Oktal als AbkĂŒrzungen

Hex (Basis 16) und Oktal (Basis 8) sind beides Vielfache von 2. Jede Hex-Ziffer entspricht exakt 4 Bit, jede Oktal-Ziffer entspricht exakt 3 Bit. Das macht sie zu kompakten Schreibweisen fĂŒr lange BinĂ€rzahlen.

Hex-Anwendungen: Farbcodes (#FF00FF), MAC-Adressen (00:1A:2B:3C:4D:5E), Speicheradressen.

Oktal-Anwendung: Linux-Dateiberechtigungen (chmod 755 = rwxr-xr-x).

Umrechnungstricks fĂŒr die Matura

Dezimal → BinĂ€r: Zahl fortlaufend durch 2 teilen, Reste von unten nach oben ablesen.
BinĂ€r → Hex: BinĂ€rzahl in 4er-Gruppen (von rechts) aufteilen, jede Gruppe in eine Hex-Ziffer umwandeln. z.B. 1111 1111 → F F → FF.
BinĂ€r → Oktal: Gleich, aber in 3er-Gruppen. z.B. 011 111 111 → 3 7 7 → 377.

IPv4 und Subnetzmasken

Eine IPv4-Adresse wie 192.168.0.1 besteht aus 4 Dezimalzahlen (je 1 Byte). In BinÀr: 11000000.10101000.00000000.00000001. Die Subnetzmaske (z.B. 255.255.255.0) bestimmt, welcher Teil Netzwerk-ID und welcher Teil Host-ID ist.