Algorithmus und Programm: Vom Algorithmus zum Programm

Größe: px
Ab Seite anzeigen:

Download "Algorithmus und Programm: Vom Algorithmus zum Programm"

Transkript

1 Algorithmus und Programm: Vom Algorithmus zum Programm 1.1 Vom Algorithmus zum Programm 1.2 Programmiersprachen 1.3 Korrektheit, Komplexität und Entscheidbarkeit 1.4 Software-Grundlagen 1.1 Vom Algorithmus zum Programm 1-1

2 Algorithmusbegriff Ein Algorithmus ist eine Berechnungsvorschrift. Die Aufgabe, die der Algorithmus lösen soll, wird durch eine Spezifikation festgelegt. Die Berechnungsvorschrift wird durch einen endlichen Text kodiert. Sie beschreibt die auszuführenden Berechnungen hinreichend präzise. Die Berechnungen sind aus elementaren Operationen aufgebaut und besitzen Aus- und evtl. Eingabewerte. Hierbei handelt es ich um eine sog. intuitive Definition. In der Informatik wird auch eine formale Definition benötigt, zum Beispiel zum Nachweis, dass für ein bestimmtes Problem kein Algorithmus existiert.»intuitiv heißt nicht erlernt.«(bruce M. Hood) 1.1 Vom Algorithmus zum Programm 1-2

3 Eigenschaften von Algorithmen Algorithmen sollen in der Regel terminieren, d. h. bei jeder Eingabe irgendwann zu einem Ende führen. Es gibt Ausnahmen: z. B. Betriebssysteme oder sogenannte reaktive Systeme. Die Terminierung wird in der Definition des Algorithmusbegriffs nicht verwendet. Ein Grund hierfür ist zum Beispiel das Halteproblem (s. unten): Definitionen müssen überprüfbar sein. Einen Algorithmus nennt man deterministisch, wenn er bei gleichen Eingabedaten stets die gleiche Berechnung ausführt. Ein Algorithmus heißt determiniert, wenn er bei gleichen Eingabedaten stets die gleichen Ausgabedaten liefert. 1.1 Vom Algorithmus zum Programm 1-3

4 Programm und Programmiersprache Ein Programm ist die Formulierung eines Algorithmus mit seiner Datenbereiche in einer Programmiersprache. Eine Programmiersprache erlaubt es, Algorithmen präzise zu beschreiben. Insbesondere legt eine Programmiersprache die elementaren Operationen, die Möglichkeiten zu ihrer Kombination und die zulässigen Datenbereiche eindeutig fest. Unter programmieren versteht man den Vorgang des Erstellens eines Programms. 1.1 Vom Algorithmus zum Programm 1-4

5 Grundlegende Aspekte der Algorithmenentwicklung Wie wird ein Algorithmen formuliert? Paradigma. Beispiele für Paradigmen: imperativ, objektorientiert, funktional, logisch. Es gibt weitere Paradigmen, diese vier sind aber die am häufigsten erwähnten. Weitere Bezeichnungen für Paradigmen: hybrid, prozedural, deklarativ. Mit welchem Aufwand löst der Algorithmus das Problem? Komplexität. Beispiele zur Komplexität: benötigte Rechenzeit oder verwendeter Speicherplatz. Erfüllt mein Algorithmus seine Spezifikation? Korrektheit. Der Nachweis der Korrektheit wird Verifikation genannt. Wie werden Datentypen definiert? Abstrakte Datentypen. ADT/Abstrakte Datentypen werden durch algebraische Methoden definiert. 1.1 Vom Algorithmus zum Programm 1-5

6 Grundlegende Aspekte der Algorithmenentwicklung Gibt es für das Problem einen Algorithmus? Berechenbarkeit/Entscheidbarkeit. Zur Beantwortung dieser Frage wird eine formale Definition des Algorithmenbegriffs benötigt. Beispiel: Turing-Maschine. Alonzo Church stellte 1936 die folgende These auf, die bisher nicht widerlegt wurde. Church sche These: Der intuitive Algorithmenbegriff wird durch das Modell der Turing-Maschine adäquat definiert. Die Church sche These kann natürlich nicht bewiesen werden, da sie den intuitiven Algorithmenbegriff verwendet. Über intuitive Dinge können keine formalen Beweise geführt werden. Es wurde gezeigt, dass viele formale Algorithmusdefinitionen äquivalent sind. Daher könnte in der Church schen These die Turing-Maschine durch etliche andere formale Definitionen des Algorithmus ersetzt werden. 1.1 Vom Algorithmus zum Programm 1-6

7 Grundlegende Aspekte der Algorithmenentwicklung Gibt es Vorgehensweisen für die Erstellung von Algorithmen? Entwurf von Algorithmen. Beispiele: Rekursion, Backtracking, Divide-and-Conquer, Greedy-Algorithmus,... Gibt es Algorithmen, die man häufig verwenden kann? Standardalgorithmen. Beispiele: Algorithmen zum Suchen und Sortieren, Algorithmen für konkrete Datentypen (zum Beispiel: Graphen, Listen, Keller, Schlangen,... ) Gibt es andere Definitionen des Algorithmenbegriffs? Varianten des Algorithmenbegriffs. Beispiele: nichtdeterministische, parallele, randomisierte Algorithmen. 1.1 Vom Algorithmus zum Programm 1-7

8 Paradigmen zur Formulierung von Algorithmen In einem imperativen Algorithmus gibt es Variable, die verschiedene Werte annehmen können. Die Menge aller Variablen und ihrer Werte sowie der Programmzähler beschreiben den Zustand zu einem bestimmten Zeitpunkt. Ein Algorithmus bewirkt eine Zustandstransformation. Ein funktionaler Algorithmus formuliert die Berechnung durch Funktionen. Die Funktionen können rekursiv sein; auch gibt es Funktionen höherer Ordnung. In einem objektorientierten Algorithmus werden Datenstrukturen und Methoden zu einer Klasse zusammengefasst. Von jeder Klasse können Objekte gemäß der Datenstruktur erstellt und über die Methoden manipuliert werden. Ein logischer (deduktiver) Algorithmus führt Berechnungen durch, indem er aus Fakten und Regeln durch Ableitungen in einem logischem Kalkül Ziele beweist. 1.1 Vom Algorithmus zum Programm 1-8

9 Paradigmen zur Formulierung von Algorithmen Aus einer übergeordneten Sichtweise werden die folgenden Kategorien unterschieden: Prozedurale Programmiersprachen: Es wird exakt angegeben, wie die Lösung eines Problems ermittelt werden kann. Imperative Programmiersprachen fallen in diese Kategorie. Deklarative Programmiersprachen: Im Gegensatz zum prozeduralen Paradigma fragt man in der deklarativen Programmierung danach, was berechnet werden soll. Es wird also nicht der Lösungsweg programmiert, sondern angegeben, welches Ergebnis gewünscht ist. Deklarative Paradigmen beruhen auf mathematischen, rechnerunabhängigen Theorien. Beispiele hierfür sind prädikative und bis zu einem gewissen Grade auch funktionale Programmiersprachen. Unter einem hybriden Paradigma versteht man die Mischung von Paradigmen. 1.1 Vom Algorithmus zum Programm 1-9

10 Beispiel: Algorithmus von Euklid Der folgende, in einer imperativen Programmiersprache formulierte, Algorithmus von Euklid berechnet den größten gemeinsamen Teiler der Zahlen x, y N mit x > 0 und y 0: a := x; b := y; while b # 0 do r := a mod b; a := b; b := r od Anschließend gilt a = ggt(x, y). 1.1 Vom Algorithmus zum Programm 1-10

11 Beispiel: Algorithmus von Euklid Variable z 0 z 1 z 2 z 5 z 8 z 11 z 14 r a b ggt(36, 52) = 4 Durchlaufene Zustände: z 0, z 1, z 2,..., z 14 Zustandstransformation: z 0 z Vom Algorithmus zum Programm 1-11

12 Datenstrukturen und Typsysteme Programmiersprachen bieten die Möglichkeit, aus elementaren Datenbereichen mithilfe von Konstruktoren komplexe Datenbereiche aufzubauen. Datenbereiche werden häufig Datenstrukturen genannt. Elementare Datenstrukturen: Wertebereiche, Operationen boolean, char, cardinal, integer, real, enumeration Konstruktoren: array (Feld), record (Satz), set (Menge), pointer (Zeiger) Zeiger ermöglichen rekursive Datenstrukturen wie Listen, Bäume und Graphen. Typäquivalenz, Typanpassung, Typkompabilität,... Die Aspekte, die die Datenbereiche betreffen, werden als Typsystem bezeichnet. 1.1 Vom Algorithmus zum Programm 1-12

13 Natürliche und künstliche Sprachen Sprache ist ein sich stets weiterentwickelndes, komplexes System von Lauten und Zeichen zum Zwecke der Kommunikation. Es werden natürliche und künstliche Sprachen unterschieden. Natürliche Sprachen sind historisch gewachsen. Hierzu zählen z. B. Deutsch, Englisch und Französisch. Sie sind Ausdruck menschlichen Denkens, Fühlens und Wollens und weisen im Unterschied zu künstlichen Sprachen Mehrdeutigkeiten auf. Künstliche Sprachen sind Zeichensysteme, die der Verständigung in einem eng begrenzten Fachgebiets dienen, zum Beispiel Programmiersprachen. Sprachen wie Esperanto sind ebenfalls künstliche Sprachen, die sich durch leichtere Schreibung und Grammatik gegenüber natürlichen Sprachen auszeichnen. aus Basiswissen Deutsch, Dudenverlag 1.1 Vom Algorithmus zum Programm 1-13

14 Sprachklassen der Informatik Die Sprachen der Informatik werden typischerweise in zwei Klassen aufgeteilt: General Purpose Language (GPL) Domain Specific Language (DSL) Meistens zählt man die Programmiersprachen zu den GPLs und Sprachen für spezielle Anwendungen zu den DSLs. Die Klasseneinteilung ist nicht in allen Quellen genau identisch. Eine mögliche Beispiel-Einteilung finden Sie in einem Material der Veranstaltung. 1.1 Vom Algorithmus zum Programm 1-14

15 Sprachen der Informatik Um Objekte mit Rechensystemen zu behandeln, müssen sie in eindeutigen also künstlichen Sprachen beschrieben werden. Einige Beispiele sollen dies verdeutlichen: Algorithmen: Programmiersprachen (Java) Dokumente: Markup-Sprachen (Html, XML), Seitenbeschreibungssprachen (Postscript) Modelle, Systeme: Modellierungssprachen (UML) Spezifikationen: Spezifikationssprachen (Z, VDM-SL) Datenbanken: Anfragesprachen (SQL) 1.1 Vom Algorithmus zum Programm 1-15

16 Folgerung In der Informatik hat man es mit einer Vielzahl von künstlichen Sprachen zu tun. Sie alle beschreiben Sachverhalte in einem relativ kleinen Kontext, dafür aber (hoffentlich) präzise, widerspruchsfrei und vollständig. In dieser Vorlesung betrachten wir die Programmiersprache Java. In anderen Veranstaltungen (z. B. Programmieren für Fortgeschrittene, Logik in der Informatik ) lernen Sie weitere Sprach(klass)en kennen. Die theoretische Grundlagen der Programmiersprachen lernen Sie in der Veranstaltung Semantik von Programmiersprachen kennen. 1.1 Vom Algorithmus zum Programm 1-16

17 Algorithmus und Programm: Programmiersprachen 1.1 Vom Algorithmus zum Programm 1.2 Programmiersprachen 1.3 Korrektheit, Komplexität und Entscheidbarkeit 1.4 Software-Grundlagen 1.2 Programmiersprachen 1-17

18 Edsger W. Dijkstra: Entwicklung der Programmiersprachen Jeder Programmierer weiß, dass es nur eine einzig wahre Programmiersprache gibt. Jede Woche eine neue. A. Weinert: Java für Ingenieure, 2001, Seite 7: Die Zahl der Programmiersprachen, die die Informatik in den letzten fünfzig Jahren hervorgebracht hat, ist Legion. Ernst zu nehmende Schätzungen sprechen von mehr als Wenn Weinerts Schätzung zutrifft, sind es 7,7 Programmiersprachen pro Woche! 1.2 Programmiersprachen 1-18

19 .. Entwicklung der Programmiersprachen 2000 C#. Programmiersprachen in der Informatikausbildung 1995 JAVA 1990 SCHEME (standard) Algol C++ OCCAM CSP ADA SMALLTALK80 MODULA 2 SCHEME C PROLOG PASCAL LOGO ALGOL68 SIMULA PL/I BASIC COBOL ALGOL LISP FORTRAN Algol68 Modula-2 Modula-2/Scheme Java/Scheme Java 1.2 Programmiersprachen 1-19

20 Definition von Programmiersprachen Die Lexik einer Programmiersprache bestimmt die textuellen Grundbausteine der Programme. Solche Bausteine sind z. B. Schlüsselwörter, Zeichen und Bezeichner. Sie werden beispielsweise durch Aufzählung oder reguläre Ausdrücke angegeben. Die Syntax einer Programmiersprache beschreibt, wie aus den Grundbausteinen vollständige Programme gebildet werden können. In den meisten Fällen wird die Syntax einer Programmiersprache durch eine kontextfreie Grammatik festgelegt. Die Bedeutung der syntaktisch korrekten Programme ist durch die Semantik der Sprache gegeben. Sie kann beispielsweise mithilfe von Zustandsfolgen (operationelle Semantik) oder durch Funktionen, die den syntaktischen Einheiten zugeordnet sind (denotationale Semantik), definiert werden. Es gibt auch weitere Möglichkeiten. Beispiele: axiomatische Semantik, algebraische Semantik. Die Pragmatik einer Programmiersprache untersucht ihre Anwendbarkeit und Nützlichkeit. Sie gehört nicht zur Definition der Sprache. 1.2 Programmiersprachen 1-20

21 Lexik: Definition von Programmiersprachen: Kleines Beispiel Schlüsselwörter: while, do, od,... Zeichen: +, ;, :=, (, ), {, },... Bezeichner = Buchstabe { Buchstabe, Ziffer } Syntax: <Anweisungsfolge> ::= <Anweisung> ; <Anweisungsfolge> <Anweisung> <Anweisung> ::= <Zuweisung> <While-Anweisung>... <Zuweisung> ::= <Bezeichner> := <arithmetischer Ausdruck> <While-Anweisung> ::= while <logischer Ausdruck> do <Anweisungsfolge> od (Operationelle) Semantik: Eine (partielle) Funktion f, die Zustände auf Zustände abbildet. Ein Beispiel: f(z 0 ) = z Programmiersprachen 1-21

22 Klassifikation der Programmiersprachen Die Programmiersprachen lassen sich grob in drei Klassen einteilen: Maschinensprachen Bits und Bytes, für den menschlichen Leser kaum verständlich Maschinenorientierte Sprachen (Assembler) stellen die Befehle in einem Mnemo-Code dar ADDIC 23, R0 STO R0, #12004 Problemorientierte Sprachen imperative, funktionale, objektorientierte, deduktive Sprachen, Spezialsprachen Ein Computer versteht nur Maschinensprachen! 1.2 Programmiersprachen 1-22

23 Implementierung von Programmiersprachen Compiler übersetzen Quellprogramme aus problemorientierten Sprachen in äquivalente Zielprogramme in Maschinensprachen: cc -o prog prog.c prog input output Interpreter lesen das Programm mit den Eingabedaten ein und führen es aus: scm prog.scm input output Mischverfahren übersetzen das Programm zunächst mit einem Compiler in eine Zwischensprache. Das übersetzte Programm wird anschließend interpretiert: javac prog.java java prog Die Eingabe kann zum Beispiel über die Tastatur oder Dateien erfolgen. Die Ausgabe kann zum Beispiel auf dem Bildschirm oder in Dateien geschehen. 1.2 Programmiersprachen 1-23

24 Implementierung von Programmiersprachen Interpreter müssen das Programm bei jedem Lauf erneut analysieren. Dies bedeutet einen gewissen Effizienzverlust. Typisch, aber nicht zwingend: Compiler: C Interpreter: Scheme Mischverfahren: Java Compiler und Interpreter: Haskell Compiler 1 Compiler 2 Interpreter 1 Interpreter Programmiersprachen 1-24

25 Verarbeitung von Java-Programmen Java Quellprogramm Zuerst wird ein Quellprogramm vom Compiler in Bytecode übersetzt. java javac Java Bytecode java Im zweiten Schritt wird der Bytecode vom Interpreter ausgeführt. Der Bytecode kann als Maschinencode der sogenannten virtuellen Java-Maschine (JVM) angesehen werden. Bytecode ist portabel. VM für Windows VM für Linux Der Compiler ist maschinenunabhängig, der Interpreter muss für jede Plattform neu entwickelt werden. 1.2 Programmiersprachen 1-25

26 Verarbeitung von Java-Programmen Interpretierter Code ist langsamer in der Ausführung als kompilierter Code, selbst wenn dieser als Bytecode vorliegt. Prinzipiell können Java-Programme auch in Maschinensprache übersetzt werden. Dann geht allerdings die Portierbarkeit verloren. Eine Alternativlösung bieten Just-in-Time-Compiler (JIT). Ein JIT ist ein Programm, das den Bytecode einzelner Methoden während der Ausführung in Maschinencode der jeweiligen Plattform übersetzt. So kann die Methode beim nächsten Aufruf deutlich schneller ausgeführt werden. Vorteilhaft ist, dass der Bytecode nicht verändert wird und damit das übersetzte Programm portabel bleibt. 1.2 Programmiersprachen 1-26

27 Implementierung von Programmen Warum muss man wissen, wie Programme umgesetzt werden? Beispiel: Java-Programm: public static void main(string[] args) { int z = 256*256*256* ; System.out.println(z*z); } Ausgabe: 1 Der korrekte Wert ist Warum ist die Ausgabe 1? Kann ein Computer nicht rechnen? 1.2 Programmiersprachen 1-27

28 Paradigmen und Programmiersprachen Einige Programmiersprachen: imperativ: Algol, Algol68, Pascal, Ada, C,... funktional: Lisp, Scheme, ML, Haskell,... prädikativ: Prolog objektorientiert: Smalltalk, Eiffel,... hybrid: Java, C++, C# (imperativ, oo), Scala (imperativ, oo, funktional),... In der Regel lassen sich die Sprachen nicht eindeutig einem bestimmten Paradigma zuordnen. Zum Beispiel gibt es in Scheme Variable und Zuweisungen, d. h. imperative Konzepte. Java ist als imperativ-basierte objektorientierte Programmiersprache (hybrides Paradigma) zu bezeichnen. C++ hingegen besitzt einen vollständigen imperativen Kern, während Smalltalk eine strikt objektorientierte Programmiersprache ist. 1.2 Programmiersprachen 1-28

29 Skriptsprachen Bei Skriptsprachen handelt es sich um übergeordnete Sprachen, um vorhandene Programme oder Prozeduren kontrolliert ablaufen zu lassen. Skriptsprachen haben ihren Ursprung in den Kommandosprachen (Job Control Language, JCL) von Betriebssystemen. Einfache Skriptsprachen sind die Shell-Skripts von Unix. Mächtigere Skriptsprachen sind beispielsweise Perl, PHP, Python oder JavaScript. Skriptsprachen werden in der Regel interpretiert, nicht kompiliert. 1.2 Programmiersprachen 1-29

30 Algorithmus und Programm: Korrektheit, Komplexität und Entscheidbarkeit 1.1 Vom Algorithmus zum Programm 1.2 Programmiersprachen 1.3 Korrektheit, Komplexität und Entscheidbarkeit 1.4 Software-Grundlagen 1.3 Korrektheit, Komplexität und Entscheidbarkeit 1-30

31 Spezifikation, Korrektheit und Verifikation Die Spezifikation beschreibt die Anforderungen an ein Softwaresystem in einer informellen, grafischen und/oder formalen Sprache. Eine Spezifikation sollte vollständig und widerspruchsfrei sein. Ein Softwaresystem, das eine Spezifikation erfüllt, heißt korrekt bezüglich dieser Spezifikation. Man unterscheidet dabei zwischen partieller und totaler Korrektheit. Ein Programm nennt man partiell korrekt, wenn die Spezifikation erfüllt, die Terminierung von Programmläufen aber nicht notwendigerweise gewährleistet ist. Es heißt total korrekt, wenn zusätzlich die Terminierung sichergestellt ist. Ein partiell korrektes Programm liefert also keine falschen Ergebnisse. Unter Verifikation versteht man den mathematischen Beweis der partiellen oder totalen Korrektheit eines Programms. 1.3 Korrektheit, Komplexität und Entscheidbarkeit 1-31

32 Korrektheit des Algorithmus von Euklid Die Spezifikation besteht aus einer Vorbedingung und einer Nachbedingung: Vorbedingung: x > 0 und y 0 Nachbedingung: a = ggt(x, y) Der Algorithmus von Euklid ist für Eingaben x und y mit x > 0 und y 0 partiell und total korrekt. Die Variable a enthält nach Programmende den Wert des größten gemeinsamen Teilers von x und y. Beweis unter Verwendung einer Schleifeninvarianten: s. Übung. Mit der Definition ggt(0, 0) = 0 ist der Algorithmus von Euklid für alle Werte x und y mit x 0 und y 0 partiell und total korrekt. Beweis: s. Übung. 1.3 Korrektheit, Komplexität und Entscheidbarkeit 1-32

33 Test und Validierung Der Test eines Programms ist der probeweise Ablauf des Programms. Damit der Test aussagekräftig ist, müssen die Eingabedaten sorgfältig ausgewählt werden. Ein Test kann nur die Anwesenheit von Fehlern, niemals aber deren Abwesenheit zeigen. Als Validierung bezeichnet man den Test eines Softwaresystems unter Bedingungen, wie sie im späteren Einsatz herrschen werden. Auch wenn das zu erstellende Programm verifiziert wurde, kann auf eine Validierung nicht verzichtet werden, da ein mathematischer Nachweis der Korrektheit beispielsweise nichts über das Laufzeitverhalten des Programms oder die Auslastung von Leitungen aussagt. Verifikation: Validierung: verus wahr, facere machen validus gesund, stark 1.3 Korrektheit, Komplexität und Entscheidbarkeit 1-33

34 Komplexität und O-Notation Unter Komplexität versteht man den Aufwand, den ein Algorithmus/Programm zur Lösung einer Aufgabe benötigt. Damit ist in den meisten Fällen der erforderliche Speicherplatz oder die Anzahl der durchgeführten Rechenschritte gemeint. Mathematisch wird die Komplexität eines Algorithmus/Programms in der Regel durch eine Funktion f : N R beschrieben. Die Größenordnung einer solchen Funktion f wird häufig durch die sogenannte O-Notation nach oben abgeschätzt: O(g) = {f : N R c > 0, n 0 > 0 n n 0. 0 f (n) cg(n)} für eine Funktion g : N R. 1.3 Korrektheit, Komplexität und Entscheidbarkeit 1-34

35 Komplexität des Algorithmus von Euklid Theorem. [G. Lamé, 1845] Es seien x, y und n mit x 0, y 0 und 0 x, y < n gegeben. Dann gilt: Der Algorithmus von Euklid benötigt höchstens ( ) f (n) := log φ 5 n 2 Divisionsschritte, wobei φ = 1 2 ( ) ist. Beispiel: ggt(36,52), n=53, f (n) = 9, = 10 2 = 8. Unter Verwendung der O-Notation erhalten wir: f (n) O(log(n)). Man schreibt es auch in der Form: f (n) = O(log(n)). 1.3 Korrektheit, Komplexität und Entscheidbarkeit 1-35

36 Symbole zur Größenordnung von Funktionen Es sei eine Funktion g : N R gegeben. O(g) = {f : N R c > 0, n 0 > 0 n n 0. 0 f (n) cg(n)} Ω(g) = {f : N R c > 0, n 0 > 0 n n 0. 0 cg(n) f (n)} Θ(g) = {f : N R c 1 > 0, c 2 > 0, n 0 > 0 n n 0. 0 c 1 g(n) f (n) c 2 g(n)} o(g) = {f : N R c > 0 n 0 > 0 n n 0. 0 f (n) < cg(n)} ω(g) = {f : N R c > 0 n 0 > 0 n n 0. 0 cg(n) < f (n)} Diese Zeichen werden Landau-Symbole genannt. Sie beschreiben das asymptotische Verhalten von Funktionen. Eine Übersicht finden Sie auf der Web-Seite dieser Vorlesung. Ausführlich wird dieses Thema in den Veranstaltungen Algorithmen und Datenstrukturen und Diskrete Mathematik behandelt. 1.3 Korrektheit, Komplexität und Entscheidbarkeit 1-36

37 Symbole zur Größenordnung von Funktionen 3000n 2 + 7n + 23 Θ(n 2 ) Man schreibt meistens: 3000n 2 + 7n + 23 = Θ(n 2 ) 3000n 2 + 7n + 23 O(n 2 ) 3000n 2 + 7n + 23 Ω(n 2 ) 23 Θ(1) a n x n a 1 x + a 0 Θ(x n ) Θ(log k (n)) = Θ(log l (n)) 6n log 2 (n) + 8n + 12 Θ(n log(n)) 1.3 Korrektheit, Komplexität und Entscheidbarkeit 1-37

38 Entscheidbarkeit Entscheidbarkeit von Problemen: der es löst? Gibt es zu jedem Problem einen Algorithmus, Immer wieder kommt es vor, dass ein Computerprogramm plötzlich keine Reaktion mehr zeigt ( abstürzt oder sich aufhängt ). Dahinter verbirgt sich häufig ein Algorithmus, der für eine spezielle Eingabe nicht terminiert. Für kommerzielle Software kann das sehr teuer werden. Die Suche nach dem Grund der Nichtterminierung kann sich sehr schwierig gestalten. Daher liegt der Wunsch nahe, einen Algorithmus zu entwickeln, der beliebige Algorithmen auf Terminierung testet. Diese Aufgabenstellung heißt Halteproblem. 1.3 Korrektheit, Komplexität und Entscheidbarkeit 1-38

39 Halteproblem 1 Das Halteproblem ist unentscheidbar. Wir zeigen die Aussage indirekt: Annahme: Es gibt einen Algorithmus HALT(algorithmus a, eingabe e), der für einen Algorithmus a und eine Eingabe e genau dann das Ergebnis true liefert, wenn a bei Eingabe von e terminiert. Der Algorithmus TEST(algorithmus a) sei definiert durch TEST(algorithmus a): while HALT(a,a) {... }. Das heißt, TEST(a) terminiert genau dann nicht, falls a bei Eingabe von a terminiert. 1.3 Korrektheit, Komplexität und Entscheidbarkeit 1-39

40 Zwei Fälle können eintreten: Halteproblem 2 1. Fall: Der Aufruf HALT(TEST, TEST) liefert true. In diesem Fall terminiert nach Definition von HALT der Aufruf TEST(TEST). Hieraus folgt aus der Definition von TEST, dass der Aufruf TEST(TEST) nicht terminiert, ein Widerspruch. 2. Fall: Der Aufruf HALT(TEST, TEST) liefert false. In diesem Fall terminiert nach Definition von HALT der Aufruf TEST(TEST) nicht. Hieraus folgt aus der Definition von TEST, dass der Aufruf TEST(TEST) terminiert, ein Widerspruch. Da in beiden Fällen ein Widerspruch auftritt, kann der Algorithmus HALT nicht existieren. 1.3 Korrektheit, Komplexität und Entscheidbarkeit 1-40

41 Halteproblem 3 Die beiden vorherigen Seiten Halteproblem 1 und Halteproblem 2 wurden dem Schulbuch Peter Hubwieser, Patrick Löffler et al.: Informatik 5 Lehrwerk für Gymnasien. Ernst Klett Verlag, Stuttgart, Leipzig, entnommen. 1.3 Korrektheit, Komplexität und Entscheidbarkeit 1-41

42 Berechenbarkeit 1 Eine Funktion f : A Y heißt berechenbar, wenn es einen Algorithmus A f gibt, der diese Funktion realisiert. Die Quadratfunktion f : N N ist berechenbar, denn es gibt einen Algorithmus, der für jede gegebene natürliche Zahl n das Quadrat n 2 berechnet. Es gibt überabzählbar viele Funktionen f : N N, aber nur abzählbar viele Algorithmen. Das heißt, fast keine Funktion ist berechenbar. Wir werden den Satz von Rice kennenlernen. 1.3 Korrektheit, Komplexität und Entscheidbarkeit 1-42

43 Berechenbarkeit 2 Mithilfe des Berechenbarkeitsbegriffs lässt sich die Entscheidbarkeit formal definieren: Eine Menge M X heißt entscheidbar relativ zu X, wenn die charakteristische Funktion { 1, x M, χ M (x) = 0, x X \ M, berechenbar ist. Formulieren Sie das Halteproblem als charakteristische Funktion einer geeigneten Menge. Fazit: Es gibt unentscheidbare Probleme und nicht berechenbare Funktionen. Mehr zu diesem Thema lernen Sie in den Modulen Theoretische Informatik. 1.3 Korrektheit, Komplexität und Entscheidbarkeit 1-43

44 Algorithmus und Programm: Software-Grundlagen 1.1 Vom Algorithmus zum Programm 1.2 Programmiersprachen 1.3 Korrektheit, Komplexität und Entscheidbarkeit 1.4 Software-Grundlagen 1.4 Software-Grundlagen 1-44

45 Hardware Für unsere Zwecke reicht das folgende einfache Modell vom Aufbau eines Rechners. Details lernen Sie in den Modulen Technische Informatik, Rechnernetze,... kennen: Zentraleinheit Prozessor Eingabewerk Hauptspeicher Ausgabewerk Massenspeicher Eingabegeräte Ausgabegeräte 1.4 Software-Grundlagen 1-45

46 Software Zur Systemsoftware zählen alle Programme, die für den korrekten Ablauf von Rechnern oder Rechnernetzen erforderlich sind. Die Anwendungssoftware wird zur Lösung von Problemen, die nicht ursächlich mit Rechnern zu tun haben, eingesetzt. Softwarewerkzeuge unterstützen die Erstellung von System- und Anwendungsprogrammen. 1.4 Software-Grundlagen 1-46

47 Systemsoftware Zur Systemsoftware zählen alle Programme, die für den korrekten Ablauf von Rechnern oder Rechnernetzen erforderlich sind: Betriebssysteme und ihre Komponenten Compiler, Interpreter Binder, Lader bzw. Bindelader Programme zur Verwaltung von Geräten Netzsoftware Software-Grundlagen 1-47

48 Anwendungssoftware Die Anwendungssoftware wird zur Lösung von Problemen, die nicht ursächlich mit Rechnern zu tun haben, eingesetzt: Datenbankprogramme Conputeralgebrasysteme Office-Software: Textverarbeitung, Tabellenkalkulation, Präsentation,... -Programme Internetsoftware: Browser,... Mediensoftware: Grafik-, Photo-, Audio-, Videoprogramme, Software-Grundlagen 1-48

49 Softwarewerkzeuge Softwarewerkzeuge unterstützen die Erstellung von System- und Anwendungsprogrammen: Modellbildung Programmierwerkzeuge Versionskontrolle Integrierte Entwicklungsumgebungen Software-Grundlagen 1-49

50 Betriebssysteme Der Begriff Betriebssystem ist eine zusammenfassende Bezeichnung für alle Programme, die die Ausführung der Benutzerprogramme, die Verteilung der Betriebsmittel auf die einzelnen Benutzerprogramme und die Aufrechterhaltung der Betriebsart (z. B. Stapelbetrieb, Dialogbetrieb) steuern und überwachen. Das Betriebssystem bietet seine Dienste dem Benutzer in einer textuellen oder grafischen Oberfläche an. 1.4 Software-Grundlagen 1-50

51 Betriebssysteme Das Betriebssystem kann als eine Erweiterung der Maschine gesehen werden. Der durchschnittliche Programmierer möchte in der Regel beispielsweise nicht die Verwaltung einer Floppy-Disk programmieren, sondern deren Funktionalität als Abstraktion auf hohem Niveau nutzen. In diesem Zusammenhang spricht man auch von einer virtuellen Maschine. Das Betriebssystem arbeitet auch als Ressourcenmanager. Moderne Rechensysteme bestehen aus Prozessoren, Speichern, Uhren, Platten, Terminals, Druckern, Netzwerkschnittstellen und vielen weiteren Komponenten. Das Betriebssystem teilt diese Ressourcen untern den verschiedenen Prozessen auf. Dieser Vorgang kann als Multiplexen in Zeit und Raum beschrieben werden. 1.4 Software-Grundlagen 1-51

52 Wichtige Betriebssysteme UNIX-Derivate BSD-Unix (Berkeley Software Distribution) AT&T, System V Linux (Linus Torvalds) Distributionen für Linux: RedHat, Suse, Debian, Ubuntu, Knoppix,... Betriebssysteme der Fa. Microsoft MS-DOS Windows 3.x/95/98/Me Windows NT, Windows 2000, Windows XP Windows Vista, Windows 7, 8, 9, Software-Grundlagen 1-52

53 Oberflächen von Betriebssystemen Ein heutiges Betriebssystem stellt dem Benutzer die Fähigkeiten des Rechners über eine textuelle Oberfläche (Shell) und/oder über eine grafische Oberfläche (GUI, Graphical User Interface) zur Verfügung. Beispielsweise gibt es für Unix üblicherweise die Shells sh, bash, csh, tcsh, ksh und einige weitere. Für Linux wurden die grafischen Oberflächen KDE und Gnome entwickelt. Die Wahl der jeweiligen Oberfläche bleibt dem Benutzer überlassen. 1.4 Software-Grundlagen 1-53

54 Dateiverwaltung Dateiverwaltungssystem Komponente eines Betriebssystems, die den gesamten Platz auf externen Speichern verwaltet. Zu den Aufgaben gehören die Lokalisierung von Dateien, die Zuweisung von Speicherplatz und die Buchführung über die Verwendung des Speichers. Editor Komponente eines Dateiverwaltungssystems zum Bearbeiten von Texten oder Daten. Verbreitete Editoren unter Unix sind vi, emacs, nedit und gedit. Notepad und Wordpad sind solche für Windows. 1.4 Software-Grundlagen 1-54

55 Programmierwerkzeuge Änderungsverwaltung: diff, patch Versionsverwaltungsprogramme: rcs, cvs, svn Eingabeanalyse: lex, yacc Eingabeverarbeitung: awk Programmgenerierung: make Software-Grundlagen 1-55

56 Programmierumgebungen Programmierumgebungen sind Software-Systeme zur Unterstützung der Programmentwicklung. Typische Bestandteile einer Programmierumgebung sind ein sprachspezifischer Editor (Texteditor), Compiler und/oder Interpreter, Binder, Lader bzw. Bindelader, Test- und Debughilfen, Quelltextformatierungstools, Archivierungswerkzeuge sowie Dokumentationsgeneratoren. 1.4 Software-Grundlagen 1-56

57 Integrierte Entwicklungsumgebungen Eine Programmierumgebung wird auch integrierte Entwicklungsumgebung (IDE) (integrated development environment) genannt. Integrierte Entwicklungsumgebungen für Java sind beispielsweise NetBeans, Eclipse, IntelliJ IDEA, Borland JBuilder und Oracle JDeveloper. Integrierte Entwicklungsumgebungen können ggf. auch für die Arbeit mit mehreren Programmiersprachen geeignet sein. 1.4 Software-Grundlagen 1-57

Algorithmus und Programm: Vom Algorithmus zum Programm

Algorithmus und Programm: Vom Algorithmus zum Programm Algorithmus und Programm: Vom Algorithmus zum Programm 1.1 Vom Algorithmus zum Programm 1.2 Programmiersprachen 1.3 Korrektheit, Komplexität und Entscheidbarkeit 1.4 Software-Grundlagen 1.1 Vom Algorithmus

Mehr

Einführung: Vom Algorithmus zum Programm

Einführung: Vom Algorithmus zum Programm Einführung: Vom Algorithmus zum Programm 1.1 Vom Algorithmus zum Programm 1.2 Programmiersprachen 1.3 Korrektheit, Komplexität und Entscheidbarkeit 1.4 Hard- und Software-Grundlagen 1.1 Vom Algorithmus

Mehr

Semantik von Programmiersprachen

Semantik von Programmiersprachen Semantik von Programmiersprachen 1. Einführung Werner Struckmann Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme Sommersemester 2017 1. Einführung 1.1 Sprachen und

Mehr

Informatik Vorkurs Sommersemester 2015

Informatik Vorkurs Sommersemester 2015 Informatik Vorkurs Sommersemester 2015 Vom Algorithmus zum Programm Werner Struckmann / Marvin Priedigkeit, Stephan Mielke 31. März 10. April 2015 Kann ein Computer rechnen? Ist das Programm korrekt? Wiederholung:

Mehr

Semantik von Programmiersprachen

Semantik von Programmiersprachen Semantik von Programmiersprachen 1. Einführung Werner Struckmann Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme Sommersemester 2013 1. Einführung 1.1 Sprachen und

Mehr

Programmieren für Fortgeschrittene

Programmieren für Fortgeschrittene Programmieren für Fortgeschrittene 1. Einführung Werner Struckmann Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme Wintersemester 2013/2014 1. Einführung 1.1 Sprachen

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Werner Struckmann Wintersemester 2005/06 1. Der Algorithmenbegriff 1.1 Der intuitive Algorithmenbegriff 1.2 Ein Beispiel: Sortieren durch Einfügen 1.3 Programmiersprachen:

Mehr

n 1. Der Begriff Informatik n 2. Syntax und Semantik von Programmiersprachen - 1 -

n 1. Der Begriff Informatik n 2. Syntax und Semantik von Programmiersprachen - 1 - n 1. Der Begriff Informatik n 2. Syntax und Semantik von Programmiersprachen I.2. I.2. Grundlagen von von Programmiersprachen. - 1 - 1. Der Begriff Informatik n "Informatik" = Kunstwort aus Information

Mehr

Programmieren für Fortgeschrittene

Programmieren für Fortgeschrittene Programmieren für Fortgeschrittene 1. Einführung Werner Struckmann Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme Wintersemester 2016/2017 1. Einführung 1.1 Sprachen

Mehr

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 - 1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen I.2. I.2. Grundlagen von von Programmiersprachen. - 1 - 1. Der Begriff Informatik "Informatik" = Kunstwort aus Information und Mathematik

Mehr

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 - 1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen I.2. I.2. Grundlagen von von Programmiersprachen. - 1 - 1. Der Begriff Informatik "Informatik" = Kunstwort aus Information und Mathematik

Mehr

Algorithmus Beispiele: Algorithmen als Programme Sind Programme korrekt? Gibt es Algorithmen? FAZIT

Algorithmus Beispiele: Algorithmen als Programme Sind Programme korrekt? Gibt es Algorithmen? FAZIT Algorithmusbegriff Ein Algorithmus ist eine Berechnungsvorschrift. Die Aufgabe, die der Algorithmus lösen soll, wird durch eine Spezifikation festgelegt. Die Berechnungsvorschrift wird durch einen endlichen

Mehr

III.1 Prinzipien der funktionalen Programmierung - 1 -

III.1 Prinzipien der funktionalen Programmierung - 1 - 1. Prinzipien der funktionalen Programmierung 2. Deklarationen 3. Ausdrücke 4. Muster (Patterns) 5. Typen und Datenstrukturen 6. Funktionale Programmiertechniken III.1 Prinzipien der funktionalen Programmierung

Mehr

1. Grundkonzepte der logischen Programmierung 2. Syntax von Prolog 3. Rechnen in Prolog. IV.1 Grundkonzepte der logischen Programmierung - 1 -

1. Grundkonzepte der logischen Programmierung 2. Syntax von Prolog 3. Rechnen in Prolog. IV.1 Grundkonzepte der logischen Programmierung - 1 - 1. Grundkonzepte der logischen Programmierung 2. Syntax von Prolog 3. Rechnen in Prolog IV.1 Grundkonzepte der logischen Programmierung - 1 - Übersicht Imperative Sprachen Deklarative Sprachen Folge von

Mehr

n 1. Grundkonzepte der logischen Programmierung n 2. Syntax von Prolog n 3. Rechnen in Prolog IV.1 Grundkonzepte der logischen Programmierung - 1 -

n 1. Grundkonzepte der logischen Programmierung n 2. Syntax von Prolog n 3. Rechnen in Prolog IV.1 Grundkonzepte der logischen Programmierung - 1 - n 1. Grundkonzepte der logischen Programmierung n 2. Syntax von Prolog n 3. Rechnen in Prolog IV.1 Grundkonzepte der logischen Programmierung - 1 - Übersicht Imperative Sprachen Deklarative Sprachen l

Mehr

Definitionen/Vorarbeit zum Thema Java

Definitionen/Vorarbeit zum Thema Java Definitionen/Vorarbeit zum Thema Java Programmiersprachen: System von Wörtern und Symbolen, die zur Formulierung von Programmen für die elektronische Datenverarbeitung verwendet werden. Arten: z.b. Javascript

Mehr

Gliederung. n Teil I: Einleitung und Grundbegriffe. n Teil II: Imperative und objektorientierte Programmierung

Gliederung. n Teil I: Einleitung und Grundbegriffe. n Teil II: Imperative und objektorientierte Programmierung Gliederung n Teil I: Einleitung und Grundbegriffe l 1. Organisatorisches l 2. Grundlagen von Programmiersprachen n Teil II: Imperative und objektorientierte Programmierung l 1. Grundelemente der Programmierung

Mehr

Abschnitt 11: Korrektheit von imperativen Programmen

Abschnitt 11: Korrektheit von imperativen Programmen Abschnitt 11: Korrektheit von imperativen Programmen 11. Korrektheit von imperativen Programmen 11.1 11.2Testen der Korrektheit in Java Peer Kröger (LMU München) in die Programmierung WS 16/17 931 / 961

Mehr

Inhalte des Moduls Programmieren 1

Inhalte des Moduls Programmieren 1 Inhalte des Moduls Programmieren 1 Einführung: Algorithmus und Programm, Programmiersprache Erste Schritte in Java Grundlagen der Sprache: Datentypen, Ausdrücke und Anweisungen, imperative Programmierung

Mehr

Inhalt. n Algorithmus. n Euklidscher Algorithmus. n Sortieren. n Programmiersprachen. n Entwicklungsschritte eines Programms.

Inhalt. n Algorithmus. n Euklidscher Algorithmus. n Sortieren. n Programmiersprachen. n Entwicklungsschritte eines Programms. Inhalt Algorithmus Euklidscher Algorithmus Sortieren Programmiersprachen Entwicklungsschritte eines Programms Algorithmen 1 Algorithmus Eindeutige Beschreibung eines allgemeinen Verfahrens unter Verwendung

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Einleitung Gliederung Einführung in die Programmierung Wintersemester 2017/18 Zum Begriff Informatik Zum Begriff Algorithmus Zum Begriff Programmieren Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Einleitung Gliederung Einführung in die Programmierung Wintersemester 08/09 Zum Begriff Informatik Zum Begriff Algorithmus Zum Begriff Programmieren Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering

Mehr

2. JAVA-Programmierung. Informatik II für Verkehrsingenieure

2. JAVA-Programmierung. Informatik II für Verkehrsingenieure 2. JAVA-Programmierung Informatik II für Verkehrsingenieure Problem-Algorithmus-Umsetzung Problemstellung Algorithmus Umsetzung 2 Beispiele für Algorithmen 3 Definitionsversuch Algorithmus Anleitung, wie

Mehr

Kapitel 1: Einleitung. Gliederung. Zum Begriff Informatik Zum Begriff Algorithmus Zum Begriff Programmieren

Kapitel 1: Einleitung. Gliederung. Zum Begriff Informatik Zum Begriff Algorithmus Zum Begriff Programmieren Kapitel 1: Einleitung Wintersemester 2006/07 Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Gliederung Zum Begriff Informatik

Mehr

1. Einführung Programmieren / Algorithmen und Datenstrukturen 1 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

1. Einführung Programmieren / Algorithmen und Datenstrukturen 1 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt 1. Einführung Programmieren / Algorithmen und Datenstrukturen 1 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt 1 Ein Zitat zu Beginn Vor der Wahl, ein theoretischer Physiker oder ein Programmierer

Mehr

Programmiersprache. Emily & rica

Programmiersprache. Emily & rica Programmiersprache Emily & rica inhaltsangabe Programmiersprache Def inition/funktion Arten Gängige Algorithmus/Syntax Compiler, Interpreter Def inition Unterscheidung Vor- und Nachteile Compiler/ Interpreter

Mehr

Einführung in die Programmierung Wintersemester 2016/17

Einführung in die Programmierung Wintersemester 2016/17 Einführung in die Programmierung Wintersemester 2016/17 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund Einleitung Gliederung Zum Begriff Informatik Zum

Mehr

1 Algorithmische Grundlagen

1 Algorithmische Grundlagen 1 Algorithmische Grundlagen Klocke/17.03.2003 1.1 1.1 Begriffsklärung Fragen Begriffsklärungen Abstraktionsebenen für Algorithmen und Datenstrukturen Algorithmus Qualität von Algorithmen Klocke/17.03.2003

Mehr

Paradigmen zur Algorithmenbeschreibung

Paradigmen zur Algorithmenbeschreibung Paradigmen zur Algorithmenbeschreibung In einem objektorientierten Algorithmus werden Datenstrukturen und Methoden zu einer Klasse zusammengefasst. Von jeder Klasse können Objekte gemäß der Datenstruktur

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens aw@awilkens.com Überblick Grundlagen Definitionen Eigene Entwicklungen Datenstrukturen Elementare Datentypen Abstrakte Datentypen Elementare

Mehr

Vorkurs Informatik WiSe 16/17

Vorkurs Informatik WiSe 16/17 Java Einführung Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe, 04.10.2016 Technische Universität Braunschweig, IPS Überblick Organisatorisches Hello! 04.10.2016 Dr. Werner Struckmann / Stephan Mielke,

Mehr

Angewandte Mathematik am Rechner 1

Angewandte Mathematik am Rechner 1 Angewandte Mathematik am Rechner 1 SOMMERSEMESTER 2017 Kapitel 3 [Bildquellen: Wikipedia User David Madore, Inductiveload ] Grundlagen 2: Funktionen, Berechenbarkeit und emergente Komplexität Michael Wand

Mehr

Es gibt keinen Algorithmus zum Schreiben eines Programms bzw. Algorithmus.

Es gibt keinen Algorithmus zum Schreiben eines Programms bzw. Algorithmus. 1 Einführung Programmiersprachen: Ermöglichen formale Beschreibung von Problemlösungsverfahren, die auf einem Computer oder Computersystemen ausführbar sind. Bilden die Basis zur Entwicklung von Software

Mehr

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 1. Einführung und Grundbegriffe

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 1. Einführung und Grundbegriffe 1 Kapitel 1 2 Ziele Begriffsbildungen: Informatik, Algorithmus, Programm, Compiler, Einordnung von Java Ein einfaches Java-Programm erstellen, übersetzen und ausführen Java-Programme dokumentieren 3 Informatik

Mehr

Institut für Programmierung und Reaktive Systeme. Java 1. Markus Reschke

Institut für Programmierung und Reaktive Systeme. Java 1. Markus Reschke Java 1 Markus Reschke 06.10.2014 Überblick Einführung in die Programmierung zur Vereinfachung des Einstiegs ins Studium Erstellung von ausführbaren Programmen für den Computer Denk- und Vorgehensweisen

Mehr

{P} S {Q} {P} S {Q} {P} S {Q} Inhalt. Hoare-Kalkül. Hoare-Kalkül. Hoare-Tripel. Hoare-Tripel. Hoare-Tripel

{P} S {Q} {P} S {Q} {P} S {Q} Inhalt. Hoare-Kalkül. Hoare-Kalkül. Hoare-Tripel. Hoare-Tripel. Hoare-Tripel Inhalt Hoare-Kalkül Formale Verifizierung Hoare-Kalkül while-sprache Terminierung Partielle / totale Korrektheit 4.0 Hoare-Kalkül entwickelt von C.A.R. (Tony) Hoare (britischer Informatiker), 1969 formales

Mehr

Sprachen und Programmiersprachen

Sprachen und Programmiersprachen Sprachen und Programmiersprachen Natürliche Sprachen versus Programmiersprachen / Spezifikationssprachen Syntax legt die grammatikalische Korrektheit fest. Semantik legt die Bedeutung von syntaktisch korrekten

Mehr

Einführung in die Informatik I (autip)

Einführung in die Informatik I (autip) Einführung in die Informatik I (autip) Dr. Stefan Lewandowski Fakultät 5: Informatik, Elektrotechnik und Informationstechnik Abteilung Formale Konzepte Universität Stuttgart 24. Oktober 2007 Was Sie bis

Mehr

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff Programmieren in C Eine Einführung in die Programmiersprache C Prof. Dr. Nikolaus Wulff Agenda Elementare Einführung C Programm Syntax Datentypen, Variablen und Konstanten Operatoren und Ausdrücke Kontrollstrukturen

Mehr

Vorkurs Informatik WiSe 17/18

Vorkurs Informatik WiSe 17/18 Java Einführung Dr. Werner Struckmann / Stephan Mielke, Nicole Naczk, 04.10.2017 Technische Universität Braunschweig, IPS Überblick Organisatorisches Arbeitsablauf Hello World 04.10.2017 Dr. Werner Struckmann

Mehr

1 Programmiersprachen 1.1 1

1 Programmiersprachen 1.1 1 1 Programmiersprachen 1.1 1 Meilensteine imperativer Programmiersprachen (teilweise objektorientiert) Fortran 1960 Cobol Algol 60 PL/I Algol W Simula 67 Algol 68 1970 Pascal C Smalltalk Modula 1980 Ada

Mehr

Programme erstellen in Java

Programme erstellen in Java Programmieren mit Java Modul 0 Programme erstellen in Java Theorieteil Inhaltsverzeichnis 1 Modulübersicht 3 2 Schreiben von Computerprogrammen 3 2.1 Computerprogramme bestehen aus Daten und Instruktionen.......

Mehr

Grundlagen der Programmierung (Vorlesung 24)

Grundlagen der Programmierung (Vorlesung 24) Grundlagen der Programmierung (Vorlesung 24) Ralf Möller, FH-Wedel Vorige Vorlesung Anwendung im Bereich Compilerbau Inhalt dieser Vorlesung Turing-Maschinen Berechenbarkeitstheorie, Halteproblem Lernziele

Mehr

Wiederholung. Organisatorisches. VL-11: LOOP und WHILE Programme I. (Berechenbarkeit und Komplexität, WS 2017) Gerhard Woeginger

Wiederholung. Organisatorisches. VL-11: LOOP und WHILE Programme I. (Berechenbarkeit und Komplexität, WS 2017) Gerhard Woeginger Organisatorisches VL-11: LOOP und WHILE Programme I (Berechenbarkeit und Komplexität, WS 2017) Gerhard Woeginger Nächste Vorlesung: Mittwoch, November 29, 14:15 15:45 Uhr, Roter Hörsaal Webseite: http://algo.rwth-aachen.de/lehre/ws1718/buk.php

Mehr

Programmiersprachen. Organisation und Einführung. Berthold Hoffmann. Studiengang Informatik Universität Bremen

Programmiersprachen. Organisation und Einführung. Berthold Hoffmann. Studiengang Informatik Universität Bremen Organisation und Einführung Studiengang Informatik Universität Bremen Sommersemester 2010 (Vorlesung am Montag, der 12. April 2010) (Montag, der 12. April 2008) 1 Vorstellung 2 Organisation 3 Einführung

Mehr

EIGENSCHAFTEN VON SPRACHEN

EIGENSCHAFTEN VON SPRACHEN Vorlesung und Übung Universität Paderborn Wintersemester 2016/2017 Dr. Peter Pfahler EIGENSCHAFTEN VON SPRACHEN EWS, WS 2016/17, Pfahler C-1 Einführung Sprachen in der Informatik werden für bestimmte Zwecke

Mehr

Funktionale Programmiersprachen

Funktionale Programmiersprachen Funktionale Programmiersprachen An den Beispielen Haskell und Erlang Übersicht Programmiersprachen λ-kalkül Syntax, Definitionen Besonderheiten von funktionalen Programmiersprache, bzw. Haskell Objektorientierte

Mehr

VL-11: LOOP und WHILE Programme I. (Berechenbarkeit und Komplexität, WS 2017) Gerhard Woeginger

VL-11: LOOP und WHILE Programme I. (Berechenbarkeit und Komplexität, WS 2017) Gerhard Woeginger VL-11: LOOP und WHILE Programme I (Berechenbarkeit und Komplexität, WS 2017) Gerhard Woeginger WS 2017, RWTH BuK/WS 2017 VL-11: LOOP und WHILE Programme I 1/46 Organisatorisches Nächste Vorlesung: Mittwoch,

Mehr

Einführung in die Informatik Turing Machines

Einführung in die Informatik Turing Machines Einführung in die Informatik Turing Machines Eine abstrakte Maschine zur Präzisierung des Algorithmenbegriffs Wolfram Burgard Cyrill Stachniss 1/14 Motivation und Einleitung Bisher haben wir verschiedene

Mehr

Was kann ein Computer ausrechnen? Vorkurs Sommersemester 2018 Werner Struckmann 23. März 2018

Was kann ein Computer ausrechnen? Vorkurs Sommersemester 2018 Werner Struckmann 23. März 2018 Was kann ein Computer ausrechnen? Vorkurs Sommersemester 2018 Werner Struckmann 23. März 2018 Was kann ein Rechner ausrechnen? Was sehen wir uns jetzt an? Der intuitive Algorithmus Vom Algorithmus zum

Mehr

Unentscheidbarkeitssätze der Logik

Unentscheidbarkeitssätze der Logik Unentscheidbarkeitssätze der Logik Elmar Eder () Unentscheidbarkeitssätze der Logik 1 / 30 Die Zahlentheorie ist nicht formalisierbar Satz (Kurt Gödel) Zu jedem korrekten formalen System der Zahlentheorie

Mehr

2. Programmierung in C

2. Programmierung in C 2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten, Operatoren und Ausdrücke Anweisungen und Kontrollstrukturen (Steuerfluss)

Mehr

Übersicht Formale Semantik. Übersicht Axiomatische Semantik. Inhaltsübersicht HPS WS 2003/04. Vorlesung Höhere Programmiersprachen,

Übersicht Formale Semantik. Übersicht Axiomatische Semantik. Inhaltsübersicht HPS WS 2003/04. Vorlesung Höhere Programmiersprachen, Vorlesung Höhere Programmiersprachen, WS 2003/04 Teil 2: Formale Semantik Axiomatische Semantik Inhaltsübersicht - Grundlagen (1,2) - Konzepte imperativer Programmiersprachen (2,3) - Deklarative Programmiersprachen

Mehr

Einführung in die Informatik Turing Machines

Einführung in die Informatik Turing Machines Einführung in die Informatik Turing Machines Eine abstrakte Maschine zur Präzisierung des Algorithmenbegriffs Wolfram Burgard 1 Motivation und Einleitung Bisher haben wir verschiedene Programmiersprachen

Mehr

2. Programmierung in C

2. Programmierung in C 2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten, Operatoren und Ausdrücke Anweisungen und Kontrollstrukturen (Steuerfluss)

Mehr

n 1. Erste Schritte n 2. Einfache Datentypen n 3. Anweisungen und Kontrollstrukturen n 4. Verifikation n 5. Reihungen (Arrays)

n 1. Erste Schritte n 2. Einfache Datentypen n 3. Anweisungen und Kontrollstrukturen n 4. Verifikation n 5. Reihungen (Arrays) n 1. Erste Schritte n 2. Einfache Datentypen n 3. Anweisungen und Kontrollstrukturen n 4. Verifikation n 5. Reihungen (Arrays) II.1.4. Verifikation - 1 - 4. Verifikation n Spezifikation: Angabe, was ein

Mehr

Praktische Informatik I

Praktische Informatik I Praktische Informatik I WS 2005/2005 Prof. Dr. Wolfgang Effelsberg Lehrstuhl für Praktische Informatik IV Universität Mannheim 1. Einführung 1-1 Inhaltsverzeichnis (1) 1. Einführung 1.1 Was ist Informatik?

Mehr

Semantik von Programmiersprachen

Semantik von Programmiersprachen Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 14. Juli 2017 Semantik von Programmiersprachen Übersicht Art der Veranstaltung: Vorlesung mit

Mehr

Algorithmen versus Programmiersprachen

Algorithmen versus Programmiersprachen Coma I Einleitung Computer und Algorithmen Programmiersprachen Algorithmen versus Programmiersprachen Literaturhinweise Computer und Algorithmen Programmiersprachen Algorithmen versus Programmiersprachen

Mehr

Vorlesung Programmieren

Vorlesung Programmieren Vorlesung Programmieren Programmierparadigmen Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer Programmiersprachen-Paradigmen Eine Programmiersprache

Mehr

Vorlesung Programmieren. Programmiersprachen-Paradigmen. Programmierparadigmen. Eine Programmiersprache dient dem Aufschreiben von Algorithmen

Vorlesung Programmieren. Programmiersprachen-Paradigmen. Programmierparadigmen. Eine Programmiersprache dient dem Aufschreiben von Algorithmen Vorlesung Programmieren Programmierparadigmen Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer Programmiersprachen-Paradigmen Eine Programmiersprache

Mehr

Was bisher geschah Modellierung von Daten durch Mengen Beziehungen (Zusammenhänge und Eigenschaften) durch Relationen, Graphen und Funktionen

Was bisher geschah Modellierung von Daten durch Mengen Beziehungen (Zusammenhänge und Eigenschaften) durch Relationen, Graphen und Funktionen Was bisher geschah Modellierung von Daten durch Mengen Beziehungen (Zusammenhänge und Eigenschaften) durch Relationen, Graphen und Funktionen Anforderungen durch Logiken Modellierung zusammenhängender

Mehr

EIDI 1 Einführung in die Informatik 1. PGdP Praktikum Grundlagen der Programmierung. Harald Räcke 2/217

EIDI 1 Einführung in die Informatik 1. PGdP Praktikum Grundlagen der Programmierung. Harald Räcke 2/217 EIDI 1 Einführung in die Informatik 1 PGdP Praktikum Grundlagen der Programmierung Harald Räcke 2/217 Wie löst man Probleme mithilfe von Computern? 0 Harald Räcke 3/217 Inhalte: EIDI 1 1. Was ist das Problem?

Mehr

Werkzeuge zur Programmentwicklung

Werkzeuge zur Programmentwicklung Werkzeuge zur Programmentwicklung B-15 Bibliothek Modulschnittstellen vorübersetzte Module Eingabe Editor Übersetzer (Compiler) Binder (Linker) Rechner mit Systemsoftware Quellmodul (Source) Zielmodul

Mehr

1 Funktionale vs. Imperative Programmierung

1 Funktionale vs. Imperative Programmierung 1 Funktionale vs. Imperative Programmierung 1.1 Einführung Programme einer funktionalen Programmiersprache (functional programming language, FPL) bestehen ausschließlich aus Funktionsdefinitionen und Funktionsaufrufen.

Mehr

2. Programmierung in C

2. Programmierung in C 2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten, Operatoren und Ausdrücke Anweisungen und Kontrollstrukturen (Steuerfluss)

Mehr

Computergrundlagen Turingmaschinen und Programmierung

Computergrundlagen Turingmaschinen und Programmierung Computergrundlagen Turingmaschinen und Programmierung Jens Smiatek und Axel Arnold Institut für Computerphysik Universität Stuttgart Wintersemester 2016/17 Was ist ein Computer? Ein Computer (Rechner oder

Mehr

! 1. Erste Schritte! 2. Einfache Datentypen! 3. Anweisungen und Kontrollstrukturen! 4. Verifikation! 5. Reihungen (Arrays) II.1.4. Verifikation - 1 -

! 1. Erste Schritte! 2. Einfache Datentypen! 3. Anweisungen und Kontrollstrukturen! 4. Verifikation! 5. Reihungen (Arrays) II.1.4. Verifikation - 1 - ! 1. Erste Schritte! 2. Einfache Datentypen! 3. Anweisungen und Kontrollstrukturen! 4. Verifikation! 5. Reihungen (Arrays) II.1.4. Verifikation - 1 - 4. Verifikation! Spezifikation: Angabe, was ein Programm

Mehr

DUDEN. Basiswissen Schule. Informatik Abitur. PAETEC Verlag für Bildungsmedien Berlin : Dudenverlag Mannheim Leipzig Wien Zürich

DUDEN. Basiswissen Schule. Informatik Abitur. PAETEC Verlag für Bildungsmedien Berlin : Dudenverlag Mannheim Leipzig Wien Zürich DUDEN Basiswissen Schule Informatik Abitur PAETEC Verlag für Bildungsmedien Berlin : Dudenverlag Mannheim Leipzig Wien Zürich vv 3 j Inhaltsverzeichnis 1 Grundbegriffe 7 1.1 Die Informatik als junge Wissenschaft

Mehr

Wir suchen Antworten auf die folgenden Fragen: Was ist Berechenbarkeit? Wie kann man das intuitiv Berechenbare formal fassen?

Wir suchen Antworten auf die folgenden Fragen: Was ist Berechenbarkeit? Wie kann man das intuitiv Berechenbare formal fassen? Einige Fragen Ziel: Wir suchen Antworten auf die folgenden Fragen: Wie kann man das intuitiv Berechenbare formal fassen? Was ist ein Algorithmus? Welche Indizien hat man dafür, dass ein formaler Algorithmenbegriff

Mehr

Einführung in die Informatik

Einführung in die Informatik Einführung in die Informatik Klaus Knopper 09.11.2004 Inhaltsverzeichnis Programmiersprachen Eine Programmiersprache ist eine formale Sprache zur Darstellung (Notation) von Computerprogrammen. Sie vermittelt

Mehr

Einführung in Betriebssysteme

Einführung in Betriebssysteme Arbeitsblatt Einführung in Lehrkraft: Name Vorname Kurs: 0 Einleitung Ohne seine Software, ist ein Computer nichts anderes als ein Haufen Metall. Grob lässt sich Software in zwei Kategorien einteilen:

Mehr

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Definition Algorithmus. Wie beschreibt man Algorithmen?

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Definition Algorithmus. Wie beschreibt man Algorithmen? Programm heute Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 2015 1 Einführung Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München 2 Grundlagen von Algorithmen

Mehr

Programmieren lernen mit Perl

Programmieren lernen mit Perl Xpert.press Programmieren lernen mit Perl Bearbeitet von Joachim Ziegler 1. Auflage 2002. Buch. XIV, 400 S. Hardcover ISBN 978 3 540 42685 1 Format (B x L): 15,5 x 23,5 cm Gewicht: 783 g Weitere Fachgebiete

Mehr

Algorithmen und Datenstrukturen (für ET/IT)

Algorithmen und Datenstrukturen (für ET/IT) Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 2016 Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München Programm heute 1 Einführung 2 Grundlagen von Algorithmen

Mehr

6.4 Entscheidbarkeit. nein sein müssen, ist klar. THEO 6.4 Entscheidbarkeit 205/307 c Ernst W. Mayr

6.4 Entscheidbarkeit. nein sein müssen, ist klar. THEO 6.4 Entscheidbarkeit 205/307 c Ernst W. Mayr 6.4 Entscheidbarkeit Wortproblem Leerheit Äquivalenz Schnittproblem Typ 3 ja ja ja ja DCFL ja ja ja nein (*) Typ 2 ja ja nein (*) nein Typ 1 ja nein (*) nein nein Typ 0 nein (*) nein nein nein (*) Diese

Mehr

Algorithmus. Was ist ein Algorithmus? Ibn Musa Al-Chwarismi persischer Mathematikers 9. Jahrhundert Buch: Regeln der Wiedereinsetzung und Reduktion.

Algorithmus. Was ist ein Algorithmus? Ibn Musa Al-Chwarismi persischer Mathematikers 9. Jahrhundert Buch: Regeln der Wiedereinsetzung und Reduktion. Algorithmus Was ist ein Algorithmus? Ibn Musa Al-Chwarismi persischer Mathematikers 9. Jahrhundert Buch: Regeln der Wiedereinsetzung und Reduktion. Hier einige informelle Erklärungen zum Algorithmus P

Mehr

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays) II.1.4. Verifikation - 1 -

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays) II.1.4. Verifikation - 1 - 1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays) II.1.4. Verifikation - 1 - 4. Verifikation Spezifikation: Angabe, was ein Programm tun

Mehr

Vorlesungsinhalte. Programmiersprachen: Haskell 98: funktional, höherer Ordnung, polymorph typisiert, Interpreter

Vorlesungsinhalte. Programmiersprachen: Haskell 98:   funktional, höherer Ordnung, polymorph typisiert, Interpreter Vorlesungsinhalte Programmiersprachen: Haskell 98: www.haskell.org funktional, höherer Ordnung, polymorph typisiert, Interpreter Python 2.3: www.python.org imperativ, objektorientiert, schwach typisiert,

Mehr

7. Programmierungs- Phase Software Engineering (FB EIT) Wintersemester 2007 / 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik

7. Programmierungs- Phase Software Engineering (FB EIT) Wintersemester 2007 / 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik 7. Programmierungs- Phase Software Engineering (FB EIT) Wintersemester 2007 / 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik 1 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik:

Mehr

10. Programmierungs-Phase: Objektorientierung Software Engineering

10. Programmierungs-Phase: Objektorientierung Software Engineering 10. Programmierungs-Phase: Objektorientierung Software Engineering Fachhochschule Darmstadt Haardtring 100 D-64295 Darmstadt Prof. Dr. Bernhard Humm FH Darmstadt, 15. Dezember 2005 Einordnung in den Kontext

Mehr

Ausblick: Entwurfsmuster (Design Pattern) 12.1 Entwurfsmuster (Design Pattern) 12.2 Programmierparadigmen und -sprachen und Veranstaltungen

Ausblick: Entwurfsmuster (Design Pattern) 12.1 Entwurfsmuster (Design Pattern) 12.2 Programmierparadigmen und -sprachen und Veranstaltungen Ausblick: Entwurfsmuster (Design Pattern) 12.1 Entwurfsmuster (Design Pattern) 12.2 Programmierparadigmen und -sprachen und Veranstaltungen 12.1 Entwurfsmuster (Design Pattern) 12-1 Entwurfsmuster (Design

Mehr

Übungen zur Vorlesung Wissenschaftliches Rechnen I

Übungen zur Vorlesung Wissenschaftliches Rechnen I Übungen zur Vorlesung Wissenschaftliches Rechnen I Nicolas Gauger, René Lamour, Hella Rabus Wintersemester 2007/2008 Programmierung - Einführung Programmierung - Einführung Berechnung einer Formel y =

Mehr

Grundlagen der Modellierung und Programmierung, Übung

Grundlagen der Modellierung und Programmierung, Übung Grundlagen der Modellierung und Programmierung Übung Prof. Wolfram Amme LS Softwaretechnik Prof. Klaus Küspert LS Datenbanksysteme Prof. Birgitta König-Ries LS Verteilte Systeme Prof. Dr. Wilhelm Rossak

Mehr

Grundlagen der Informatik 0

Grundlagen der Informatik 0 Technische Universität Darmstadt 01.07.2013 Grundlagen der Informatik 0 Vorlesung 0 Java ist eine Programmiersprache Ilkay Baytekin Douglas Crockford http://media.smashingmagazine.com/wp-content/uploads/2012/04/doug-crockford-image.jpg

Mehr

Paradigmen zur Algorithmenbeschreibung

Paradigmen zur Algorithmenbeschreibung Paradigmen zur Algorithmenbeschreibung In einem objektorientierten Algorithmus werden Datenstrukturen und Methoden zu einer Klasse zusammengefasst. Von jeder Klasse können Objekte gemäß der Datenstruktur

Mehr

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays) II.1.4. Verifikation - 1 -

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays) II.1.4. Verifikation - 1 - 1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays) II.1.4. Verifikation - 1 - 4. Verifikation Spezifikation: Angabe, was ein Programm tun

Mehr

Programmierkurs II. Prof. Dr. Wolfgang Effelsberg. Universität Mannheim. Sommersemester Wolfgang Effelsberg Programmiersprachen

Programmierkurs II. Prof. Dr. Wolfgang Effelsberg. Universität Mannheim. Sommersemester Wolfgang Effelsberg Programmiersprachen Prof. Dr. Wolfgang Effelsberg Universität Mannheim Sommersemester 2005 1-1 Inhalt (1) Teil I: Die Programmiersprache C 2. Datentypen und Deklarationen 3. Operatoren und Ausdrücke 4. Ablaufsteuerung (Kontrollstrukturen)

Mehr

Programmierkurs II. Prof. Dr. Wolfgang Effelsberg. Universität Mannheim. Sommersemester Wolfgang Effelsberg Programmiersprachen

Programmierkurs II. Prof. Dr. Wolfgang Effelsberg. Universität Mannheim. Sommersemester Wolfgang Effelsberg Programmiersprachen Prof. Dr. Wolfgang Effelsberg Universität Mannheim Sommersemester 2005 1-1 Inhalt (1) Teil I: Die Programmiersprache C 2. Datentypen und Deklarationen 3. Operatoren und Ausdrücke 4. Ablaufsteuerung (Kontrollstrukturen)

Mehr

Praktische Informatik 1

Praktische Informatik 1 Praktische Informatik 1 Imperative Programmierung und Objektorientierung Karsten Hölscher und Jan Peleska Wintersemester 2011/2012 Session 2 Programmierung Begriffe C/C++ Compiler: übersetzt Quellcode

Mehr

Überblick. 1 Vorbemerkungen. 2 Algorithmen. 3 Eigenschaften von Algorithmen. 4 Historischer Überblick. Einführung

Überblick. 1 Vorbemerkungen. 2 Algorithmen. 3 Eigenschaften von Algorithmen. 4 Historischer Überblick. Einführung Teil I Einführung Überblick 1 Vorbemerkungen 2 Algorithmen 3 4 Historischer Überblick Prof. G. Stumme Algorithmen & Datenstrukturen Sommersemester 2009 1 1 Vorbemerkungen Was ist Informatik? Informatik

Mehr

Programmierkurs für Chemiker in Fortran Sommersemester 2013

Programmierkurs für Chemiker in Fortran Sommersemester 2013 Programmierkurs für Chemiker in Fortran Sommersemester 2013 Roland Mitric Lehrstuhl für theoretische Chemie Institut für theoretische und physikalische Chemie Emil-Fischer-Str. 42 / Raum 01.008 roland.mitric@uni-wuerzburg.de

Mehr

1. Einführung Einführung in die Programmierung (fbw) Sommersemester 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, fbi

1. Einführung Einführung in die Programmierung (fbw) Sommersemester 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, fbi 1. Einführung Einführung in die Programmierung (fbw) Sommersemester 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, fbi 1 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Einführung in

Mehr