Informatik I Tutorium WS 07/08 Vorlesung: Prof. Dr. F. Bellosa Übungsleitung: Dipl.-Inform. A. Merkel Tutorium: 12 Tutor: Jens Kehne Tutorium 4: Dienstag 20. November 2007
Agenda des heutigen Tutoriums Übersicht heute Rückblick Java Datentypen, Casts Methoden, Schleifen UML-Aktivitätsdiagramm 2
Rückblick Aufgabenstellungen genau lesen! Antworten begründen kann nie schaden. Abschreiben fällt auf! Nächstes Mal gibts Ärger! 3
Java Datentypen, Casts
Einführung: Typen und Operationen Jede Programmiersprache besitzt Variablen in denen sich Zahlen (und Buchstaben) abspeichern lassen Jede Variable hat einen bestimmten Typ Zum Beispiel: Zahl: int Buchstabe: string Operationen benötigen Variablen von bestimmten Typen Beispiel: Variable a (Zahl), Variable b (Buchstabe) Macht a * b Sinn? Die Operation und der Typ der Operanten bestimmt den Typ des Ergebnisses 5
Typen und Operationen Operator Anwendung Beschreibung + op1 + op2 Addiert op1 und op2 - op1 - op2 Subtrahiert op2 von op1 * op1 * op2 Multipliziert op1 mit op2 / op1 / op2 Dividiert op1 durch op2 % op1 % op2 Berechnet den Rest aus der Division op1 durch op2 ++ op1++, ++op1 Inkrementierung von op1 um 1 Typen Es bestehen folgende Standardtypen für ganze Zahlen in Java: Byte 8-Bit-Zahl -2 7... 2 7-1 (-128... 127) short 16-Bit-Zahl -2 15... 2 15-1 (-32768... 32767) int 32-Bit-Zahl -2 31... 2 31-1 (-2.147.483.648... 2.147.483.647) long 64-Bit-Zahl -2 63... 2 63-1 6
Wertebereiche von Typen visualisiert Long Int Short Datentyp hat größeren Wertebereich Byte Datentypen haben kleinern Wertebereich 7
Resultate: Typen und Operationen in Java Größter Typ bestimmt Ergebnistyp der Operation Beispiel: long + int = long Ergebnistyp von arithmetischen Operationen ist (ohne weitere Angaben) int Auch die Addition von zwei Byte Variablen führt zum Ergebnistyp int! 8
Ausdrücke - AUFGABENSTELLUNG UND ÜBUNGSTHEMEN Gegeben seien folgende Variablendeklarationen in Java: long a = 3; int b = 4; short c = 5; byte d = 6; Welchen Wert liefern die folgenden Ausdrücke und von welchem Typ sind sie? d / b * a 3 (long) c + b * (d + 1) 33 (int) d / (c - 1) * b / 2 2 (int) d % b 2 (int) - c % b -1 (int) c++ % d 5 (int) a) Typen und Operationen b) Beispielprogramm mit Typkonflikten 9
Beispielprogramm mit Typkonflikten public class Test { public static void main (String[] arg) { long a = 7; // declare variables int b = 2; short c = 1; byte d = 0; byte e = 1; d = c++; d = e + d++; d = d++; d = c; b = c++ * d; // assign the arithmetic expression to b b = d * a; // assign the arithmetic expression to b b = a - a; // assign the arithmetic expression to b b = b / d; // assign the arithmetic expression to b } } Welche Fehler sind in diesem Programm enthalten? 10
Beispielprogramm mit Typkonflikten public class Test { public static void main (String[] arg) { long a = 7; // declare variables int b = 2; short c = 1; byte d = 0; byte e = 1; d = c++; d = e + d++; d = d++; d = c; b = c++ * d; // assign the arithmetic expression to b b = d * a; // assign the arithmetic expression to b b = a - a; // assign the arithmetic expression to b b = b / d; // assign the arithmetic expression to b } } Welche Fehler sind in diesem Programm enthalten? www.cm-tm.uka.de/info1 Info1-Team (Prof. Abeck) 11
Zuweisungen - AUFGABENSTELLUNG UND ÜBUNGSTHEMEN Gegeben seien dieselben Variablendeklarationen wie in Aufgabe 1.1. Welche der folgenden Zuweisungen sind in Java erlaubt? Geben Sie eine entsprechende Begründung. long a = 3; int b = 4; short c = 5; byte d = 6; a) Typkonversion b) Anwendung im Beispielprogramm a) a = b + 3 * (d + 1); b) b = c * c; c) c = b / 3; d) d = (byte) a + b; e) d = (byte) (a + b); f) d = d + d; ja ja nein nein ja nein 12
Typkonversion Was macht Typkonversion? Variablentyp Speicher (Block jeweils 1 Byte = 8 Bit) long int short byte Wie verwendet man Typkonversion im Programm? byte b = 0; long l = 65536; b = (byte) l +1; 13
Anwendung im Beispielprogramm public class Test { public static void main (String[] arg) { long a = 7; int b = 2; short c = 1; byte d = 0; byte e = 1; d = c++; b = c++; d = e + d++; d = d++; d = c; b = c++ * d; b = d * a; b = a - a; b = b / d; } } Wie kann man die Fehler beheben? // declare variables // assign the arithmetic expression to b // assign the arithmetic expression to b // assign the arithmetic expression to b // assign the arithmetic expression to b 14
Anwendung im Beispielprogramm public class Test { public static void main (String[] arg) { long a = 7; int b = 2; short c = 1; byte d = 0; byte e = 1; d = (byte)c++; b = c++; d = (byte)(e + d++); d = (byte)d++; d = (byte)c; b = (int)(c++ * d); b = (int)(d * a); b = (int)(a - a); b = (int)(b / d); } } // declare variables // assign the arithmetic expression to b // assign the arithmetic expression to b // assign the arithmetic expression to b // assign the arithmetic expression to b 15
In/Out-Klassen im IPO Die In-/Out-Klassen findet man hier: Sonstiges 16
Ausgabe mit Out.java Ziel: Erstellen einer Bildschirmausgabe Folgende Methoden bietet die Klasse an: Out.print(x); Out.println(x); Der Parameter x kann ein String, byte, short, integer oder long sein. Ein String kann durch Verkettung von Zeichenketten und Variablen erstellt werden. Beispiel: int i = 1; String s ="Der Wert von i ist:" + i; Out.print(s); Alternativ: Out.print("Der Wert von i ist:" + i); 17
Eingaben mit In.java Ziel: Einlesen einer Benutzereingabe Folgende Methode bietet die Klasse an: In.readInt(); // reads an integer In.readLine(); // reads a Sting Beispiel: int i; String s; i = In.readInt(); s = In.readLine(); 18
Aufbau eines Java-Programms public class InOutExample{ public static void main (String[] argv){ } } Folgendes Programm soll erstellt werden: Zwei Zahlen sollen eingelesen, addiert und ausgegeben werden. 19
Aufbau eines Java-Programms public class InOutExample{ public static void main (String[] argv){ int a; int b; int c; a = In.readInt(); b = In.readInt(); c = a + b; Out.println(c); } } 20
Programmierrichtlinien Programmierrichtlinien dienen dazu, Quelltext verständlich zu halten Wichtige Richtlinien (bis jetzt, NICHT vollständig): Bezeichnende Variablennamen (englisch!) Treffende Kommentare (englisch!) Unsinn: i++; // increment i Sinnvoll: vor größeren Codeblöcken die spezifiziert etwas berechnen Kommentar und zwischendrin Schritte erklären! Wenn Programmierrichtlinien nicht eingehalten werden Punktabzug! Mindestens genauso wichtig: Code so einfach wie möglich halten: 3 übersichtlich und schnell nachvollziehbare Zeilen sind mehr wert als 1 Zeile die scheinbar genial ist! 21
Java Methoden, Funktionen, Prozeduren, Schleifen
Methoden Methoden sind benannte Anweisungsfolgen dienen zur Zerlegung und Modularisierung eines Programms können parametrisiert oder auch parameterlos sein werden als Funktion oder Prozedur bezeichnet Was ist der Unterschied zwischen Funktionen und Prozeduren? Funktionen geben einen Wert zurück, Proz. nicht! Was besagt das Schlüsselwort void? Leer, nichts keine Rückkgabe Was bedeutet folgende Methodendeklaration? public static int max(int a, int b)
Namenskonventionen Namenskonventionen zu Methodennamen beginnen mit einem Kleinbuchstaben beginnen mit einem Verb falls aus mehren Wörtern gebildet, beginnen die Folgewörter mit einem Großbuchstaben Namenskonventionen zu Klassennamen beginnen mit einem Großbuchstaben falls aus mehren Wörtern gebildet, beginnen die Folgewörter mit einem Großbuchstaben Generell alle Namen und Kommentare auf Englisch!
Schleifen Ziel: Gewisse Berechnungen sollen wiederholt ausgeführt werden, bis eine bestimmte Bedingung eintritt Dieses Ziel wird u.a. durch die while-schleife (Abweisschleife) erreicht Syntax der while-schleife while (<Schleifenbedingung>) <Schleifenrumpf> als EBNF-Regel WhileStatement = "while" "(" Expr ")" Statement. durch die Bildung eines Blocks können beliebig viele Anweisungen den Schleifenrumpf bilden
Kubikwurzel einer Zahl - AUFGABENSTELLUNG UND ÜBUNGSTHEMEN Erstellen Sie ein Java-Programm, welches die Kubikwurzel der float-zahl x berechnet. Die Berechnung soll mittels der Näherungsformel von Newton erfolgen: y i x 2 * yi 1 2 y y i ist der Näherungswert der Kubikwurzel nach dem i-ten Schritt. Beginnen Sie mit y 0 =x/3. Die Iteration soll so lange fortgesetzt werden, bis sich y i und y i-1 um weniger als 1.0E-5 unterscheiden. Prüfen Sie diese Bedingung mittels Math.abs(y i - y i-1 ) < 1.0E-5. 3 i 1 a) Methoden b) Namenskonventionen c) Schleifen
Lösung: Kubikwurzel einer Zahl class Root { static float calcroot3(float x) { // this function calculates the cubic root of a given float value float y1 = x / 3; // start with y1 == x / 3 float y0 = 0; // and with y0 == 0 while (Math.abs(y0 - y1) > 1.0E-5) { // loop until yo - y1 < 1.0E-5 y0 = y1; // set y0 the old y1 y1 = (2 * y0 + x / (y0 * y0)) / 3; // calculate a new y1 } return y1; // return result } public static void main(string[] arg) { Out.print("Geben Sie eine Zahl ein: "); // Print text to the console float x = In.readFloat(); // read the value x from the console Out.println("Kubikwurzel von " + x + " ist " // print the cubic root of the value + calcroot3(x)); using the function root3 } }
UML-Aktivitätsdiagramm
UML (Unified Modelling Language): Zur Planung und Strukturierung von Software Produkten Anwendungsfall Diagramm: Beschreibt im groben die Umgebung und den Einsatzzweck des Systems Aktivitätsdiagramm Beschreibt die Abfolge von Aktionen/Handlungen bei einer bestimmten Tätigkeit
Ablauf zur Nutzung der Pool-Räume im Rechenzentrum RZ-Account holen RZ-Account testen [Account funktioniert] [Account funktioniert nicht] Aufgaben im Pool lösen Aufgaben abrufen Aufgaben vorführen
Fragen? Questions? Fragen? Fragen? Questions? Fragen? Ques Fragen? Questions? Fragen? Questions? Fragen? Questions? Fragen? Questions? Fragen? Questions? Fragen? Questions? Questions? Fragen? Questions? estions? Fragen? Questions? Fragen? Questions? 31
Bis bald 32
Credits Erstellung und Zusammenstellung des Materials: Christian Maier (Zusammenstellung) Stephan Kessler (Überarbeitung und Erweiterung) 33