Grundlagen der Syntax und Semantik von Programmiersprachen
Definition:
Grundlagen der Syntax und Semantik beziehen sich auf die Struktur und Bedeutung von Programmiersprachen.
Details:
- Syntax: Formale Regeln zur Strukturierung von Programmcode, z.B. Grammatikregeln.
- Semantik: Bedeutung und Verhalten der syntaktisch korrekten Programme.
- Kontextfreie Grammatiken: Werden verwendet, um Syntax zu definieren.
- \text{Syntaxbaum}: Baumstruktur, die die syntaktische Struktur eines Satzes darstellt.
- Typüberprüfung: Methode zur Sicherstellung der semantischen Korrektheit.
- \text{Operational Semantics}: Beschreibt, wie ein Programm auf einer abstrakten Maschine ausgeführt wird.
- \text{Denotational Semantics}: Zuordnung von Programmen zu mathematischen Objekten, die deren Bedeutung repräsentieren.
- \text{Axiomatic Semantics}: Nutzung logischer Formeln, um das Verhalten von Programmen zu spezifizieren.
Verwendung grundlegender Datentypen und -strukturen
Definition:
Nutzung und Implementierung von grundlegenden Datentypen (wie int, float, char) und Datenstrukturen (wie Arrays, Listen, Bäume) in der Programmierung.
Details:
- Datentypen:
- int: Ganzzahlige Werte
- float: Gleitkommazahlen
- char: Einzelne Zeichen
- Datenstrukturen:
- Array: Homogene, statische Datenstruktur
- Liste: Dynamische Datenstruktur, kann unterschiedlichste Typen aufnehmen
- Baum: Hierarchische Datenstruktur
- Beispiele in C++:
int x = 5;
float y = 5.5;
char z = 'A';
int array[5] = {1, 2, 3, 4, 5};
Schleifen, Bedingungen und Kontrollstrukturen implementieren
Definition:
Schleifen, Bedingungen und Kontrollstrukturen steuern den Programmfluss.
Details:
- Schleifen: Wiederhole eine Sequenz von Anweisungen, solange eine Bedingung erfüllt ist (z.B. for-, while-Schleifen).
- Bedingungen: Ausführung von Code basierend auf booleschen Ausdrücken (z.B. if, else, elif).
- Kontrollstrukturen: Strukturelemente, die den Ablauf eines Programmes bestimmen (z.B. break, continue, return).
- While-Schleife: \texttt{while (Bedingung):\ Anweisungen}
- For-Schleife: \texttt{for Variable in Sequenz: \ Anweisungen}
- If-Bedingung: \texttt{if (Bedingung): \ Anweisungen}
- Break und Continue: \texttt{break} beendet eine Schleife; \texttt{continue} überspringt den restlichen Schleifenblock und startet die nächste Schleifeniteration.
Prozedurale und objektorientierte Programmierung
Definition:
Prozedurale Programmierung strukturiert Programme in Prozeduren oder Funktionen; objektorientierte Programmierung verwendet Objekte, die Daten und Funktionen kapseln.
Details:
- Prozedural: Fokus auf Funktionen und Algorithmen
- Verwendung von Kontrollstrukturen wie Schleifen und Bedingungsanweisungen
- Typische Sprachen: C, Pascal
- Objektorientiert: Fokus auf Objekte und deren Interaktion
- Grundkonzepte: Klassen, Objekte, Vererbung, Polymorphie
- Typische Sprachen: Java, C++
Rekursives Programmieren und dessen Anwendungen
Definition:
Rekursives Programmieren: Methode, bei der eine Funktion sich selbst aufruft, um ein Problem in kleinere Teilprobleme zu zerlegen.
Details:
- Basisfall: Bedingung, bei der die Rekursion endet.
- Rekursiver Fall: Definition der Funktion in Bezug auf sich selbst.
- Effektiv für Probleme mit natürlicher Teilung in ähnliche Teilprobleme (z.B. Fibonacci, Fakultät).
- Kann zu hoher Speichernutzung führen; auf Stack Overflow achten.
- Anwendungen: Suchen und Sortieren (z.B. Quicksort), Traversieren von Datenstrukturen (z.B. Bäume, Graphen).
Komplexitätsanalyse von Datenstrukturen
Definition:
Analyse der Laufzeit- und Speicherkomplexität von Operationen auf Datenstrukturen.
Details:
- Wichtige Landau-Notationen: \(O(f(n))\), \(\Omega(f(n))\), \(\Theta(f(n))\)
- Zeitkomplexität: misst die Anzahl der grundlegenden Operationen
- Speicherkomplexität: misst den benötigten Speicher
- Amortisierte Analyse: Durchschnittliche Komplexität über eine Sequenz von Operationen
- Wichtige Datenstrukturen: Arrays, verkettete Listen, Stacks, Queues, Bäume
- Arrays: Zugriff O(1), Suche O(n), Einfügen O(n), Löschen O(n)
- Verkettete Listen: Zugriff O(n), Suche O(n), Einfügen O(1), Löschen O(1)
- Stapel (Stacks) und Schlangen (Queues): Zugriff O(n), Suche O(n), Einfügen O(1), Löschen O(1)
- Bäume (z.B. Binärbäume): Zugriff O(log n), Suche O(log n), Einfügen O(log n), Löschen O(log n)
Sortier- und Suchalgorithmen
Definition:
Verfahren, um Daten zu ordnen oder ein spezifisches Element in einer Datenstruktur zu finden.
Details:
- Wichtige Sortieralgorithmen: Bubble Sort, Merge Sort, Quick Sort
- Wichtige Suchalgorithmen: Lineare Suche, Binäre Suche
- Komplexität oft in Big-O-Notation ausgedrückt
- Bedeutung für Effizienz von Programmen
Versionskontrollsysteme wie Git
Definition:
Versionskontrollsystem zur Verwaltung und Nachverfolgung von Änderungen im Quellcode.
Details:
- Git: Verteiltes Versionskontrollsystem
- Repository (Repo): Speichert Projektdateien und den Verlauf ihrer Änderungen
- Commit: Speichert Snapshot der Änderungen
- Branch: Parallelisierung von Entwicklungssträngen
- Merge: Zusammenführen von Änderungen aus verschiedenen Branches
- Clone, Push, Pull: Operationen zur Verwaltung von Repos
- Undo: Änderungen rückgängig machen
- Merge-Konflikte: Manuelle Auflösung bei widersprüchlichen Änderungen