Kerninformatik Angewandte Informatik
Theoretische Informatik Praktische Informatik Technische Informatik  

 

Software Engineering -    

Kern-, Unterstützungsprozesse

-    

Komplexität von Software Projekten

-    

Vergleich von Vorgehensmodellen zur Softwareentwicklung

-    

Qualitätsmanagement

Theoretische Informatik

 

-   

Entwicklung

-   

Turing Awards

Kombinatorik -    

Schrankenfunktionen

Formale Sprachen -    

Chomsky-Hierarchie

-    

Aussagenlogik

Mathematische Grundlagen -    

Disziplinen und Anwendungen

Informationstheorie -    

Elemente

Heuristik -    

Basisheuristiken

Algorithmik -    

Algorithmenarten - Programmierfunktionen

Praktische Informatik

 

-    

Programmierkonzepte

-    

Sprachelemente & Fehlerarten

-    

Kompilierprozesse

-    

Maschinensprache/Assembler

-    

Evolution

-    

Programmierparadigmen

-    

Typisierung

-    

Vergleich

Lexik -    

Standardbibliotheken, Namespaces

Syntax & Semnatik -    

Einrückungsstil

-    

Programmstrukturen

-    

Kontrollstrukturen

-    

Operatoren

Datentypen & -strukturen -    

Variablen

-    

Datentypen

-    

Arrays

-    

Zeiger, Referenzen, Zeiger Arithmetik

-    

Dynamische Datenstrukturen

-    

Benutzerdefinierte Datentypen

-    

Typenumwandlungen

Anwendungen -    

Stringbehandlung

-    

File IO

-    

Sortierverfahren

-    

Suchverfahren

-    

Verschlüsselungsverfahren

Funktionen -    

Funktionsaufrufe by ref - by val

-    

verschiedene by ref Arten

-    

Vor- & Nachteile call by ref, call by value

-    

Rekursive Funktionen

-    

Überladen von Funktionen

Objektorientierte Programmierung -    

Konzepte der OOP

-    

Standard Methoden

-    

Beispiel Klasse Vektor

-    

Design Patterns

-    

Templates

Datenbanken -    

Datenbankmodelle

-    

Datenbanken, DBM-Systeme

-    

Begriffe verschiedener Datenbankmodelle

-    

ER-Modelle

-    

Kardinalitäten, Optionalität

-    

Tabellentransformation

-    

Normalformen

-    

Database IO

SQL -    

Relationale Algebra

-    

Data Definition, Data Manipulation

Technische Informatik

 

Hardwareaufbau -    

Computer generations

-   

CPU clock-speeds

-   

Mikroarchitektur

-   

von Neumann Architektur

-   

Digitaltechnik

  -   

Zahlendarstellungen

-    

Motherboard Komponenten

-   

Peripherie

-   

Speicherbausteine

-   

Festplattensubsysteme

-    

Informationseinheiten

  -   

Zahlengrößenordnungen

Elektrotechnik  -   

Elektrotechnische Einheiten

  -   

Elektromagnetisches Wellenspektrum

-   

Modulationsverfahren

Netzwerktechnik  -   

Geschichte der Netzentwicklung

-   

Verteilte Systeme

-   

Server-Arten und -Dienste

-   

Übertragungsverfahren

-   

Breitbandanforderungen und Übertragungsraten

-   

WAN-(Breitband)techniken

-   

Datennetze

-   

Struktur des Internets

-   

Root Nameserver

-   

Netzwerk Topologien

-   

Strukturierte Verkabelung & Netzwerkkomponenten

-   

Routing

-   

ISO-OSI/ TCP-IP Refernzmodell

  -   

Ports und Dienste

  -   

Linux-, Dos-Shell Befehle

-   

IT-Sicherheit

-   

Top Level Domains

Betriebssysteme -   

Aufgabenblöcke

-   

OS Architekturmodelle

Unix -   

Unix kernels

-   

Linux Distributions

-   

Linux Verzeichnisbaum

-   

Dateiberechtigungen

-   

Linux Shell Befehle

Windows -   

Version history

-   

File Types

-   

Programmierschnittstellen

-   

Utilities

Angewandte Informatik

 

Mensch-Computer Interaktion  -   

five decades of computing

-   

Interaction Style Categories

-   

The Evolution of Graphical User Interfaces

-   

Softwaresysteme

-   

Informationssysteme

-    

HCI Disziplinen

-    

Vergleich Mensch-Maschine

-    

Steuerelemente

IDEs -    

Visual Studio

-    

Eclipse

Künstliche Intelligenz -   

Disziplinen

Computergrafik -   

Arten

-   

Farbräume

-   

Farbpsychologie

-   

Begriffe

-   

Methoden

-   

Computerbildschirm Auflösungen

Webdesign -   

Innovationsstufen

-    

Web-Technologien

-    

Sprachen

-   

Gestaltungsaspekte

Wirtschafts- und Geschäftsprozesse  

 

Volkswirtschaft  -    

Wirtschaftssektoren

-    

Modell der wirtschaftlichen Entwicklung

-    

G20 major economies

-    

Wirtschaftsordnungen

-    

der erweiterte Wirtschaftskreislauf

  -    

Nationale und Internationale Regulierungsbehörden

Betriebswirtschaft  -    

Rechnungswesen

  -    

Gesellschaftsformen

-    

Grundformen der Leitungssyteme

-    

Führungsstile

-    

Nutzwertanalyse

-    

Task-Management

-    

Marketing Mix

-    

Soziale Milieus

Quellen

 

 

 


Software Engineering 1

 

Kernprozesse

Unterstützungsprozesse

1. Planung

6. Anforderungsmanagement

 Lastenheft

 

Pflichtenheft

7. Projektmanagement

Aufwandsschätzung

Risikomanagement

Vorgehensmodell

Projektplanung

 

Projektverfolgung und -steuerung

2. Analyse

Management von Lieferantenvereinbarungen

Anforderungsanalyse

 

Auswertung

8. Qualitätsmanagement

Prozessanalyse / Prozessmodell

Capability Maturity Model

Systemanalyse

Spice (Norm)

Strukturierte Analyse

Incident Management

Objektorientierte Analyse

Problem Management

 

Softwaremetrik

3. Entwurf

statische Analyse

Softwarearchitektur

Softwareergonomie

Strukturiertes Design

 

Objektorientiertes Design

9. Konfigurationsmanagement

Unified Modeling Language

Versionsverwaltung

Fundamental Modeling Concepts

Änderungsmanagement / Veränderungsmanagement

 

Release Management

4. Programmierung

Application Management (ITIL)

Normierte Programmierung

 

Strukturierte Programmierung

10. Dokumentation

Objektorientierte Programmierung

Software-Dokumentationswerkzeug

Funktionale Programmierung

Systemdokumentation

 

Betriebsdokumentation

5. Validierung und Verifikation

Bedienungsanleitung

Modultests (Low-Level-Test)

Geschäftsprozesse

Integrationstests (Low-Level-Test)

Verfahrensdokumentation

Systemtests (High-Level-Test)

 

Akzeptanztests (High-Level-Test)

 

 

 

 

 

Komplexität von Software Projekten

 

Projektklasse Quelltext-Zeilen (LOC) Bearbeiterjahre (BJ)
sehr klein 1- 1000 0 - 0,2
klein 1000 - 10.000 0,2 - 2
mittel 10.000 - 100.000 2 - 20
groß 100.000 - 1 Mio 20 - 200
sehr groß 1 Mio - ... 200 - ...

 

 

Time versus number of workers 2

 

m

o

n

t

h

s

m

o

n

t

h

s

  men   men
 

perfectly partitionable tasks

(e.g. picking cotton)

  task with complex interrelationships

& high communications overhead

 

 

 

 

Dimensions of software complexity 3

 

 

 

Higher technical complexity

- embedded, real-time, distributed, fault tolerant

- custom, unprecedented, architecture reengineering

- high performance

 

Lower

management

complexity

- small scale

- informal

- single stakeholder

- "products"

Higher

management

complexity

- large scale

- contractural

- many stakeholders

- "projects"

 

 

Lower technical complexity

- mostly 4GL, or component-based

- application reengineering

- interactive performance

 

 

 

 

 

Comparison of Software Development Methodologies

 

    Eigenschaften   Vorteile   Nachteile

sequentielle Vorgehensweisen

Phasen müssen vollständig + übersichtlich, da klar strukturiert - Änderungen der Anforderungen sind die
  durchlaufen werden. + klare zeitliche Abfolge   Realität
neue Phase wird erst + geringer Leitungsaufwand - Schwerpunkt auf Dokumenten, nicht
  begonnen, wenn vorige Phase + leicht kontrollierbar   auf Produkt
  abgeschlossen ist     - für Software-Projekte ungeeignet!
           

Wasserfall

           
Wasserfallmodell + + Einbeziehung der - Schwächen der strikten Phaseneinteilung
  Qualitätssicherung   Qualitätssicherung - Software-Bürokratie
           
           
           
           

V-Modell

 
 

inkrementelle Vorgehensweisen

Pflegeaktivitäten als neue + frühzeitiger Einsatz des - wenn die Nullversion nicht weit genug verändert
  Version   einschränkten Produkts erlaubt   werden kann, so das die Folgeversionen den
      Rückkopplung mit den   gewünschten Anforderungen nicht gerecht
      Arbeitsabläufen   wird, muss von Vorne begonnen werden.
    + Richtung der Entwicklung kann - eine Dokumentation ist schwierig, da schon
      Schritt für Schritt korrigiert   abgeschlossene Produkte in neuen Versionen
      und neu definiert werden.   verändert werden. Somit muss zu jeder Version
          eine eigene Dokumentation geschrieben
          werden.

Evolutionäres Modell

 
Metamodell + flexibles Modell, Anpassung - sehr hoher Steuerungsaufwand
Ziel: Risikominimierung   nach jedem Zyklus möglich - schlechte für kleine und mittlere Projekte
          geeignet
           
           
           
           

Spiralmodell

 
 

extreme Vorgehensweisen

 

agile Methode + stellt die Programmierung in den - ungeeignet für Festpreisprojekte
      Mittelpunkt - unvollständiges Modell
    + unterstützt die Paarprogrammierung    
           
           

Extreme Programming

 

 

 

 

 

Qualität von Software im Netzdiagramm

 

Qualität +   + Umfang
   
Kosten -   - Zeit

 

 

Qualitätseigenschaften von Software

 

1. Zuverlässigkeit    Flexibilität
    Korrektheit    Verständlichkeit
    Robustheit 3. Portabilität
   Ausfallsicherheit 4. Benutzerfreundlichkeit
2. Wartbarkeit 5. Effizienz
    Validierbarkeit  

 

 

 

 


 Theoretische Informatik

 

Entwicklung

 

1997 Unified Modelling Langauge UML Specification v. 1.0 Booch, Jacobson, Rumbaugh
1995 Objektorientierte Programmierung Design Patterns: Elements of Reusable Object-Oriented Software Gang of Four
1990 Algorithmen Introduction to Algorithms Corman, Leiserson, Rivest
1973 Nassi-Shneiderman Diagramme Flowchart techniques for structured programming Nassi, Shneiderman
1971 NP-Vollständigkeit The Complexity of Theorem Proving Procedures Cook
1968 Algorithmen The Art of Computer Programming Knuth
1968 Formale Sprachen Regular Expression Search Algorithm Thompson
1968 Strukturierte Programmierung Goto Statements Considered Harmful Dijkstra
1968 Software Engineering Software Krise, Nato Konferenz Bauer
1965 Komplexitätstheorie On the Computational Complexity of Algorithms Hartmanis & Stearns
1956 Automatentheorie Representation of Events in Nerve Sets and Finite Automata Kleene
1956 Formale Sprachen Three Models for the Description of Language Chomsky
1952 Hick's law On the rate of gain of information Hick
1948 Informationstheorie A Mathematical Theory of Communication Shannon
1941 Lambda- Kalkül The Calculi of Lambda-Conversion Church
1937 Berechenbarkeitstheorie On Computable Numnbers with an Application to the Entscheidungsproblem Turing
1936 Berechenbarkeitstheorie An Unsolvable Problem of Elementary Number Theory Church
1931 Berechenbarkeitstheorie Über formal unentscheidbare Sätze der Principia Mathematica und verwandter Systeme I Gödel
1914 Informationstheorie Probleme über Veränderungen von Zeichenreihen nach gegebenen Regeln Thue
1900 Berechenbarkeitstheorie Hilbert'sches Programm Hilbert
1893 Formale Logik Grundgesetze der Arithmetik Frege
1854 Boolsche Algebra An Investigation of the Laws of Thoughts Boole
1842 Algorithmen Notes on the Analytical Engine Lovelace
1670 Dualsystem Explication de l'Arithmétique Binaire Leibniz
1820 Algorithmen Liber Algorithmus Al-Chwarismi

 

 

 

 

Turing Awards

 

2008

Barbara Liskov

praktische und theoretische Grundlagen der Programmierung

2007

Edmund M. Clarke, E. Allen Emerson and Joseph Sifakis

Modellprüfung

2006

Frances E. Allen

Parallele Programmierung

2005

Peter Naur

Design von Programmiersprachen (Algol 60), Compilerdesign

2004

Vinton G. Cerf and Robert E. Kahn

Vernetzung, TCP/IP

2003

Alan Kay

Objektorientierte Programmierung, Smalltalk

2002

Ronald L. Rivest, Adi Shamir and Leonard M. Adleman

Public Key Kryptographie, RSA-Algorithmus

2001

Ole-Johan Dahl and Kristen Nygaard

Simula, OOP

2000

Andrew Chi-Chih Yao

Zufallszahlen, Kryptographie

1999

Frederick P. Brooks, Jr.

Rechnerarchitektur, IBM 360

1998

Jim Gray

Datenbanktechniken

1997

Douglas Engelbart

Maus, Fenster

1996

Amir Pnueli

Temporallogik, Programmverifikation

1995

Manuel Blum

Komplexitätstheorie, Kryptographie

1994

Edward Feigenbaum and Raj Reddy

Künstliche Intelligenz, prakt. Umsetzung

1993

Juris Hartmanis and Richard E. Stearns

Komplexitätstheorie

1992

Butler W. Lampson

PC-Entwicklung (Microsoft)

1991

Robin Milner

Logik, funktionale Programmierung: ML

1990

Fernando J. Corbató

Time sharing

1989

William (Velvel) Kahan

Numerik, Floating Point Arithmetik

1988

Ivan Sutherland

Computergraphik

1987

John Cocke

Compilerbau, RISC-Computer

1986

John Hopcroft and Robert Tarjan

Algorithmen und Datenstrukturen (Lehrbuch)

1985

Richard M. Karp

NP-Vollständigkeit

1984

Niklaus Wirth

MODULA, PASCAL, Oberon

1983

Ken Thompson and Dennis M. Ritchie

Betriebssystem UNIX

1982

Stephen A. Cook

Komplexität, NP-Vollständigkeit

1981

Edgar F. Codd

Relationale Datenbanken

1980

C. Antony R. Hoare

Programmiersprachen

1979

Kenneth E. Iverson

Programmiersprachen, APL

1978

Robert W. Floyd

formale methoden zur Software-Entwicklung

1977

John Backus

FORTRAN, Backus-Naur-Form Grammatik

1976

Michael O. Rabin and Dana S. Scott

Automaten,

1975

Allen Newell and Herbert A. Simon

Künstliche Intelligenz, general Problem Solver

1974

Donald E. Knuth

Algorithmen, "The Art of Computer Programming"

1973

Charles W. Bachman

Datenbanken

1972

Edsger W. Dijkstra

Graphenalgorithmen, ALGOL

1971

John McCarthy

Künstliche Intelligenz, LISP

1970

James H. Wilkinson

Numerik

1969

Marvin Minsky

Perzeptron, Neuronale Netze

1968

Richard Hamming

Kodierung, Hamming-Distanz

1967

Maurice V. Wilkes

EDSA, erster Computer mit internem Programmspeicher

1966

Alan J. Perlis

Compilerbau

 

 

 

 


 Kombinatorik

 

Schrankenfunktionen

 

konstant

1 µs

using a constant-size lookup table or hash table

inverse

Ackermannfunktion

 

Chazelles Algorithmus für minimale Spannbäume

wiederholt logaritmisch

 

the find algorithm of Hopcroft and Ullman on a disjoint set

doppelt logaritmisch

1,45 ms

amortized time per operation using a bounded priority queue

logarithmisch

13,97 ms

Binäre Suche in einem sortierten Feld

polylogarithmisch

für

19,5 ms

AKS-Primzahltest

radix

50 ms  

fraktionell

0,11 sec

Searching in a kd-tree

linear

0,25 sec

Suche in einem unsortierten Feld

n-log-n

0,251 sec

Mergesort, Heapsort

quadratisch

6,25 sec

Bubblesort

kubisch

2,6 sec

Gaußscher Algorithmus

polynomial

für

1,08 min

Innere-Punkte-Verfahren

exponentiell

für d > 1

357.020 yrs

Simplex-Verfahren

faktoriell

4.918.572.438.905.056 yrs

Brute-Force-Methode

unentscheidbar

 

Fleißiger-Biber-Funktion

 

 

 

 


 Formale Sprachen 4

 

 

 

 

 

Chomsky-Hierarchie

 

Menge aller Grammatiken/ Sprachen

 

Grammatik

 

Produktion

 

Produktionstyp

 

Metasprache

 

Beispiel

 

Automaten

 

Entscheid-

barkeit

Abge-

schlossenheit

 

Typ 0

 

 

rekursiv aufzählbar

 

 

pattern matching

Sprachen

 

KSV*

 

Typ 1

 

 

kontextsensitiv

 

Van Wijngaarden

simple

Programmiersprachen

 

CKSV*

 

Typ 2

 

 

kontextfrei

 

Backus-Naur Form

die meisten

Programmiersprachen

 

KV*

 

Typ 3

 

  und

 

regulär

 

Reguläre Ausdrücke

 

natürliche Sprachen

 

CKSV*

 

 

 

 

Regular Expressions

 

  metacharacter   name   matches
. dot any one character
[...] character class any character listed
[^...] negated character class any character not listed
^ caret the position at the start of the line
$ dollar the position at the end of the line
\< backslash less-than the position at the start of a word
\> backslash grater-than the position at the end of a word
| or, bar matches either expression it separates
(...) parentheses used to limit scope of |

 

 

 

 

Aussagenlogik

 

Einige Schlussregeln

(PP)

Modus Ponendo Ponens (der durch Setzen setzende Modus)

A → B

Wenn ich den Apfel, den ich halte, loslasse, so fällt er runter

A       

Ich lasse den Apfel los

B

Also fällt der Apfel runter (es sei denn, ich befinde mich in Schwerelosigkeit)

(TT)

Modus Tollendo Tollens (der durch Aufheben aufhebende Modus)

A → B

Wenn es regnet, wird die Straße nass

¬B      

Die Straße ist nicht nass

¬A

Also hat es nicht geregnet (es sei denn, die Straße ist wärmer als 100°C)

(TP)

Modus Tollendo Ponens (Disjunktiver Syllogimus)

A v B

Der Computer ist entweder an oder er ist aus

¬A    

Der Computer ist nicht an

B

Also ist der Computer aus (es sei denn, er befindet sich in sleep mode)

(PT)

Modus Ponendo Tollens (dritter (stoischer) unbeweisbarer Schlussmodus)

¬ (A B)

Sokrates ist nicht gleichzeitig auf dem Isthmus und in Athen

A            

Sokrates ist in Athen

¬ B

Sokrates ist nicht auf dem Isthmus

(HS)

Hypothetischer Syllogismus (Modus Barbara)

A → B

Sokrates is aus Athen

B → C

Athen ist aus Stein

A → C

Sokrates ist aus Stein (equivocation, Ambiguiät)

(DE)

Disjunction elimination

A → C

Wenn es Pizza gibt, trinke ich Mineralwasser

B → C

Wenn es Fisch gibt, trinke ich Mineralwasser

A v B    

Es gibt Pizza oder Fisch

C

Also trinke ich Minearlwasser (es sei denn, es ist keins mehr im Haus)

 

 

 

 

 

Wahrheitstafel

               
                     
   

P

Q

P P

P Q

P Q

P Q

P | Q

P Q

 
   

T

T

T

T

T

T

F

T

 
   

T

F

T

T

T

F

T

F

 
   

F

T

T

T

F

T

T

F

 
   

F

F

T

F

T

T

T

T

 
                     
   

¬P

¬Q

P ¬P

P Q

P ¬Q

¬P Q

P ↓ Q

P Q

 
   

F

F

F

T

F

F

F

F

 
   

F

T

F

F

T

F

F

T

 
   

T

F

F

F

F

T

F

T

 
   

T

T

F

F

F

F

T

F

 
                     
                     
 

Junktoren der Grundverknüpfungen

           
                     
 

¬ - Negation

¬P

nicht

   

kehrt die Werte um

 

- Konjunktion

P Q

und (sowohl ... als auch ...)

 

w beide Werte w sind

 

- Disjunktion

P   Q

 ... oder auch ...

   

w minderstens ein Wert w ist

 

- Implikation

P Q

 wenn ... dann ...

   

f der VS w ist und der NS f ist

 

- Replikation

P Q

     

f der VS f ist und der NS w ist

 

 - Äquivalenz

P Q

genau dann ... wenn ...

 

beide Werte w oder beide f sind

 

- Definition

       
 

- Kontravalenz

¬(P Q)

entweder ... oder ...

 

w ein Wert w und der andere f ist

 

| - Sheffer Funktor

¬(P Q)

nicht gleichzeitig

 

f wenn beide Werte w sind

 

↓ - Nicod Funktor

¬(P Q)

weder noch

       
 

- Postsektion

P ¬Q

das eine ohne das andere

       
 

- Präsektion

¬P Q

das andere ohne das eine

       
 

Kontradiktion

P ¬P

         
     

¬P Q

es sei denn, dass

       

 

 

 

 


 Mathematische Grundlagen

 

Disziplin Anwendung in der Informatik
Algebra Effizienz von Algorithmen, Komplexitätstheorie
Numerik Optimierung, Approximation
Zahlentheorie Kryptographie
Graphentheorie Komplexitätstheorie, Netzwerktheorie
Typentheorie type checking Algorithmen, Semantik Natürlicher Sprachen
Kategorientheorie Funktionale Programmierung, Domaintheorie, Graphgrammatiken
Spieltheorie Entscheidbarkeit

 

 

 

 


 Informationstheorie

 

Übertragungsmodell nach Shannon

 

 

 

Erweitertes Kommunikationsmodell

 

 

Leitungskodierung stellt sicher Anpassung an den Kanal durch Modulation der Zeichen in ein Signal
Kanalkodierung stellt sicher Schutz vor Übertragungsfehlern durch Hinzufügen von Redundanz zum Signal
Chiffrierung/ Dechiffrierung stellt sicher Ver-/Entschlüsselung durch Kryptographie /-analyse
Quellenkodierung stellt sicher Datenkompression durch Entfernen von Redundanz im Signal

 

 

 

 

Informationsgehalt 5

 

bit = die Datenmenge, die mit der Antwort auf eine Elementarentscheidung

(Ja-Nein-Frage) übertragen wird

 
   

bit

  Speicherkapazität des Gehirns 1012
  Informationen, die ein Mensch in 60 Jahre aufnimmt 3 * 1010
  Erbinformation 1010

mittlerer Informationsgehalt

  russisch 4,36
  deutsch 4,11
  englisch 4,04
  französisch 3,97
  Buchstabe e 0,147004
  Buchstabe x 0,000129

Informationsfluss

   

bit/s

  Seheindruck aus der Umwelt 109
  Höreindruck aus der Umwelt (max) 107
  Nervenleitung 800
  Sprechen 300
  Nachdenken in Worten 100
  Lesen (25 Buchstaben/sec) 50
  Übernahme ins Kurzzeitgedächtnis 10

 

 

 

 


 Heuristik 6

 

Basisheuristik

Kann ich in der Liste der Heuristiken eine finden, die mir weiterhilft?
 

Analogie

Habe ich ein ähnliches Problem schon einmal bearbeitet?
Kenne ich ein verwandtes Problem?
 

Verallgemeinerung

Hilft mir der Übergang von einem Objekt zu einer Klasse von Objekten weiter?
 

Spezialisierung

Bringt es mich weiter, wenn ich zunächst einen leicht zugänglichen Spezialfall löse?
 
 

Variation

Komme ich durch eine Veränderung der Problemstrellung der Lösung näher?
Kann ich die Problemstellung anders ausdrücken?
 

Rückwärtssuche

Ich betrachte das gewünschte Ergebnis. welche Operationen können mich zu
diesem Ergebnis führen?
 

Teile und herrsche

Läßt sich das Problem in leichter lösbare Teilprobleme zerlegen?
 

Vollständige Enumeration

Ich lasse einen Teil der Bedingungen weg. Kann ich mir Lösungen verschaffen,
die wenigstens einen Teil der Zielbedingungen erfüllen?
Kann ich mir alle Lösungen verschaffen, die diese Bedingungen erfüllen?

 

 

 

 


 Algorithmik

 

Klassifikation von Algorithmen nach Zweck

 

 

 

Klassifikation nach Umsetzung

 

 

 

Klassifikation nach Paradigma

 

Divide-and-conquer divides the problem into smaller subproblems of the same type, and solve these subproblems recursively
Dynamic programming remembers past results and uses them to find new results
Greedy always takes the best immediate, or local, solution while finding an answer
Linear programming expresses a problem as a set of linear inequalities and then attempts to maximize or minimize the inputs
Reduction transforms the problem
Graph exploration models problems on graphs
Randomized uses a random number at least once during the computation to make a decision
Heuristic uses rules of thumb
Genetic numerical optimization procedure that is based on evolutionary principles such as mutation, deletion and selection

 

 

 

 


 Praktische Informatik

 

Programmierkonzepte

 

Programmierkomponenten

 

Programmstrukturen

 

Kontrollstrukturen

 

Datenstrukturen

 

Datentypen

 

Plattform

 

Architektur

 

Anweisung

 

Array

 

Konstante

Assembler

Algorithmus

Sequenz

Verbund/ Struktur

Variable

Parser

Prozedur

Alternation

Liste

Zeiger

Compiler

Ausdruck

Selektion

Stapelspeicher

ADT

Interpreter

Regulärer Ausdruck

Iteration

Warteschlange

Literal

Präprozessor

Befehl

Sprunganweisung

Deque

subtype

Linker

Kommentar

 

Graph

Port

Lader

Bezeichner

Assertion

Heap

 

Laufzeit

 

Vorbedingung

Baum

Char

Debugger

Konstrukte

Nachbedingung

Binärebaum

String

Assembly

Zuweisung

Invariante

Hashtabelle

Integer

Prozess

Deklaration

 

Menge

Long

API

Definition

Ausnahme

Multimenge

Float

Framework

Inkrement

Fortsetzung

Collection

Boolean

IDE

Typumwandlung

 

Enumeration

 

Editor

Dreieckstausch

 

Stream

 

Programmbibliothek

Typisierung

 

Container

Modifizierer

Namensraum

Constraints

 

Vektor

Zugriffsrecht

Schlüsselwort

Dynamische Bindung

 

Abbildung

Gültigkeitsbereich

Programmausdruck

Aliasing

   

Initialwert

 

Operator

 

Semaphor

Aufzählungstyp

Datei

Laufvariable

     
 

Flag

Programmierparadigmen

Referenz

 
 

Dummy

     

Steuerelemente

 

Imperative Programmierung

Datenbank

 

Form

 

Deklarative Programmierung

Daten

 
 

Funktionen

Objektorientierung

Datenfeld

 

Interface

Parameter

Objekt

Datensatz

 

event

Argument

Klasse

Spalte

 
 

Rekursion

Methode

Operation

 
 

Delimiter

Attribut

Transaktion

 
 

Überladen

Encapsulation

Isolation

 
 

Rückruffunktion

Nachrichten

Kardinalität

 
 

Generator

Vererbung

Abfrage

 
 

Currying

Aggregation

   

Transformationssysteme

Funktionsabschluss

Assoziation

   
   

Komposition

   

Refactoring

Thread

Konstruktor

   
 

Mutex

Destruktor

   
 

Event handler

Polymorphie

   
 

Stub

Reflexion

   
 

Lambda-Kalkül

Signatur

   
 

Pipe

Layer

   

Entwicklungsmethoden

Koroutine

Package

   
 

Modul

Kopplung

   

agile

Makro

Kohäsion

   

extreme

 

Template

   

ad hoc

Nebenläufigkeit

Speicherbereinigung

   

scrum

Monitor

Marshalling

   
 

Arbiter

Serialisierung

   
   

Delegation

   
 

Entwurfsmuster

Instanzierung

   
   

Identität

   
 

Adapter

Persistenz

   

 

 

 

 

Sprachelemente & Fehlerarten

 

    Element Fehler werden gefunden von Beispiel, Erklärung
Grundelemente der Sprache - Lexik      
Form der erlaubten Zeichenfolgen - Syntax syntaktische dem Compiler Tippfehler
Bedeutung der erlaubten Zeichenfolgen - Sematik semantische der Laufzeitumgebung Feldgrenzverletzungen
zweckmäßige Anwendung der Sprachelemente - Pragmatik logische dem Benutzer das Programm tut nicht das, was es sollte

 

 

 

 

Kompilierprozesse

 

1. in der interpretierten Sprache Lisp

 

 

 

  2. in der kompilierten Sprache C++ 3. in der hybriden Sprache Java (Bytecode)
Phase 1

program is created in the

editor and stored on disk

program is created in the

editor and stored on disk

Phase 2

preprocessor program

processes the code

compiler creates bytecodes

and stores them on disk

Phase 3.1

Compiler creates objects

code and stores it on disk

class loader puts bytecodes

in memory

Phase 3.2

 

 

Linker links the object code

with the libraries, creates

a.out and stores it in disk

Phase 4

 

 

 

 

 

Loader puts program in

memory

 

 

 

Bytecode verifier confirms

that all bytecodes are valid

and do not violate Java's

security restrictions

Phase 5

 

 

 

CPU takes each insstruction

and executes it, possibly

storing new data values as

the program executes

Interpreter reads bytecode

and translates them into a

language that the computer

can understand possibly

storing data values as the

program executes

 

 

 

 

Maschinensprachen/ Assembler 7

 

 Transportbefehle

 

 LOAD, STORE

 

 Arithmetische und logische Befehle

 

 ADD, SUB, AND, OR, CMP

 

 Schiebebefehle

 

 SH, ROT

 

 Sprungbefehle

 

 JMP, JGT

 

 Sonderbefehle

 

 

 

 Darstellung in Maschinensprache

 

 0100  LOAD 0118  
 0102  STORE 0116  
 0104  LOAD 0114  
 0106  JUMPZERO 011a  
 0108  SUB 0118  
 010a  STORE 0114  
 010c  LOAD 0116  
 010e  ADD 0116  
 0110  STORE 0116  
 0112  JUMP 0104  
 0114  #2  
 0116  #0  
 0118  #1  
 011a  STOP  

 

 

 Darstellung in Hochsprache

 

 y = 1;

 while (x !=0){

     x = x - 1;

     y = y + y;

 }

 

 d.h. y = 2 ^x

 

Evolution

 

 

 

6th generation

future

neural networks

5th generation

1990

constraint-based and logic programming languages

4th generation

1970-1990

non-procedural, high-level specification languages

3rd generation

1962-1970

procedural languages

2nd generation

1959-1961

assembly languages

1st generation

1954-1958

machine-level programming languages

 

 

 

 

Typisierung

 

Wie streng unterscheidet die Sprache die Datentypen?

 

strong

weak

Wann werden die Datentypen festgelegt, zur Lauf- oder zur Übersetzungszeit?

 

dynamic

static

Werden die Datentypen explizit genannt oder per Typableitung ermittelt?

 

explicit

implicit

 

 

 

 

Vergleich

 

index

language

year

written in

mighti-

ness

pop-

ularity

appli-

cation

type

interpr.,

comp.?

OO

Visual IDE

database

read-/

learnability

abstract-

ness

port-

ability

01

VB.net

2001

C++

02

01

 

pro

inter

yes

yes

       

02

Java

1996

C

03

01

 

str

both

yes

yes

       

03

C

1972

Assembly

01

02

systems

pro

comp

no

yes

 

02

   

04

Visual Basic

1991

C++

02

03

 

pro

inter

no

yes

       

05

PHP

1995

C

04

04

web

pro

inter

 

yes

       

06

C++

1985

C

01

05

systems

pro

comp

yes

yes

       

07

Python

1991

C

 

06

 

pro

both

           

08

Perl

1987

C

 

07

 

pro

both

           

09

C#

2001

C

 

08

 

pro

inter

yes

yes

       

10

Ruby

1995

C

 

09

 

mp

inter

yes

         

11

JavaScript

1995

C++

 

10

web

str

inter

           

12

Delphi

1995

C

 

11

 

pro

 

yes

yes

       

13

D

1999

C

 

12

 

pro

             

14

PL/SQL

1986

   

13

 

dec

             

15

SAS

1966

C

 

14

statistics

imp

             

16

COBOL

1959

Assembly

 

15

finance

pro

             

17

ABAP

1980

   

16

finance

               

18

Lisp/Scheme

1958

 

01

17

 

fun

inter

           

19

Pascal

1970

Assembly

 

18

 

pro

   

no

 

01

   

20

Eiffel

1985

   

19

 

pro

 

yes

yes

       

21

F#

2005

   

20

 

fun

             

22

Prolog

1970

Algol

 

21

 

logic

             

23

Smalltalk

1971

           

yes

         

24

APL

1964

       

arr

             

25

Erlang

1991

Prolog

     

fun

             

26

Oberon

1986

       

pro

             

27

Mathematica

1988

       

fun

             

28

Ada

1983

       

pro

             

29

REXX

1979

       

scr

             

30

Fortran

1957

       

pro

             

31

Algol

1958

                       

32

Assembly l.

1950

mach. code

                     

 

 

 

 


 Lexik

 

Standardbibliotheken

 

Standardbibliotheken (C)

assert.h

Fehlerdiagnose

ctype.h

Test- und Umwandlungsfunktionen für zeichen (Charakterbehandlung)

erno.h

Funktionen zur Fehlerbehandlung

float.h

Grenzwerte der Fließkommadarstellung

limits.h

Grenzwerte für Ganzzahltypen

likale.h

Funktionen für lokale Besonderheiten

math.h

Mathematische Funktionen (double)

setjmp.h

Nichtlokale Sprünge über Funktionen

signal.h

Signalbehandlung

stdarg.h

Funktionen mit variablen Listen

stddef.h

Allgemeine Typendefinitionen und Makros

stdio.h

Ein-/Ausgabe- und Dateioperationen

stdlib.h

Hilfefunktion

string.h

Zeichenfolge

time.h

Zeitbestimmungsfunktionen

 

 

 

 

Mathematische Funktionen (C)

sin(x)

Sinus (in Bogenmaß)

cos(x)

Cosinus

tan(x)

Tangens

asin(x)

arcsin(x) im Definitionsbereich []

acos(x)

arcsin(x) im Definitionsbereich []

atan(x)

arcsin(x) im Definitionsbereich []

atan2(x,y)

arcsin(x) im Definitionsbereich []

sinh(x)

Sinus Hyperbolicus von x

cosh(x)

Cosinus Hyperbolicus von x

tanh(x)

Tangens Hyperbolicus von x

exp(x)

Exponentialfunktion (ex) von x

log(x)

Logarithmus naturalis

log(10)

Logarithmus zur Basis

pow(x,y)

x hoch y

sqrt(x)

2te Wurzel von x

ldep(x, int n)

x mal 2 hoch n

fabs(x)

absoluter Betrag von x

floor(x)

rundet positive Zahlen ab

cell(x)

rundet positive Zahlen auf

 

 

 

 

.net Namespaces

Windows Presentation Foundation

 

Windows Forms

 

Communications

 

Data

 

Workflow

 

Web

 

 

 

 

 


 Syntax & Semantik

 

Einrückungsstil

 

 

                            Original K&R

 

for(i=0; i < 10; i++){

        /* Anweisungen */

    }

 

 

                            Allman

 

for(i=0; i < 10; i++)

{

        /* Anweisungen */

}

 

                            K&R Variant

 

for(i=0; i < 10; i++){

    /* Anweisungen */

}

 

 

                            Whitesmiths

 

for(i=0; i < 10; i++)

            {

            /* Anweisungen */

            }

 

 

 

 

 

 

                            Horstmann

 

for(i=0; i < 10; i++)

            { /* Anweisungen */

            }

 

 

 

 

Programmstrukturen

 

Ausdrücke werden ausgewertet und liefern einen Wert (ggf. mit Seiteneffekten)
Anweisungen werden ausgeführt und haben eine Wirkung (ggf. mit Wert)

 

 

 

 

 

  einfache Anweisungen
Deklaration Festlegung von Dimension, Bezeichner, Datentyp und weiteren Aspekten einer Variablen oder eines Unterprogramms
Definition einer Variablen wird ein bestimmter Speicherbereich zugerodnet (meistens durch Deklaration)
Initialisierung eine Variable wird auf einen initialen Anfangswert gesetzt (Deklaration und Zuweisung in einem, bzw. die erste Zuweisung an eine Variable)
Zuweisung eine Varibale wird auf einen neuen Wert gesetzt: (Bezeichner = Literal) oder (Bezeichner = Bezeichner)
Funktionsaufruf ruft eine Funktion auf
Rückgabeanweisung

spezifiziert den Rückgabewert einer Funktion

Instanzerzeugung erzeugt ein neues Objekt einer Klasse
Zusicherung Aussage über den Programmzustand (d.h. die Belegung der Variablen) wenn der Kontrollfluss eine bestimmte Stelle erreicht hat
Kommentar Anmerkung/ Hinweis vom Programmierer, der vom Compiler nicht ausgeführt wird

 

 

 

  zusammengesetzte Anweisungen
Dreieckstausch ein Verfahren zum Austausch der Werte zweier Variablen
Ein-/ Ausgaben Daten IO, Datei IO, Datenbank IO, Netzwerk IO, Hardware Control

 

 

 

 

Kontrollstrukturen

 

 

 

 

if ... then

Überprüfung einer Zahl auf "kleiner als 50"

 VB6

 C++

If iZahl < 50 Then

    Label.Caption = "Die Zahl ist kleiner als 50."

End If

 

if(zahl < 50) {

    cout<<"Die Zahl "<<zahl;

    cout<<" ist kleiner als 50."<<endl;

}

 VB.net
 C#

 

 

 

 

if ... then ... else

Überprüfung einer Zahl auf "gerade oder ungerade"

 VB6

 C++

If iZahl Mod 2 = 0 Then

    Label.Caption = "Die Zahl ist gerade."

Else

    Label.Caption = "Die Zahl ist ungerade."

End If

 

if(zahl % 2 == 0) {

    cout<<"Die Zahl "<<zahl<<" ist gerade."<<endl;

}

else {

    cout<<"Die Zahl "<<zahl<<" ist ungerade."<<endl;

}

 VB.net
 C#

 

 

 

 

Mehrfach-Verzweigung 1

Überprüfung einer Zahl auf "kleiner, größer oder gleich 50"

 VB6

 C++

If iZahl < 50 Then

    Label.Caption = "Die Zahl ist kleiner als 50."

ElseIf iZahl = 50 Then

    Label.Caption = "Die Zahl ist gleich 50."

Else

    Label.Caption = "Die Zahl ist größer als 50."

End If

 

 

 

if(zahl < 50) {

    cout<<"Die Zahl "<<zahl;

    cout<<" ist kleiner als 50."<<endl;

}

else if(zahl == 50) {

    cout<<"Die Zahl "<<zahl<<" ist gleich 50."<<endl;

}

else {

    cout<<"Die Zahl "<<zahl;

    cout<<" ist groesser als 50."<<endl;

}

  VB.net
  C#

 

 

 

 

Mehrfach-Verzweigung 2

Überprüfung einer Zahl auf die Bereiche 1000-2000, 0-1000, bzw. <0 & >2000

 VB6

 C++

If iMesswert > 0 And iMesswert < 2000 Then

    If iMesswert > 1000 Then

        Lbl.Caption = "Hochdruck"

    Else

        Lbl.Caption = "Normal oder Tiefdruck"

    End If 'iMesswert > 1000

 

    Else

        Lbl.Caption = "Der Messwert ist ungültig."

End If 'iMesswert > 0 And iMesswert < 2000

if (messwert > 0 && messwert < 2000) {

    if (messwert > 1000)

        cout << "Hochdruck"

    else

        cout << "Normal oder Tiefdruck"

}

else

    cout << "Der Messwert ist ungueltig";

 

 
 VB.net
 C#

 

 

 

 

Select Case

Anwendung der vier Grundrechenarten auf zwei natürliche Zahlen

 VB6

 C++

Select Case cmb_rechenarten.ListIndex

Case "0"

  lbl.Caption = zahl1 + zahl2

Case "1"

       lbl.Caption = zahl1 - zahl2

Case "2"

  lbl.Caption = zahl1 * zahl2

Case "3"

  lbl.Caption = zahl1 / zahl2

'Case Else

  'lbl.Caption "Auswahl nötig"

End Select

 

 

switch(operation) {

case 1:

    cout<<zahl1+zahl2<<endl;

    break;

case 2:

    cout<<zahl1-zahl2<<endl;

    break;

case 3:

    cout<<zahl1*zahl2<<endl;

    break;

case 4:

    cout<<zahl1/zahl2<<endl;

    break;

}

 VB.net
 C#

 

 

 

 

While Schleife

Ausgabe der Zahlen 1-10

 VB6

 C++

Dim iZaehler As Integer

iZaehler = 1

 

While iZaehler <= 10

    Text1.Text = Text1.Text & iZaehler & vbNewLine

    iZaehler = iZaehler + 1

Wend

int i=1;

 

while (i<=10) {

    cout << i << "\n" ;

    i++;

}

 

 VB.net
 C#

 

 

 

 

Do ... Loop

Ausgabe der Zahlen 10-1

 VB6

 C++

Dim iZaehler As Integer

iZaehler = 10

 

Do

    Text1.Text = Text1.Text & iZaehler & vbNewLine

    iZaehler = iZaehler - 1

Loop Until iZaehler = 0

int i=10;

 

do {

    cout << i << "\n" ;

    i--;

} while (i>0);

 
 VB.net
 C#

 

 

 

 

For ... Next

Ausgabe eines Textes rückwärts

 VB6

 C++

sText = tbx_Eingabe.Text

iLaenge = Len(tbx_Eingabe)

 

For i = iLaenge To 1 Step -1

    sInverText = sInverText & Mid(sText, i, 1)

Next

 

lbl_Ausgabe.Caption = sInverText

cin>>name;

 

const int max = strlen(name);

int i=max;

 

for(i=max-1; i>=0; i--) {

    cout<<name[i];

}

 VB.net
 C#

 

 

 

 

Try ... Catch...Finally

Pseudocode

 VB.net

 C#

try {

        gefaehrlicheFunktion();

    }

    catch (OutOfMemory) {

        Console.WriteLine("catch");

    }

    catch (FileNotFound) {

        Console.WriteLine("catch");

    }

    finally {

        Console.WriteLine("finally");

    }

try {

        gefaehrlicheFunktion();

    }

    catch (OutOfMemory) {

        Console.WriteLine("catch");

    }

    catch (FileNotFound) {

        Console.WriteLine("catch");

    }

    finally {

        Console.WriteLine("finally");

    }

  VB.net
  C#

 

 

 

 

Continue

Vermeidung der Division durch 0

 VB.net

 C#

For i = -10 To 10

    If i = 0 Then

        Continue For

    End If

    TextBox1.Text = TextBox1.Text & i & vbNewLine

Next i

for(i=-10; i<=10; i++) {

    if(i==0)

        continue;

    document.write(1/i);

}

 

  VB.net
  C#

 

 

 

 

 

Operatoren

 

logische Operatoren

Symbol

bezeichnet

Beispiel (x=50, y= 100)

Rückgabewert

       

!

nicht

   

&&

und

(x == 50 && y == 100) true

||

oder

(x == 10 || y == 100) true

^

bitweises exkl. oder

   
&

bitweises und

   
|

bitweises inkl. oder

   

Vergleichsoperatoren

==

gleich

 x == y; false

!=

ungleich

 x != y; true

<

kleiner

 y  < x; false

>

größer

 y > x; true

<=

kleiner gleich

 x <= 50; true

>=

größer gleich

 y >= 50; true

 

 

arithmetische Operatoren in C/C++

 

Normal Zusammengefasst Postfix
     
counter = counter + 1; counter += 1; counter ++;
counter = counter - 1; counter -= 1; counter --;
counter = counter * 1; counter *= 1;  
counter = counter / 1; counter /= 1;  
counter = counter & 1; counter %= 1;  

 

 

Präfix und Postfix

 

x = counter ++; //x = 0, counter = 1 Übertrage den Wert zuerst und inkrementiere ihn dann
x = ++ counter; //x = 1, counter = 1 Inkrementiere den Wert zuerst und übertrage ihn dann

 

 

 

 


 Datentypen & -strukturen

 

x = 50;
l-Wert     r-Wert
Bezeichner/   Literal/
Speicherzelle   Speicherinhalt

 

 

einfache Variablen

 

lokale Varaiblen dienen zum Speichern wechselnder Werte innerhalb einer Funktion

globale Varaiblen

dienen zum Speichern wechselnder Werte innerhalb eines ganzen Programms

Konstanten

werden definiert um konkrete, konstante Werte zu repräsentieren

statische Variablen

behalten nach Beendigung der Funktion ihren Wert

 

Hilfsvariablen

 

Flag (Dummy)

eine binäre Variable, welche als Hilfsmittel zur Kennzeichnung bestimmter Zustände benutzt werden kann

Laufvariable

wird in einer Zählschleife als Zähler benutzt

 

 

 

 

Datentypen

 

Prg Bezeichner

       Typ

Größe (32 bit Wertebereich

Sprache

Präfix

 

Architektur)

 

    

gänige Datentypen  

signed

  unsigned
       

Ganze Zahlen

   

short int

2 byte

-32.768  ->

32.767

0 -> 65.535

 

i

int

4 byte

-2.147.483.648  ->

 2.147.483.647

0 -> 4.294.967.295
 

lg

long int

4 byte

-2.147.483.648  ->

 2.147.483.647

 
               
       

Gleitkommazahlen

   

float

4 byte

- 3,4 * 10-38  -> 3,4 * 1038 6-Nachkommastellen
 

d

double

8 byte

- 1,7 * 10-308  -> 1,7 * 10308 15-Nachkommastellen
   

long double

12 byte

- 1,2 * 10-4932  -> 1,2 * 104932 18-Nachkommastellen
 

 

long

         
     

Alphanumerische Zeichen

   

char

1 byte

128  ->

 127

256 Ascii Zeichen
 

s

string

         
     

Andere

   

bool

 

Wahrheitswerte true or false

   

void

 

 

programmiersprachenspezifische Datentypen
VB6

v

variant

   
VB6