Überblick GRUNDKURS INFORMATIK ODER WIE DENKEN INFORMATIKER? I EINFÜHRUNG, GESCHICHTE, PROGRAMMIEREN 1. Organisatorisches 2. Themen und Ziele der Vorlesung 3. Übungen 4. Wb Web 5. Literatur 6. Informatik, Geschichte 7. Programmieren, Programmiersprachen 8. Processing Marcel Götze Organisatorisches Marcel Götze Dekanat FGSE Email: marcel.goetze@ovgu.de Büro: Gebäude 51/Raum 201 Tel.: (0391) 67-16491 Fax: (0391) 67-16541 Tutorien/Übung Mittwoch 9.00-11.00Uhr Raum 202, Gebäude 51 Übungen im Netz, ca. eine Woche vorher http://www.unimagdeburg.de/fgse/dekanat/lehre/wiki/doku.php/lehre/wis e2009/grundkurs_informatik/home Ziele der Vorlesung Die Sprache der Informatik zu sprechen. Zu lernen wie ein Informatiker zu denken. if(a<b) ist objektbasiert { und erlaubt die Umsetzung print( fertig ); rekursiver Algorithmen ohne } die Verwendung else typisierter Variablen. Themen der Vorlesung - Grundlagen Informationsdarstellung: Zahlensysteme Programme/Programmieren Algorithmen Variablen, Ausdrücke, Anweisungen Funktionen Verzweigungen Datentypen Datenstrukturen 1
Literatur Wiki H.-P. Gumm, M. Sommer: Einführung in die Informatik, Oldenbourg, 2004 R. Sedgewick: Algorithmen in Java, Pearson 2003 G. Saake, K. U. Sattler: Algorithmen und Datenstrukturen, dpunkt-verlag, 2004 Folien im Web: http://www.unimagdeburg.de/fgse/dekanat/lehre/wiki/doku.php/le hre/wise2009/grundkurs_informatik/home Wiki ist zum Mitmachen gedacht Kommunikationsplattform über die Lehre Austausch über Themen, Literatur Diskussion Terminankündigungen, -absprachen, etc. Rückmeldungen über die Lehre, Themen, Probleme, Zusammenarbeit an einem Problem Erarbeiten und Klären von Fragen Wikis machen Spass! Informatik Kunstwort aus den 60ern Informatik = Information + Technik oder Informatik = Information + Mathematik beabsichtigt: Gegensatz zur amerikanischen Computer Science: nicht nur auf Computer beschränkt Theoretische / Praktische / Angewandte / Technische Informatik; Bindestrich-Informatiken Informatik hat zentral zu tun mit systematischer Verarbeitung von Informationen Maschinen, die diese Verarbeitung automatisch leisten (=Computer) Informatik Algorithmische Verarbeitung von Information Methoden Werkzeuge Anwendungen Computertechnik Entwurf von Algorithmen Theorie der Algorithmen Anwendungen Informatik Technische Informatik: Erforschung, Entwurf und Untersuchung von Computersystemen Praktische Informatik: Effiziente Algorithmen, komplexe Probleme Theoretische Informatik: theoretische Grundlagen der algorithmischen Informationsverarbeitung. Angewandte Informatik: Anwendungen von Wirtschaft bis Mathematik 12 Geschichte I Rechenmaschinen Adam Riese, 1492-1559 1550, Buch über Rechenarten mit dezimalen Zahlen John Napier, 1550-1617 1614, Logarithmen (Multiplikation durch Addition) 1617, Rechenstäbe zur Multiplikation Wilhelm Schickard, 1592-1635 1623, Maschine für alle vier Grundrechenarten Blaise Pascal, 1632-1662 1642, Additionsmaschine für sechsstellige Zahlen Gottfried Wilhelm Leibnitz, 1646-1716 1674, Maschine für alle vier Grundrechenarten, Dualsystem 2
13 Geschichte II Algorithmen Rechenvorschriften existieren seit über 2000 Jahren (z.b. ggt, ca. 300 v.chr.) Programmsteuerung Automatenbauer (seit 14. Jh.) Ada Lovelace 1815-1852, Charles Babbage, 1792-1871 Softwaretheorie, Lochkarten als Programmspeicher, Zahnradtechnik Herman Hollerith, 1860-1929 Lochkarten als Datenspeicher, elektromechanische Auswertung (Volkszählung, 1890) 14 Geschichte III http://de.wikipedia.org/wiki/zuse_z3 Z3, Konrad Zuse 1941, erster betriebsfähiger, programmgesteuerter, mit 2500 Relais (Schaltungen) ausgestatteter Rechner Erster Rechner mit Binärsystem 1943 bei Bombenangriff zerstört 15 Geschichte IV 16 Geschichte V Colossus, Alan Turing 1943, Rechenmaschine zur Dechiffrierung verschlüsselter deutscher Funksprüche ENIAC, Eckert & Mauchly 1946, erster amerikanischer elektronischer Rechner (18000 Röhren) http://www.computer50.org/mark1/contemporary.html#colossusintro http://www-groups.dcs.st-and.ac.uk/~history/ Mathematicians/Eckert_John.html 17 Geschichte VI Anwendung (ca. 1940-1946): Rechenmaschine für numerische Operationen Militärische Problemstellungen (Flugbahnberechnungen, Entschlüsselung, ) Jh John von Neumann (1903-1957) 1957) http://ei.cs.vt.edu/~history/vonneumann.html Architektur für programmierbaren Rechner Entwicklung des ersten Rechners mit gespeichertem Programm (EDSAC) (programmiert in Binär!) 18 Geschichte VII Groß rechner 1953, IBM 701, erste EDV von IBM (Nachfolger hat 1958 den ersten FORTRAN Compiler) 1960, DEC PDP-1, erster Computer mit Bildschirm 1964, IBM 360, erster Computer mit integrierten Schaltkreisen 1970/71, VM 370, erster IBM Computer mit interaktivem time-sharing und Betriebssystem für virtuellem Speicher 3
19 Geschichte VIII 20 Geschichte IX http://www.gonthier.ch/informatique/ historiqueweb.html Intel 4004 Ted Hoff et al. 1971, erster Mikroprozessor 4-bit-Prozessor, 60 khz (Pioneer I + II Sonden) Apple II 1977, erster erfolgreicher PC (neben Commodore), 16-bit- Prozessor, 16 kb PM-Magazin, 12/1985 (von: http://if-portal.fh-landshut.de/fbifneu/beginner/gfx/pm12_85.gif) http://apple2history.org/history/ah03.html 21 Geschichte X Erste Programmiersprachen Assembler, um 1952 FORTRAN (FORmula TRANslator), 1953/4 COBOL (Common Business Oriented Language, 1960 Wichtige Entwicklungen PASCAL, strukturierte Programmierung SIMULA67, erste objektorientierte Programmiersprache C, erste höhere Programmiersprache zur Programmierung von Betriebssystemen C++, objektorientierte Sprache, abwärtskompatibel zu C JAVA, plattformunabhängige, objektorientierte Programmiersprache Programmieren Programmieren bedeutet Problemlösen Probleme formulieren Probleme in Teilprobleme unterteilen Lösungen suchen In einer Programmiersprache umsetzen Programmiersprache Java Processing als Programmierumgebung http://processing.org http:// http://www.bernd-leitenberger.de/programmiersprachen-geschichte.shtml Programm Folge von Anweisungen Grundlegende Funktionen in jeder Programmiersprache: Ein und Ausgabe Berechnungen Bedingte Ausführung Wiederholung Programmiersprachen Allgemein vertraut: natürliche Sprachen nicht von Menschen geschaffen Formale Sprachen: von Menschen entworfen Beispiele: Mathematik, Chemie, Programmiersprachen Gemeinsamkeiten: Regeln, Syntax, Semantik Unterschiede: Mehrdeutigkeit, Redundanz, Bedeutung 4
Programmiersprachen Was man braucht: Maschinen: 001110101110 Was man schreiben möchte: print Hallo Welt ; höhere Programmiersprache Erlaubt das Verfassen eines Programms in einer abstrakten Sprache, Quell oder Source Anweisungen für den Rechner Für Menschen (Informatiker ) verständlich für Rechner nicht Programm muss in rechnerverständliche Form übersetzt werden Maschinen Erzeugung von Maschinen Compiler: übersetzt Quell in Maschinen Source Compiler Maschinen Ausführung Ausgabe Interpreter: liest Programm und führt Anweisungen aus Source Interpreter Ausgabe Erzeugung von Maschinen Byte-Interpreter: liest Byte und führt Anweisungen aus Byte: einfacher Zwischen Kompakt, maschinenunabhängig Vorteile: Ausführbar auf unterschiedlichen Plattformen Weitergabe ohne Offenlegung des Sources Java Höhere Programmiersprache objektorientiert Interpretersprache, Quell wird in Byte überführt und in spezieller Umgebung ausgeführt Interpreter Java VM (Virtual Machine) Source Compiler Byte Interpreter Ausgabe Compilieren und Interpretieren Compiler: Compilieren und Interpretieren UNIX Workstation Windows PC Palm Handheld Mobiltelefon Quelltext *.java Compiler Byte *.class Byte *.class Java VM 5
Processing OpenSource Programmiersprache zur Programmierung von Bildern, Animation und Sound Einfacher Aufbau Basiert auf Java Speziell für Künstler, Designer Programmiert und entwickelt von Ben Fry und Casey Reas Aktuelle Version: 1.0.6 Processing - Beispiel Code, der ein Quadrat zeichnet: size(400, 400); rect(50, 50, 300, 300); Processing - Beispiel Programmierung Ein etwas ausführlicheres Beispiel: /* Program Title: "Hello Earth" Program Description: Blue circle on black background By Ira Greenberg, August 5, 2005 Comments: Our first Processing program- yippee! */ size(200, 200); background(0); // keep stroke from showing up around circle nostroke(); fill(27, 58, 217); ellipse(100, 100, 100, 100); print("hello Earth!"); Zusammenfassung 6