Programmiervorkurs Wintersemester 2012/2013 Organisa(on: Steffen Gebert, Alexander Wolff Tutoren: Tobias Bleifuß, Padraig Davidson, Nicolas Färber, Johannes Grohmann, Johnny Lordo, Anna Seufert • Kontakt (für Organisatorisches, Fehler auf Folien...): Steffen Gebert steff[email protected]­‐wuerzburg.de • E-­‐Learning Kursraum: hMps://wuecampus2.uni-­‐wuerzburg.de/moodle/ course/view.php?id=32 Programmiervorkurs WS 2012/2013 Erste SchriMe Termin 1 Was heißt Programmieren? Was heißt Programmieren? Problem Welches Problem ist zu lösen? Was erwarte ich von meiner Lösung? Was heißt Programmieren? Problem Analyse / Modellierung algorithmische Beschreibung Welches Problem ist zu lösen? Was erwarte ich von meiner Lösung? Was heißt Programmieren? Problem Welches Problem ist zu lösen? Was erwarte ich von meiner Lösung? Analyse / Modellierung algorithmische Beschreibung Wie lässt sich das Problem lösen? „Kochrezept“ Was heißt Programmieren? Problem Welches Problem ist zu lösen? Was erwarte ich von meiner Lösung? Analyse / Modellierung algorithmische Beschreibung Wie lässt sich das Problem lösen? Programmierung / Codierung Programm Wie bringe ich meine Idee dem Computer bei? Z.B. Durch ein Java-Programm? Was heißt Programmieren? Problem Welches Problem ist zu lösen? Was erwarte ich von meiner Lösung? Analyse / Modellierung algorithmische Beschreibung Wie lässt sich das Problem lösen? Programmierung / Codierung Programm Übersetzung / Compilierung ausführbares Programm Wie bringe ich meine Idee dem Computer bei? Z.B. Durch ein Java-Programm? Wie muss der ausführbare Code aussehen? Z.B. Java-Bytecode? Was heißt Programmieren? Problem Welches Problem ist zu lösen? Was erwarte ich von meiner Lösung? Analyse / Modellierung algorithmische Beschreibung Wie lässt sich das Problem lösen? Programmierung / Codierung Programm Übersetzung / Compilierung ausführbares Programm Wie bringe ich meine Idee dem Computer bei? Z.B. Durch ein Java-Programm? Wie muss der ausführbare Code aussehen? Z.B. Java-Bytecode? Ausführung / Interpretierung Problemlösung? Ist das Problem gelöst? Was heißt Programmieren? Problem Analyse / Modellierung algorithmische Beschreibung Programmierung / Codierung Programm Übersetzung / Compilierung ausführbares Programm Ausführung / Interpretierung Problemlösung? Vorkurs Was heißt Programmieren? Problem Analyse / Modellierung Vorlesung: algorithmische Beschreibung Programmierung / Codierung Programm Übersetzung / Compilierung ausführbares Programm Ausführung / Interpretierung Problemlösung? Algorithmen und Datenstrukturen Was brauchen wir zum Programmieren? – JDK = Java SoXware Development Kit • JDK 7 Standard EdiHon: hMp://www.oracle.com/technetwork/java/javase/downloads/index.html • DokumentaHon: hMp://download.oracle.com/javase/7/docs/api/ • Tutorials: hMp://download.oracle.com/javase/tutorial/ – Eclipse IDE for Java Developers • IDE = Integrated Development Environment • Version 4.2 : hMp://www.eclipse.org/downloads/ Java-­‐Bücher – D. Ratz, J. Scheffler, D.Seese & J.Wiesenberger: Grundkurs Programmieren in Java, Band 1, Hanser Verlag, ISBN 978-­‐3-­‐446-­‐40493-­‐9 hMp://www.grundkurs-­‐java.de/ – C. Ullenboom: Java ist auch eine Insel, Galileo CompuHng, ISBN 978-­‐3-­‐8362-­‐1371-­‐4 hMp://openbook.galileocompuHng.de/javainsel8/ Vom Java-­‐Quellprogramm zum ausführbaren Programm Java-Quellprogramm Java-Compiler Java-Bytecode Java VM für Windows Java VM für Linux Java VM für MacOS ausführbares WindowsProgramm ausführbares LinuxProgramm ausführbares MacOSProgramm Vom Java-­‐Quellprogramm zum ausführbaren Programm Java-Quell-Programm Java-Compiler Java-Bytecode Kompilieren von der Konsole... ...und von Eclipse (normalerweise automatisch) Vom Java-­‐Quellprogramm zum ausführbaren Programm Java-Bytecode Java VM für Windows Ausführen von der Konsole... ausführbares WindowsProgramm ...und von Eclipse Ausgabe von Text public class MyFirstClass { public static void main(String[] args) { System.out.println("Hello World!"); } } Ausgabe von Text public class MyFirstClass { public static void main(String[] args) { System.out.println("Hello World!"); } } Ein Java-Programm besteht aus Klassen Ausgabe von Text public class MyFirstClass { public static void main(String[] args) { System.out.println("Hello World!"); } } Diese Klasse heißt MyFirstClass Ausgabe von Text public class MyFirstClass { public static void main(String[] args) { System.out.println("Hello World!"); } } Die Beschreibung einer Klasse wird in geschweifte Klammern gefasst. Ausgabe von Text public class MyFirstClass { public static void main(String[] args) { System.out.println("Hello World!"); } } In einer Klasse können Methoden definiert werden. In jedem Java-Programm gibt es eine Methode, die main heißt. Diese wird beim Aufruf des Programms zuerst ausgeführt. Ausgabe von Text public class MyFirstClass { public static void main(String[] args) { System.out.println("Hello World!"); } } Bei Ausführung einer Methode werden die Anweisungen in den geschweiften Klammern nacheinander ausgeführt. Ausgabe von Text public class MyFirstClass { public static void main(String[] args) { System.out.println("Hello World!"); } } Ausgabe von Text public class MyFirstClass { public static void main(String[] args) { System.out.println("Hello World!"); } } Ausgabe von Text public class MyFirstClass { public static void main(String[] args) { //Dies ist ein Kommentar System.out.println("Hello World!"); } } Ausgabe von Text public class MyFirstClass { public static void main(String[] args) { //Gib Zeichenkette auf Bildschirm aus: System.out.println("Hello World!"); } } Ausgabe von Text public class MyFirstClass { public static void main(String[] args) { /* Dies ist ein Kommentar mit mehreren Zeilen */ System.out.println("Hello World!"); } } Ausgabe von Text /** * Dies ist ein Java-Doc Kommentar */ public class MyFirstClass { public static void main(String[] args) { System.out.println("Hello World!"); } } Ausgabe von Text /** * Dieses Programm gibt die Zeichenkette * "Hello World!" auf den Bildschirm aus. * * @author Jan-Henrik Haunert * @date 2010-09-28 * @version 1.0 */ public class MyFirstClass { public static void main(String[] args) { System.out.println("Hello World!"); } } Ausgabe von Text public class MyFirstClass { public static void main(String[] args) { System.out.println("Hello World!"); } } Name der Methode für die Ausgabe einer Zeichenkette Ausgabe von Text public class MyFirstClass { public static void main(String[] args) { System.out.println("Hello World!"); } } Parameter werden der Methode in runden Klammern übergeben Ausgabe von Text public class MyFirstClass { public static void main(String[] args) { System.out.println("Hello World!"); } } Zeichenketten werden in Anführungsstriche gestellt Ausgabe von Text public class MyFirstClass { public static void main(String[] args) { System.out.println("Hello World!"); } } Anweisungen werden mit Semikolon abgeschlossen Ausgabe von Text public class MyFirstClass { public static void main(String[] args) { System.out.println("Hello World!"); } } Ausgabe von Zahlen public class Berechnung { public static void main(String[] args) { int i; i = 3 + 4; System.out.println(i); } } Ausgabe von Zahlen public class Berechnung { public static void main(String[] args) { int i; i = 3 + 4; System.out.println(i); } } Deklaration einer Variablen Ausgabe von Zahlen public class Berechnung { public static void main(String[] args) { int i; i = 3 + 4; System.out.println(i); } } Typ der Variablen (int = Ganzzahl) Ausgabe von Zahlen public class Berechnung { public static void main(String[] args) { int i; i = 3 + 4; System.out.println(i); } } Bezeichner der Variablen Ausgabe von Zahlen public class Berechnung { public static void main(String[] args) { int anzahlStudenten; anzahlStudenten = 3 + 4; System.out.println(anzahlStudenten); } } Bezeichner der Variablen guter Stil: Bezeichner von Variablen • beginnen mit kleinen Buchstaben und • sind möglichst selbsterklärend. Ausgabe von Zahlen public class Berechnung { public static void main(String[] args) { int anzahlStudenten; anzahlStudenten = 3 + 4; System.out.println(anzahlStudenten); } } Bezeichner der Variablen erlaubt: nicht erlaubt: Hallo_Welt 101Dalmatiner _H_A_L_L_O studentenInWürzburg hallo123 Hallo Welt hallo_123 class (Regeln siehe Literatur) Ausgabe von Zahlen public class Berechnung { public static void main(String[] args) { int i; i = 3 + 4; System.out.println(i); } } Zuweisungsoperator (rechte Seite wird zuerst ausgewertet) Ausgabe von Zahlen public class Berechnung { public static void main(String[] args) { int i; i = 3 + 4; System.out.println(i); } } Zuweisungsoperator (rechte Seite wird zuerst ausgewertet) Ausgabe von Zahlen public class Berechnung { public static void main(String[] args) { int i; i = 3 + 4; i = i + 7; //i wird um 7 erhoeht System.out.println(i); } } Ausgabe von Zahlen public class Berechnung { public static void main(String[] args) { int i; i = 3 + 4; System.out.println("Das Ergebnis ist:"); System.out.println(i); } } Ausgabe von Zahlen public class Berechnung { public static void main(String[] args) { int i; i = 3 + 4; System.out.print("Das Ergebnis ist:"); System.out.println(i); } } Ausgabe von Zahlen public class Berechnung { public static void main(String[] args) { int i; i = 3 + 4; System.out.print("Das Ergebnis ist:"); System.out.println(i); } } Ausgabe ohne Zeilenumbruch Ausgabe von Zahlen public class Berechnung { public static void main(String[] args) { int i; i = 3 + 4; System.out.println("Das Ergebnis ist:" + i); } } Ausgabe von Zahlen public class Berechnung { public static void main(String[] args) { int i; i = 3 + 4; System.out.println("Das Ergebnis ist:" + i); } } Verketten von Zeichenketten Addition von Zahlen Eingabe von Text public class EingabeUndAusgabe{ public static void main(String[] args) { System.out.println("Hello World!"); } } Eingabe von Text public class EingabeUndAusgabe{ public static void main(String[] args) { String s = "Hello World!"; System.out.println(s); } } Eingabe von Text import java.util.Scanner; public class EingabeUndAusgabe{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s = sc.next(); System.out.println(s); } } Eingabe von Text import java.util.Scanner; public class EingabeUndAusgabe{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s = sc.next(); System.out.println(s); } } Liest einen Text von der Tastatur ein. Eingabe von Text import java.util.Scanner; public class EingabeUndAusgabe{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s = sc.next(); System.out.println(s); } } import erforderlich Einfache Datentypen • Ganzzahlige Datentypen public class Berechnung { public static void main(String[] args) { int i; i = 3 + 4; System.out.println(i); } } Einfache Datentypen • Ganzzahlige Datentypen public class Berechnung { public static void main(String[] args) { int i; i = 3 + 4; System.out.println(i); } } kleinster Wert: - 2147483648 größter Wert: 2147483647 = 231 - 1 Länge 32 Bits, also eine binäre Zahl mit 32 Stellen 01101001101000111010010110111010 Einfache Datentypen • Ganzzahlige Datentypen public class Berechnung { public static void main(String[] args) { long i; i = 3 + 4; System.out.println(i); } } kleinster Wert: - 9223372036854775808 größter Wert: 9223372036854775807 = 263 - 1 Länge 64 Bits, also eine binäre Zahl mit 64 Stellen 0110100110100011101001011011101001101001101000111010010110111010 Einfache Datentypen • Ganzzahlige Datentypen public class Berechnung { public static void main(String[] args) { short i; i = 3 + 4; System.out.println(i); } } kleinster Wert: - 32768 größter Wert: 32767 = 215 - 1 Länge 16 Bits, also eine binäre Zahl mit 16 Stellen 1010010110111010 Einfache Datentypen • Ganzzahlige Datentypen public class Berechnung { public static void main(String[] args) { byte i; i = 3 + 4; System.out.println(i); } } kleinster Wert: -128 größter Wert: 127 = 27 - 1 Länge 8 Bits, also eine binäre Zahl mit 8 Stellen 10100101 Einfache Datentypen • Gleitkommazahlen public class Intdiv { public static void main(String[] args) { System.out.println(1 / 10); } } Einfache Datentypen • Gleitkommazahlen public class Intdiv { public static void main(String[] args) { System.out.print("1/10 betraegt "); System.out.print(1 / 10); System.out.print(" mit Rest "); System.out.print(1 % 10); } } Einfache Datentypen • Gleitkommazahlen public class Intdiv { public static void main(String[] args) { System.out.print("1/10 betraegt "); System.out.print(1 / 10); System.out.print(" mit Rest "); System.out.print(1 % 10); } } Modulo-Operator liefert den Rest der Division Einfache Datentypen • Gleitkommazahlen public class Floatdiv { public static void main(String[] args) { double dividend = 1.0; double divisor = 10.0; double quotient = dividend / divisor; System.out.println(quotient); } } Einfache Datentypen • Gleitkommazahlen public class Floatdiv { public static void main(String[] args) { double dividend = 1.0; double divisor = 10.0; double quotient = dividend / divisor; System.out.println(quotient); } } kleinster positiver Wert: ≈ 4.9406564584124654E-324 ≈ 1.7976931348623157E+308 größter positiver Wert: Länge: 64 Bits Einfache Datentypen • Gleitkommazahlen public class Floatdiv { public static void main(String[] args) { float dividend = 1.0; double divisor = 10.0; double quotient = dividend / divisor; System.out.println(quotient); } } kleinster positiver Wert: ≈ 1.4012984643248171E-45 ≈ 3.4028234663852886E+38 größter positiver Wert: Länge: 32 Bits Einfache Datentypen • Gleitkommazahlen public class Floatdiv { public static void main(String[] args) { System.out.println(1.0 / 10.0); } } Eingabe von Zahlen import java.util.Scanner; public class EingabeUndAusgabe{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); int i = sc.nextInt(); System.out.println(i); } } Liest eine int-Zahl von der Tastatur ein. Eingabe von Zahlen import java.util.Scanner; public class EingabeUndAusgabe{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); double d = sc.nextDouble(); System.out.println(d); } } Liest eine double-Zahl von der Tastatur ein. (Je nach lokalen Einstellungen wird Komma wie in „1.0“ oder „1,0“ erwartet.) Aufgabe • Erstellt (schriMweise) ein Programm, das a) den Nutzer zur Eingabe persönlicher Daten (Vorname, Nachname, Aufgabenbereich, Postleitzahl, Ort, Telefonnummer) auffordert, b) diese Daten im SHl einer Visitenkarte ausgibt, c) einen Satz folgender Form ausgibt: VORNAME: „Ich wohne in ORT.“ d) und die eingegebenen Daten tabellarisch darstellt. z.B. Name: NAME, VORNAME Adresse: Telefon: ADRESSE NUMMER