Informatik I. Vorlesung am D-BAUG der ETH Zürich. Hermann Lehner, Felix Friedrich ETH Zürich HS 2017

Ähnliche Dokumente
Informatik I Felix Friedrich

Das erste C++ Programm

Die Mersenne sche Vermutung. Einführung. Der Vortrag von Cole. Die Mersenne sche Vermutung

Algorithmen und Berechnungskomplexität I

Einführung in die Programmierung 1

Praktische Informatik I

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

Einführung in die Informatik I (autip)

Die Programmiersprache C Eine Einführung

Infovorkurs, Teil II: Theoretische Informatik. Motivation. Turing-Maschine. Programmiersprachen

JAVA als erste Programmiersprache Semesterkurs

Programmiersprachen und Übersetzer

Java-Vorkurs Wintersemester 15/16

Vorlesung Programmierung

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

Programmieren I. Überblick. Institut für Angewandte Informatik. KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft

Programmieren was ist das genau?

Institut für Computational Science Prof. Dr. H. Hinterberger. Praxismodul 1. Einführung in die Programmierung Erste Programme

Brainfuck. 1 Brainfuck. 1.1 Brainfuck Geschichte und Umfeld. 1.2 Esoterische Programmiersprachen

Programmieren I. Überblick. Institut für Angewandte Informatik. KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft

Kontrollstrukturen: Wiederholungsanweisungen

Vorkurs Informatik WiSe 15/16

IT-Basics 2. DI Gerhard Fließ

Vorlesung Programmierung

Einführung in die Programmierung mit Java

Vorlesung Programmierung

Einführung in die Informatik

Institut für Telematik Universität zu Lübeck. Programmieren. Kapitel 0: Organisatorisches. Wintersemester 2008/2009. Prof. Dr.

Nachklausur Bitte in Druckschrift leserlich ausfüllen!

Eclipse Tutorial.doc

Grundlagen der Programmierung II (GP 2)

Einführung und Motivation

Algorithmen und Datenstrukturen 1. EINLEITUNG. Algorithmen und Datenstrukturen - Ma5hias Thimm 1

Werkzeuge zur Programmentwicklung

Bemerkung: Termine und Orte für die einzelnen Lehrveranstaltungen sind dem Stundenplan zu entnehmen.

Programmieren I. Administratives / Java Installation. Thomas Vetter, Brian Amberg, Andreas Forster. 21. September 2010 UNIVERSITÄT BASEL

II.1.1. Erste Schritte - 1 -

Compilerbau + Virtuelle Maschinen

Grundlagen von C# - 1

Repetitorium Informatik (Java)

Informatik II (D-ITET) Übungsstunde 6

01 Einführung in PHP. Einführung in PHP 1/13 PHP in Aktion

Javakurs für Anfänger

Algorithmen und Datenstrukturen

2.4 Schleifen. Schleifen unterscheiden sich hinsichtlich des Zeitpunktes der Prüfung der Abbruchbedingung:

Einführung in die Programmierung

2D22 Prinzipien der Softwareentwicklung. Prinzipien der Softwareentwicklung S. Strahringer 1

Informatik I. Übung 01. Olga Diamanti

Übungen zur Vorlesung Einführung in die Informatik Wintersemester 2010/11

Gliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik

Grundlagen der Modellierung und Programmierung, Übung

Grundlagen der Informatik I (Studiengang Medieninformatik)

GI Vektoren

Praktikum zu Einführung in die Informatik für LogWings und WiMas Wintersemester 2013/14

Theoretische Informatik: Berechenbarkeit und Formale Sprachen

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

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 1

Modellierung und Programmierung 1

Java Einführung Programmcode

Strukturiertes Programmieren

Aufgabenblatt 1: - Präsenzübung für die Übungen Do Mi Ausgabe Mi

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

Vorlesung Programmieren

Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik

Klausur Grundlagen der Programmierung

Grundlagen der Programmierung UE

Random Access Machine (RAM) Berechenbarkeit und Komplexität Random Access Machines

Telecooperation/RBG. Grundlagen der Informatik I Thema 0: Einführung. Dr. Guido Rößling. Copyrighted material; for TUD student use only

Einführung in die Programmierung. Organisatorisches. Skript zur Vorlesung Einführung in die Programmierung

1. Übung zu "Numerik partieller Differentialgleichungen"

Hello World. Javakurs 2014, 1. Vorlesung. Sebastian Schuck. basierend auf der Vorlage von Arne Kappen. wiki.freitagsrunde.org. 3.

Motivation und Überblick

Seite Seite 2

Grundlagen der Programmierung UE

Informatik I (D-MAVT)

Lösungsvorschlag Serie 2 Rekursion

1. Formulieren Sie den Algorithmus <Bedienung eines Getränkeautomaten> nach den oben genannten Kriterien.

Statische Methoden, Vererbung, Benutzereingabe

3AA. Prof. Dr. Wolfgang P. Kowalk. Universität Oldenburg WS 2005/2006

Übung zur Vorlesung Strukturiertes Programmieren WS 2014/15. Übungsblatt 1: JAVA - Erste Schritte Abgabe: Besprechung:

CS1005 Objektorientierte Programmierung

Programmierkonventionen - 1 -

Allgemeine Hinweise. Übungsblatt 1. Ausgabe: :00 Abgabe: :00

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Wiederholung Kapitel 4. Birgit Engels, Anna Schulze WS 07/08

Theoretische Informatik 2 bzw. Formale Sprachen und Berechenbarkeit. Sommersemester Herzlich willkommen!

Willkommen zur Vorlesung. Algorithmen und Datenstrukturen

SWE1 / Übung 2 ( )

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH

Willkommen... Agenda für heute, 25. Februar, Studentinnen und Studenten der Studiengänge

Programmieren I. Überblick. Institut für Angewandte Informatik. KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft

Softwareentwicklungspraktikum Nebenfach

Grundlagen der Informatik für Wissenschaftliche Anwendungen

2. Computer (Hardware) K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Was ist ein Compiler?

Java Virtual Machine (JVM) Bytecode

Algorithmen und Datenstrukturen

Interdisziplinäre fachdidaktische Übung: Formale Sprache Definitionen, Funktionen

Android DER SCHNELLE UND EINFACHE EINSTIEG IN DIE PROGRAMMIERUNG UND ENTWICKLUNGSUMGEBUNG. EXTRA: E-Book inside. dirk LOUIS peter MÜLLER. 2.

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

Transkript:

1 Informatik I Vorlesung am D-BAUG der ETH Zürich Hermann Lehner, Felix Friedrich ETH Zürich HS 2017

2 Willkommen zur Vorlesung! 1. Einführung

Material 3 Vorlesungshomepage: http://lec.inf.ethz.ch/baug/informatik1

Das Team 4 Dozenten Chef-Assistent Assistenten Hermann Lehner Felix Friedrich Andrea Lattuada Malte Schwerhoff Rafael Wampfler Kai Sandbrink Irfan Bunjaku Clemens Bachmann Sander Staal Nihat Isik Gökcen Cimen Patrick Gruntz Simon Guldimann Frederic Vogel Philipp Schimmelfennig

5 Programmieren und Problemlösen In diesem Kurs lernen Sie programmieren in Java Die Software Entwicklung ist ein Handwerk. Vergleich: Erlernen eines Musikinstruments.

5 Programmieren und Problemlösen In diesem Kurs lernen Sie programmieren in Java Die Software Entwicklung ist ein Handwerk. Vergleich: Erlernen eines Musikinstruments. Das Problem: Es ist noch keiner vom Zuhören Pianist geworden.

5 Programmieren und Problemlösen In diesem Kurs lernen Sie programmieren in Java Die Software Entwicklung ist ein Handwerk. Vergleich: Erlernen eines Musikinstruments. Das Problem: Es ist noch keiner vom Zuhören Pianist geworden. Deshalb bietet dieser Kurs Ihnen viele Möglichkeiten, zu üben. Nutzen Sie dies aus!

6 Programmieren und Problemlösen In diesem Kurs lernen Sie Problemlösen mit ausgewählten Algorithmen und Datenstrukturen. Sprach-übergreifendes Grundlagenwissen Vergleich: Rhythmus-Lehre, Tonleitern, Noten-Lesen.

6 Programmieren und Problemlösen In diesem Kurs lernen Sie Problemlösen mit ausgewählten Algorithmen und Datenstrukturen. Sprach-übergreifendes Grundlagenwissen Vergleich: Rhythmus-Lehre, Tonleitern, Noten-Lesen. Das Problem: Ohne Musikinstrument macht dies kein Spass.

6 Programmieren und Problemlösen In diesem Kurs lernen Sie Problemlösen mit ausgewählten Algorithmen und Datenstrukturen. Sprach-übergreifendes Grundlagenwissen Vergleich: Rhythmus-Lehre, Tonleitern, Noten-Lesen. Das Problem: Ohne Musikinstrument macht dies kein Spass. Deshalb kombinieren wir das Problemlösen mit dem Erlernen von Java.

7 Inhalte der Vorlesung Programmieren mit Java Einführung Arrays Anweisungen und Ausdrücke Methoden und Rekursion Zahlendarstellungen Typen, Klassen und Objekte Kontrollfluss Vererbung und Polymorphie Matlab Einführung Anwendungsszenarien

8 Ziel der heutigen Vorlesung Einführung Computermodell und Algorithmus Allgemeine Informationen zur Vorlesung Das erste Programm schreiben

9 1.1 Informatik und Algorithmus Informatik, der Euklidische Algorithmus

Was ist Informatik? 10

Was ist Informatik? 10 Die Wissenschaft der systematischen Verarbeitung von Informationen,...

10 Was ist Informatik? Die Wissenschaft der systematischen Verarbeitung von Informationen,...... insbesondere der automatischen Verarbeitung mit Hilfe von Digitalrechnern. (Wikipedia, nach dem Duden Informatik )

11 Informatik EDV-Kenntnisse EDV-Kenntnisse: Anwenderwissen Umgang mit dem Computer Bedienung von Computerprogrammen (für Texterfassung, Email, Präsentationen,... )

11 Informatik EDV-Kenntnisse Informatik: Grundlagenwissen Wie funktioniert ein Computer? Wie schreibt man ein Computerprogramm?

12 Inhalt dieser Vorlesung Systematisches Problemlösen mit Algorithmen und der Programmiersprache Java. Also: nicht nur, aber auch Programmierkurs.

Algorithmus: Kernbegriff der Informatik 13 Algorithmus: Handlungsanweisung zur schrittweisen Lösung eines Problems

13 Algorithmus: Kernbegriff der Informatik Algorithmus: Handlungsanweisung zur schrittweisen Lösung eines Problems Ausführung erfordert keine Intelligenz, nur Genauigkeit (sogar Computer können es)

Algorithmus: Kernbegriff der Informatik Algorithmus: Handlungsanweisung zur schrittweisen Lösung eines Problems Ausführung erfordert keine Intelligenz, nur Genauigkeit (sogar Computer können es) nach Muhammed al-chwarizmi, Autor eines arabischen Rechen-Lehrbuchs (um 825) Dixit algorizmi... (lateinische Übersetzung) 13

Der älteste nichttriviale Algorithmus Euklidischer Algorithmus (aus Euklids Elementen, 3. Jh. v. Chr.) Eingabe: ganze Zahlen a > 0, b > 0 Ausgabe: ggt von a und b Solange b 0 Wenn a > b dann a a b Sonst: b b a Ergebnis: a. a b

Der älteste nichttriviale Algorithmus Euklidischer Algorithmus (aus Euklids Elementen, 3. Jh. v. Chr.) Eingabe: ganze Zahlen a > 0, b > 0 Ausgabe: ggt von a und b Solange b 0 Wenn a > b dann a a b Sonst: b b a Ergebnis: a. a b a b

Der älteste nichttriviale Algorithmus Euklidischer Algorithmus (aus Euklids Elementen, 3. Jh. v. Chr.) Eingabe: ganze Zahlen a > 0, b > 0 Ausgabe: ggt von a und b Solange b 0 Wenn a > b dann a a b Sonst: b b a Ergebnis: a. a b a b a b

Der älteste nichttriviale Algorithmus Euklidischer Algorithmus (aus Euklids Elementen, 3. Jh. v. Chr.) Eingabe: ganze Zahlen a > 0, b > 0 Ausgabe: ggt von a und b Solange b 0 Wenn a > b dann a a b Sonst: b b a Ergebnis: a. a b a b a b a b 14

Live Demo: Turing Maschine 15

Euklid in der Box Speicher 0 1 2 3 4 5 6 7 8 9 Links Rechts Register 16

Euklid in der Box Speicher 0 1 2 3 4 5 6 7 8 9 [8] L [9] R L = 0? stop R > L? springe zu 6 L R [8] springe zu 0 R L [9] springe zu 0 Programmcode Links Rechts Register 16

Euklid in der Box Speicher 0 1 2 3 4 5 6 7 8 9 [8] L [9] R L = 0? stop R > L? springe zu 6 L R [8] springe zu 0 R L [9] springe zu 0 b a Programmcode Daten Links Rechts Register 16

Euklid in der Box Speicher 0 1 2 3 4 5 6 7 8 9 [8] L [9] R L = 0? stop R > L? springe zu 6 L R [8] springe zu 0 R L [9] springe zu 0 b a Programmcode Daten Daten Links Rechts Register 16

Euklid in der Box Speicher 0 1 2 3 4 5 6 7 8 9 [8] L [9] R L = 0? stop R > L? springe zu 6 L R [8] springe zu 0 R L [9] springe zu 0 b a Links b Register Rechts a Solange b 0 Wenn a > b dann a a b Sonst: b b a Ergebnis: a. 16

Euklid in der Box Speicher 0 1 2 3 4 5 6 7 8 9 [8] L [9] R L = 0? stop R > L? springe zu 6 L R [8] springe zu 0 R L [9] springe zu 0 b a Links b Register Rechts a Solange b 0 Wenn a > b dann a a b Sonst: b b a Ergebnis: a. 16

Euklid in der Box Speicher 0 1 2 3 4 5 6 7 8 9 [8] L [9] R L = 0? stop R > L? springe zu 6 L R [8] springe zu 0 R L [9] springe zu 0 b a Links b Register Rechts a Solange b 0 Wenn a > b dann a a b Sonst: b b a Ergebnis: a. 16

Euklid in der Box Speicher 0 1 2 3 4 5 6 7 8 9 [8] L [9] R L = 0? stop R > L? springe zu 6 L R [8] springe zu 0 R L [9] springe zu 0 b a Links b Register Rechts a Solange b 0 Wenn a > b dann a a b Sonst: b b a Ergebnis: a. 16

Euklid in der Box Speicher 0 1 2 3 4 5 6 7 8 9 [8] L [9] R L = 0? stop R > L? springe zu 6 L R [8] springe zu 0 R L [9] springe zu 0 b a Links b Register Rechts a Solange b 0 Wenn a > b dann a a b Sonst: b b a Ergebnis: a. 16

Euklid in der Box Speicher 0 1 2 3 4 5 6 7 8 9 [8] L [9] R L = 0? stop R > L? springe zu 6 L R [8] springe zu 0 R L [9] springe zu 0 b a Links Register Rechts Solange b 0 Wenn a > b dann a a b Sonst: b b a Ergebnis: a. 16

17 1.3 Computermodell Turing Maschine, Von Neumann Architektur

Computer Konzept Eine geniale Idee: Universelle Turingmaschine (Alan Turing, 1936) Alan Turing 18

Computer Umsetzung Z1 Konrad Zuse (1938) ENIAC John Von Neumann (1945) Konrad Zuse John von Neumann 19

21 Speicher für Daten und Programm Folge von Bits aus {0, 1}. Programmzustand: Werte aller Bits. Zusammenfassung von Bits zu Speicherzellen (oft: 8 Bits = 1 Byte).

21 Speicher für Daten und Programm Jede Speicherzelle hat eine Adresse. Random Access: Zugriffszeit auf Speicherzelle (nahezu) unabhängig von ihrer Adresse.

Rechengeschwindigkeit In der mittleren Zeit, die der Schall von mir zu Ihnen unterwegs ist... 1 Uniprozessor Computer bei 1GHz 22

Rechengeschwindigkeit In der mittleren Zeit, die der Schall von mir zu Ihnen unterwegs ist... 30 m arbeitet ein heutiger Desktop-PC mehr als 100 1 Uniprozessor Computer bei 1GHz 22

Rechengeschwindigkeit In der mittleren Zeit, die der Schall von mir zu Ihnen unterwegs ist... 30 m = mehr als 100.000.000 Instruktionen arbeitet ein heutiger Desktop-PC mehr als 100 Millionen Instruktionen ab. 1 1 Uniprozessor Computer bei 1GHz 22

Programmieren Mit Hilfe einer Programmiersprache wird dem Computer eine Folge von Befehlen erteilt, damit er genau das macht, was wir wollen. Die Folge von Befehlen ist das (Computer)-Programm. The Harvard Computers, Menschliche Berufsrechner, ca.1890 23

Warum Programmieren? 24 Da hätte ich ja gleich Informatik studieren können...

24 Warum Programmieren? Da hätte ich ja gleich Informatik studieren können... Es gibt doch schon für alles Programme...

24 Warum Programmieren? Da hätte ich ja gleich Informatik studieren können... Es gibt doch schon für alles Programme... Programmieren interessiert mich nicht...

24 Warum Programmieren? Da hätte ich ja gleich Informatik studieren können... Es gibt doch schon für alles Programme... Programmieren interessiert mich nicht... Weil Informatik hier leider ein Pflichtfach ist...

24 Warum Programmieren? Da hätte ich ja gleich Informatik studieren können... Es gibt doch schon für alles Programme... Programmieren interessiert mich nicht... Weil Informatik hier leider ein Pflichtfach ist......

25 Mathematik war früher die Lingua franca der Naturwissenschaften an allen Hochschulen. Und heute ist dies die Informatik. Lino Guzzella, Präsident der ETH Zürich, NZZ Online, 1.9.2017

26 Darum Programmieren! Jedes Verständnis moderner Technologie erfordert Wissen über die grundlegende Funktionsweise eines Computers. Programmieren (mit dem Werkzeug Computer) wird zu einer Kulturtechnik wie Lesen und Schreiben (mit den Werkzeugen Papier und Bleistift)

26 Darum Programmieren! Jedes Verständnis moderner Technologie erfordert Wissen über die grundlegende Funktionsweise eines Computers. Programmieren (mit dem Werkzeug Computer) wird zu einer Kulturtechnik wie Lesen und Schreiben (mit den Werkzeugen Papier und Bleistift) Die meisten qualifizierten Jobs benötigen zumindest elementare Programmierkenntnisse.

26 Darum Programmieren! Jedes Verständnis moderner Technologie erfordert Wissen über die grundlegende Funktionsweise eines Computers. Programmieren (mit dem Werkzeug Computer) wird zu einer Kulturtechnik wie Lesen und Schreiben (mit den Werkzeugen Papier und Bleistift) Die meisten qualifizierten Jobs benötigen zumindest elementare Programmierkenntnisse. Programmieren macht Spass!

27 Dieser Kurs ist für Sie Sie erlernen das Fundament die Grundlagen der Informatik und des Programmierens bei uns auf einem anspruchsvollen Niveau. Sie müssen die erlernten Prinzipien später in einem anderen Kontext unter anderem für andere Programmiersprachen (C++, Python,Matlab,R) anwenden können. Das ist keine Vorgabe von uns wir wissen das von Ihnen (= Ihrem Departement).

28 Programmiersprachen Sprache, die der Computer "versteht", ist sehr primitiv (Maschinensprache). Einfache Operationen müssen in viele Einzelschritte aufgeteilt werden. Sprache variiert von Computer zu Computer.

29 Höhere Programmiersprachen darstellbar als Programmtext, der von Menschen verstanden werden kann vom Computermodell unabhängig ist Abstraktion!

Java 30 Basiert auf einer virtuellen Maschine (mit von-neumann Architektur)

Java 30 Basiert auf einer virtuellen Maschine (mit von-neumann Architektur) Programmcode wird in Zwischencode übersetzt

Java 30 Basiert auf einer virtuellen Maschine (mit von-neumann Architektur) Programmcode wird in Zwischencode übersetzt Zwischencode läuft in einer simulierten Rechnerumgebung, Interpretation des Zwischencodes durch einen Interpreter

Java 30 Basiert auf einer virtuellen Maschine (mit von-neumann Architektur) Programmcode wird in Zwischencode übersetzt Zwischencode läuft in einer simulierten Rechnerumgebung, Interpretation des Zwischencodes durch einen Interpreter Optimierung: Just-In-Time (JIT) Kompilation von häufig genutztem Code: virtuelle Maschine physikalische Maschine

30 Java Basiert auf einer virtuellen Maschine (mit von-neumann Architektur) Programmcode wird in Zwischencode übersetzt Zwischencode läuft in einer simulierten Rechnerumgebung, Interpretation des Zwischencodes durch einen Interpreter Optimierung: Just-In-Time (JIT) Kompilation von häufig genutztem Code: virtuelle Maschine physikalische Maschine Folgerung, und erklärtes Ziel der Entwickler von Java: Portabilität write once run anywhere

31 1.5 Allgemeine Informationen zur Vorlesung Organisatorisches, Tools, Übungen, Prüfung

32 Einschreibung in Übungsgruppen Gruppeneinteilung selbstständig via Webseite http://echo.ethz.ch Funktioniert nach Belegung dieser Vorlesung in mystudies. Die gezeigten Räume und Termine abhängig vom Studiengang.

Übungsbetrieb 33 Mo Di Mi Do Fr Sa So Mo Di Mi Do Fr Sa V Ü V Ü

33 Übungsbetrieb Mo Di Mi Do Fr Sa So Mo Di Mi Do Fr Sa V Ü V Ü Ausgabe Übungsblattausgabe zur Vorlesung (online). Vorbesprechung in der folgenden Übung. Bearbeitung der Übung bis spätestens am Tag vor der nächsten Übungsstunde (23:59h). Nachbesprechung der Übung in der nächsten Übungsstunde. Feeback zu den Abgaben innerhalb einer Woche nach Nachbesprechung.

33 Übungsbetrieb Mo Di Mi Do Fr Sa So Mo Di Mi Do Fr Sa V Ü V Ü Ausgabe Vorbesprechung Übungsblattausgabe zur Vorlesung (online). Vorbesprechung in der folgenden Übung. Bearbeitung der Übung bis spätestens am Tag vor der nächsten Übungsstunde (23:59h). Nachbesprechung der Übung in der nächsten Übungsstunde. Feeback zu den Abgaben innerhalb einer Woche nach Nachbesprechung.

33 Übungsbetrieb Mo Di Mi Do Fr Sa So Mo Di Mi Do Fr Sa V Ü V Ü Ausgabe Vorbesprechung Abgabe Übungsblattausgabe zur Vorlesung (online). Vorbesprechung in der folgenden Übung. Bearbeitung der Übung bis spätestens am Tag vor der nächsten Übungsstunde (23:59h). Nachbesprechung der Übung in der nächsten Übungsstunde. Feeback zu den Abgaben innerhalb einer Woche nach Nachbesprechung.

33 Übungsbetrieb Mo Di Mi Do Fr Sa So Mo Di Mi Do Fr Sa V Ü V Ü Ausgabe Vorbesprechung Abgabe Nachbesprechung Übungsblattausgabe zur Vorlesung (online). Vorbesprechung in der folgenden Übung. Bearbeitung der Übung bis spätestens am Tag vor der nächsten Übungsstunde (23:59h). Nachbesprechung der Übung in der nächsten Übungsstunde. Feeback zu den Abgaben innerhalb einer Woche nach Nachbesprechung.

Zu den Übungen 34 An der ETH ist (seit HS 2013) für die Prüfungszulassung kein Testat erforderlich.

Zu den Übungen 34 Bearbeitung der wöchentlichen Uebungsserien ist also freiwillig, wird aber dringend empfohlen!

Zu den Übungen 34 Bearbeitung der wöchentlichen Uebungsserien ist also freiwillig, wird aber dringend empfohlen!

Fehlende Resourcen sind keine Entschuldigung! 35 Für die Übungen verwenden wir eine Online-Entwicklungsumgebung, benötigt lediglich einen Browser, Internetverbindung und Ihr ETH Login. Falls Sie keinen Zugang zu einem Computer haben: in der ETH stehen an vielen Orten öffentlich Computer bereit.

36 Tutorial In der ersten Woche bearbeiten Sie selbständig unser Java-Tutorial Einfacher Einstieg in Java, kein Vorwissen nötig! Zeitbedarf: ca. zwei Stunden In der zweiten Woche gibt s ein Self Assessment zum Tutorial Auch das Tutorial ist basierend auf Codeboard.io

36 Tutorial In der ersten Woche bearbeiten Sie selbständig unser Java-Tutorial Einfacher Einstieg in Java, kein Vorwissen nötig! Zeitbedarf: ca. zwei Stunden In der zweiten Woche gibt s ein Self Assessment zum Tutorial Auch das Tutorial ist basierend auf Codeboard.io Das ist gut investierte Zeit!

Tutorial - Url 37 Java Tutorial Hier finden Sie das Tutorial https://frontend-1.et.ethz.ch/sc/wkrekyauhvaetqlzr

Buch zur Vorlesung 38 Sprechen Sie Java? Hanspeter Mössenböck dpunkt.verlag Gut aufgebautes Lernmaterial Vertiefte Diskussion der Themen Übungsaufgaben mit Lösungen An der Prüfung werden wir 1-2 Aufgaben aus dem Buch bringen

39 Relevantes für die Prüfung Prüfungsstoff für die Endprüfung (in der Prüfungssession 2018) schliesst ein Vorlesungsinhalt (Vorlesung, Handout) und Übungsinhalte (Übungsstunden, Übungsaufgaben).

Relevantes für die Prüfung Prüfung ist schriftlich Es wird sowohl praktisches Wissen (Programmierfähigkeit 2 ) als auch theoretisches Wissen (Hintergründe, Systematik) geprüft. 2 soweit in schriftlicher Prüfung möglich 39

40 Unser Angebot Ihre Programmierübungen werden (halb)automatisch bewertet. Durch Bearbeitung der wöchentlichen Übungsserien kann ein Bonus von maximal 0.25 Notenpunkten erarbeitet werden, der an die Prüfung mitgenommen wird. Der Bonus ist proportional zur erreichten Punktzahl über alle Serien, wobei volle Punktzahl einem Bonus von 0.25 entspricht.

Akademische Lauterkeit 41 Regel: Sie geben nur eigene Lösungen ab, welche Sie selbst verfasst und verstanden haben. Wir prüfen das (zum Teil automatisiert) nach und behalten uns insbesondere mündliche Prüfgespräche vor. Sollten Sie zu einem Gespräche eingeladen werden: geraten Sie nicht in Panik. Es gilt primär die Unschuldsvermutung. Wir wollen wissen, ob Sie verstanden haben, was Sie abgegeben haben.

Codeboard 42 Codeboard ist eine Online-IDE: Programmieren im Browser! Falls vorhanden, bringen Sie Ihren Laptop/Tablet/... mit in den Unterricht. Sie können direkt in der Vorlesung Beispiele ausprobieren, ohne dass Sie irgendwelche Tools installieren müssen.

43 Expert Unser Übungssystem besteht aus zwei unabhängigen Systemen, die miteinander kommunizieren: User Das ETH Abgabesystem: Ermöglicht es uns, Ihre Aufgaben zu bewerten Die Online IDE: Die Programmierumgebung ETH Abgabesystem http://expert.ethz.ch Login mit ETH Credentials Codeboard.io http://codeboard.io Login mit Codeboard.io Credentials

Übungseinschreibung 44 Codeboard.io Registrierung Gehen Sie auf http://codeboard.io und erstellen Sie dort ein Konto, bleiben Sie am besten eingeloggt. Einschreibung in Übungsgruppen Gehen Sie auf http://expert.ethz.ch/baugi1_2017e00t01 und schreiben Sie sich dort in eine Übungsgruppe ein.

Codeboard.io Registrierung 45 Falls Sie noch keinen Codeboard.io Account haben... Wir verwenden die Online IDE Codeboard.io

45 Codeboard.io Registrierung Falls Sie noch keinen Codeboard.io Account haben... Wir verwenden die Online IDE Codeboard.io Erstellen Sie dort einen Account, um Ihren Fortschritt abzuspeichern und später Submissions anzuschauen

45 Codeboard.io Registrierung Falls Sie noch keinen Codeboard.io Account haben... Wir verwenden die Online IDE Codeboard.io Erstellen Sie dort einen Account, um Ihren Fortschritt abzuspeichern und später Submissions anzuschauen Anmeldedaten können beliebig gewählt werden! Verwenden Sie nicht das ETH Passwort.

Codeboard.io Login 46 Falls Sie schon einen Account haben, loggen Sie sich ein:

Einschreibung in Übungsgruppen - I 47 Besuchen Sie http://expert.ethz.ch/baugi1_2017e00t01 Loggen Sie sich mit Ihrem nethz Account ein.

Einschreibung in Übungsgruppen - II 48 Schreiben Sie sich in diesem Dialog in eine Übungsgruppe ein.

Die erste Übung 49 Sie sind nun eingeschrieben und die erste Übung ist geladen. Folgen Sie den Anweisungen in der gelben Box.

Die erste Übung - Codeboard.io Login 50 Achtung! Falls Sie diese Nachricht sehen, klicken Sie auf Sign in now und melden Sie sich dort mit Ihrem Codeboard.io Account ein.

Die erste Übung - Fortschritt speichern! 51 Achtung! Speichern Sie Ihren Fortschritt regelmässig ab. So können Sie jederzeit an einem anderen Ort weiterarbeiten.

52 2. Java Einführung Programmieren Ein erstes Java Programm

53 Was braucht es zum Programmieren? Editor: Programm zum Ändern, Erfassen und Speichern vom Java-Programmtext Compiler: Programm zum Übersetzen des Programmtexts in Maschinensprache

53 Was braucht es zum Programmieren? Computer: Gerät zum Ausführen von Programmen in Maschinensprache Betriebssystem: Programm zur Organisation all dieser Abläufe (Dateiverwaltung, Editor-, Compiler- und Programmaufruf)

Deutsch vs. Programmiersprache 54 Deutsch Es ist nicht genug zu wissen, man muss auch anwenden. (Johann Wolfgang von Goethe) Java / C / C++ // computation int b = a a; // b = a^2 b = b b; // b = a^4

Syntax und Semantik 55 Programme müssen, wie unsere Sprache, nach gewissen Regeln geformt werden. Syntax: Zusammenfügungsregeln für elementare Zeichen (Buchstaben). Semantik: Interpretationsregeln für zusammengefügte Zeichen.

Syntax und Semantik 55 Entsprechende Regeln für ein Computerprogramm sind einfacher, aber auch strenger, denn Computer sind vergleichsweise dumm.

Syntax und Semantik von Java 56 Syntax Was ist ein Java Programm? Ist es grammatikalisch korrekt? Semantik Was bedeutet ein Programm? Welchen Algorithmus realisiert ein Programm?

Erstes Java Programm 57 // input Out.print("Compute a^8 for a=?"); int a; a = In.readInt(); // computation int b = a a; // b = a^2 b = b b; // b = a^4 // output b b, i.e. a^8 Out.println(a + "^8 = " + b b);

Erstes Java Programm 57 public static void main(string[] args) { // input Out.print("Compute a^8 for a=?"); int a; a = In.readInt(); // computation int b = a a; // b = a^2 b = b b; // b = a^4 // output b b, i.e. a^8 Out.println(a + "^8 = " + b b); }

57 Erstes Java Programm // Program to raise a number to the eighth power public class Main { } public static void main(string[] args) { // input Out.print("Compute a^8 for a=?"); int a; a = In.readInt(); // computation int b = a a; // b = a^2 b = b b; // b = a^4 // output b b, i.e. a^8 Out.println(a + "^8 = " + b b); }

57 Erstes Java Programm // Program to raise a number to the eighth power public class Main { Klasse: Ein Programm Methode: benannte public static void main(string[] args) { Folge von Anweisungen. // input Out.print("Compute a^8 for a=?"); int a; a = In.readInt(); // computation int b = a a; // b = a^2 b = b b; // b = a^4 // output b b, i.e. a^8 Out.println(a + "^8 = " + b b); } }

Verhalten eines Programmes 59 Zur Compilationszeit: vom Compiler akzeptiertes Programm (syntaktisch korrektes Java) Compiler-Fehler

Verhalten eines Programmes 59 Zur Laufzeit: korrektes Resultat inkorrektes Resultat Programmabsturz Programm terminiert nicht (Endlosschleife)

Kommentare // Program to raise a number to the eighth power public class Main { } public static void main(string[] args) { // input Out.print("Compute a^8 for a=?"); int a; a = In.readInt(); // computation int b = a a; // b = a^2 b = b b; // b = a^4 // output b b, i.e. a^8 Out.println(a + "^8 = " + b b); } 60

Kommentare // Program to raise a number to the eighth power public class Main { } public static void main(string[] args) { // input Out.print("Compute a^8 for a=?"); int a; a = In.readInt(); // computation int b = a a; // b = a^2 b = b b; // b = a^4 // output b b, i.e. a^8 Out.println(a + "^8 = " + b b); } Kommentare 60

Kommentare und Layout 62 Dem Compiler ist s egal... public class Main{public static void main(string[] args){out.print ("Compute a^8 for a=?");int a;a = In.readInt();int b = a*a;b = b * b;out.println(a + "^8 = " + b*b);}}

Kommentare und Layout 62 Dem Compiler ist s egal... public class Main{public static void main(string[] args){out.print ("Compute a^8 for a=?");int a;a = In.readInt();int b = a*a;b = b * b;out.println(a + "^8 = " + b*b);}}... uns aber nicht!

Anweisungen (Statements) // Program to raise a number to the eighth power public class Main { } public static void main(string[] args) { // input Out.print("Compute a^8 for a=?"); int a; a = In.readInt(); // computation int b = a a; // b = a^2 b = b b; // b = a^4 // output b b, i.e. a^8 Out.println(a + "^8 = " + b b); } 63

Anweisungen (Statements) // Program to raise a number to the eighth power public class Main { } public static void main(string[] args) { // input Out.print("Compute a^8 for a=?"); int a; a = In.readInt(); // computation int b = a a; // b = a^2 b = b b; // b = a^4 // output b b, i.e. a^8 Out.println(a + "^8 = " + b b); } Ausdrucksanweisungen 63

Anweisungen Werte und Effekte // Program to raise a number to the eighth power public class Main { } public static void main(string[] args) { // input Out.print("Compute a^8 for a=?"); int a; a = In.readInt(); // computation int b = a a; // b = a^2 b = b b; // b = a^4 // output b b, i.e. a^8 Out.println(a + "^8 = " + b b); } Effekt: Ausgabe des Strings Compute... Effekt: Eingabe einer Zahl und Speichern in a Effekt: Speichern des berechneten Wertes von a*a in b Effekt: Speichern des berechneten Wertes von b*b in b Effekt: Ausgabe des Wertes von a und des berechneten Wertes von b*b 66

Anweisungen Variablendefinitionen // Program to raise a number to the eighth power public class Main { } public static void main(string[] args) { // input Out.print("Compute a^8 for a=?"); int a; a = In.readInt(); // computation int b = a a; // b = a^2 b = b b; // b = a^4 // output b b, i.e. a^8 Out.println(a + "^8 = " + b b); } 68

Anweisungen Variablendefinitionen // Program to raise a number to the eighth power public class Main { Typnamen } public static void main(string[] args) { // input Out.print("Compute a^8 for a=?"); } int a; a = In.readInt(); // computation int b = a a; // b = a^2 Deklarationsanweisungen b = b b; // b = a^4 // output b b, i.e. a^8 Out.println(a + "^8 = " + b b); 68

Variablen 73 repräsentieren (wechselnde) Werte, haben Name Typ Wert Adresse sind im Programmtext "sichtbar".

73 Variablen repräsentieren (wechselnde) Werte, haben Name Typ Wert Adresse sind im Programmtext "sichtbar". Beispiel int a; definiert Variable mit Name: a Typ: int Wert: (vorerst) undefiniert Addresse: durch Compiler bestimmt

74 Objekte repräsentieren Werte im Hauptspeicher haben Typ, Adresse und Wert (Speicherinhalt an der Adresse), können benannt werden (Variable)...... aber auch anonym sein. Anmerkung Ein Programm hat eine feste Anzahl von Variablen. Um eine variable Anzahl von Werten behandeln zu können, braucht es "anonyme" Adressen, die über temporäre Namen angesprochen werden können.

Ausdrücke (Expressions) 76 repräsentieren Berechnungen

Ausdrücke (Expressions) 76 repräsentieren Berechnungen sind entweder primär (b)

Ausdrücke (Expressions) 76 repräsentieren Berechnungen sind entweder primär (b) oder zusammengesetzt (b*b)...

Ausdrücke (Expressions) 76 repräsentieren Berechnungen sind entweder primär (b) oder zusammengesetzt (b*b)...... aus anderen Ausdrücken, mit Hilfe von Operatoren

Ausdrücke (Expressions) 76 repräsentieren Berechnungen sind entweder primär (b) oder zusammengesetzt (b*b)...... aus anderen Ausdrücken, mit Hilfe von Operatoren Analogie: Baukasten

Ausdrücke (Expressions) 77 // input Out.print("Compute a^8 for a=?"); int a; a = In.readInt(); // computation int b = a a; // b = a^2 b = b * b; // b = a^4 // output b b, i.e. a^8 Out.println(a + "^8 = " + b * b );

Ausdrücke (Expressions) 77 // input Out.print("Compute a^8 for a=?"); int a; a = In.readInt(); Variablenname, primärer Ausdruck // computation int b = a a; // b = a^2 b = b * b; // b = a^4 Variablenname, primärer Ausdruck // output b b, i.e. a^8 Out.println(a + "^8 = " + b * b );

Ausdrücke (Expressions) 77 // input Out.print("Compute a^8 for a=?"); int a; a = In.readInt(); // computation int b = a a; // b = a^2 b = b * b; // b = a^4 // output Zusammengesetzer b b, i.e. a^8 Ausdruck Out.println(a + "^8 = " + b * b );

Operatoren und Operanden 80 // input Out.print("Compute a^8 for a=?"); int a; a = In.readInt(); // computation int b = a * a; // b = a^2 b = b b; // b = a^4 // output b b, i.e. a^8 Out.println(a + "^8 = " + b * b );

Operatoren und Operanden 80 // input Out.print("Compute a^8 for a=?"); int a; a = In.readInt(); Linker Operand (Variable) // computation Rechter Operand (Ausdruck) int b = a * a; // b = a^2 b = b b; // b = a^4 // output b b, i.e. a^8 Out.println(a + "^8 = " + b * b );

Operatoren und Operanden 80 // input Out.print("Compute a^8 for a=?"); int a; a = In.readInt(); Linker Operand (Variable) // computation Rechter Operand (Ausdruck) int b = a * a; // b = a^2 b = b b; // b = a^4 // output Zuweisungsoperator b b, i.e. a^8 Out.println(a + "^8 = " + b * b ); Multiplikationsoperator