Einführung: Transitionssysteme, Wörter, Sprachen; Mathematische Grundbegriffe und elementare Beweismethoden; Endliche Automaten und reguläre Sprachen; Determinismus und Nichtdeterminismus, Abschlusseigenschaften und Automatenkonstruktionen;
Sätze von Kleene, Myhill-Nerode, Pumping Lemma;
Grammatiken und Chomsky-Hierarchie,
kontextfreie Sprachen, Abschlusseigenschaften, Pumping Lemma, CYK Algorithmus;
Berechnungsmodelle: Kellerautomaten, Turingmaschinen; Entscheidbarkeit und Aufzählbarkeit in der Chomsky-Hierarchie

Lehrinhalte:
Anwendung des im Rahmen der grundlegenden Veranstaltungen erworbenen Wissens im Kontext eines komplexen Softwareentwicklungsprojektes. Die einzelnen Aufgabenstellungen werden dabei von Fachgebieten der TU Darmstadt gestellt und leisten im Regelfall einen Beitrag zu deren Forschung. 
Schwerpunkte des Praktikums sind: 
- Planung und Durchführung eines Softwareentwicklungsprojektes 
- Anwendung von Softwareentwicklungsprozessen 
- Ermittlung und Priorisierung von Anforderungen 
- Durchführung systematischer Qualitätssicherung 
- Präsentationstechnik 
- Teamarbeit 

Literatur:
Allgemein: 
- Lehrbuch der Softwaretechnik: Softwaremanagement; H. Balzert; Springer 
- Design Patterns - Elements of Reusable Object-Oriented Software; E. Gamma, R. Helm, R. Johnson, J. Vlissides; Prentice Hall 
- Software Qualität - Testen, Analysieren und Verifizieren von Software; P. Liggesmeyer; Springer 
- Writing Effective Use Cases; A. Cockburn; Pearson 
- Clean Code: A Handbook of Agile Software Craftsmanship; R. C. Martin; Prentice Hall 
Weiterhin ist je nach bearbeiteter Aufgabenstellung weitere Literatur notwendig. 

Voraussetzungen:
Empfohlen: Erfolgreicher Abschluss der Veranstaltungen: 
- Funktionale und Objektorientierte Programmierkonzepte 
- Software Engineering 


Lehrinhalte:

- Digitaltechnik: digitale Abstraktion und ihre technische Umsetzung, Zahlensysteme, Logikgatter, MOSFET Transistoren und CMOS Gatter, Leistungsaufnahme
- Kombinatorische Schaltungen: Boole’sche Gleichungen und Algebra, Abbildung auf Gatter, mehrstufige Schaltungen, vierwertige Logik (0,1,X,Z), Minimierung von
  Ausdrücken, kombinatorische Grundelemente, Zeitverhalten
- Sequentielle Schaltungen: Latches, Flip-Flops, Entwurf synchroner Schaltungen, endliche Automaten, Zeitverhalten, Parallelität
- Hardware-Beschreibungssprachen: Modellierung kombinatorischer und sequentieller Schaltungen, Strukturbeschreibungen, Modellierung endlicher Automaten,
  Datentypen, parametrisierte Module, Testrahmen
- Grundelemente digitaler Schaltungen: arithmetische Schaltungen, Fest-/Gleitkommadarstellung, sequentielle Grundelemente, Speicherfelder, Logikfelder

Die Veranstaltung Funktionale und objektorientierte Programmierkonzepte (FOP) ist eine Pflichtveranstaltung im ersten Semester für Studierende der Informatik und mehrerer verwandter Studiengänge. In der Veranstaltung wird der Grundstein für systematische Programmierung gelegt, auf dem die folgenden Informatik-Veranstaltungen aufbauen. Dazu werden zwei verschiedene Programmiersprachen genutzt: die How to Design Programs Teaching Languages (HtDP-TL) und Java. 

Dieser Kurs ist nur für die Tutor_innen und Veranstalter_innen der Lehrveranstaltung "Funktionale und objektorientierte Programmierkonzepte" im Wintersemester 2016/17 gedacht. Es ist keine Selbsteinschreibung möglich; die Teilnehmer_innen werden manuell eingetragen.

Dieser Kurs ist ausschließlich für Veranstalter und Tutor_innen der "Digitaltechnik" im WS 2016/17 verfügbar. Eine eigene Einschreibung ist nicht möglich.