620.900 Propädeutikum zur Programmierung Andreas Bollin Institute für Informatik Systeme Universität Klagenfurt [email protected] Tel: 0463 / 2700 - 3516 Lösung der Aufgaben (1/2) ? Lösung Aufgabe 1: ? ISYS (ab) Maxmin (?N; ?max, ?min) Propädeutikum zur Programmierung – Teil 2 Seite 2 von 36 1 Lösung der Aufgaben (2/2) ? Lösung Aufgabe 2: ? Primtest (?N, ?Ergebnis) ISYS (ab) Propädeutikum zur Programmierung – Teil 2 Seite 3 von 36 Daten und Datentypen (1/5) ? Wesentliche Bezeichnungen: ? ? Literale (Zahlen 1,2,3,; „Textliteral“) Variablen (benannte Behälter) ? ? ? ? Konstanten Datentyp: ? ? Festlegung der Interpretation einer gespeicherten Bitfolge. Datentypen können sein: ? ? ? ISYS (ab) Inhalt (Wert und Typ) und Adresse (im Speicher des Rechners) Einfach (ganze Zahlen, ein Zeichen, logische Werte) Zusammengesetz (Zeichenfolgen, Strukturen) Haben Wertebereich (Wertemenge) und Operationen Propädeutikum zur Programmierung – Teil 2 Seite 4 von 36 2 Daten und Datentypen (2/5) ? Datentyp legt die Art der gespeicherten Information (und dadurch auch die Auswertungsmöglichkeit) fest. Beispiel: ? ? ? int zahl1 = 25; Operationen: +,-,*,/,%,<,> Digitale Wertedarstellung macht auch Probleme: ? ? ? ? ISYS (ab) Zeichendarstellung (chinesische Schriftzeichen) Digitalisierung Kodierung, Dekodierung von Symbolen (Noten, Icons) Transformation von Signalen (Sensorik) Propädeutikum zur Programmierung – Teil 2 Seite 5 von 36 Daten und Datentypen (3/5) ? Digitale Wertedarstellung? ? ? ? Intern werden Werte als Folge von 0en und 1en gespeichert. ...0100010010101... Operationen mit Binärzahlen sind auf Schaltkreisebene möglich! Einige relevante Ausdrücke: ? ? ? ? ? ISYS (ab) Bit: 0 oder 1 Byte: 8 Bit 1 KByte = 1024 Byte, 1 MByte = 1024 KByte, 1 GByte = 1024 MByte Eine mögliche Binärzahl: 01100110 Viele Möglichkeiten der Interpretationen der Zahlenfolge. Propädeutikum zur Programmierung – Teil 2 Seite 6 von 36 3 Daten und Datentypen (4/5) ? Umwandlung von Binärzahlen? Binärer Zahlraum: Basis = 2 ? Die Schreibweise 00001001 (Binär) bedeutet: ? 1*23 + 0*22 + 0*21 + 1*20 = 1*8 + 0*4 + 0*2 + 1*1 ? Weitere Beispiele: ? ? ? = = 9 (Dezimal) 10010110 = ? 01010101 = ? 00110110 = ? 11111111 = ? Lösung: 150, 54, 85, 255 ISYS (ab) Propädeutikum zur Programmierung – Teil 2 Seite 7 von 36 Daten und Datentypen (5/5) ? Umwandlung von Dezimalzahlen? ? ? Basis = 10 Aufgabe 3: einfacher Algorithmus für die Umwandlung einer Dezimalzahl in eine Binärzahl. ? ? ? ? Probleme: ? ? ? ISYS (ab) Ges.: Blockdiagramm Tipp: Division durch 2 und Modulo 2 Lösung bitte bis zur kommenden Stunde Wie stelle ich negative Zahlen dar? Wie viele Bits stehen mir eigentlich zur Verfügung? Siehe ESOP! Propädeutikum zur Programmierung – Teil 2 Seite 8 von 36 4 Datentypen in Java (1/11) ? In Java gibt es vier Gruppen einfacher Datentypen: ? ? ? ? ? Logischer Typ (boolean) Ganzzahl Typ (int, byte, short, long) Gleitpunkt Typ (float, double) Zeichentyp (char) Namen (Variablen, Konstanten) müssen meistens VOR deren Verwendung deklariert werden. ? ? ISYS (ab) Erhöht Korrektheit. Compiler kann Speicher reservieren. Propädeutikum zur Programmierung – Teil 2 Seite 9 von 36 Datentypen in Java (2/11) ? Logischer Typ (boolean) Speichert die logischen Werte true und false ? Beispiele: boolean a; boolean x,y,z; ? Operationen (Boolsche Algebra) ? ISYS (ab) x y !x x && y x || y true true false true true true false false false true false true true false true false false true false false Propädeutikum zur Programmierung – Teil 2 Seite 10 von 36 5 Datentypen in Java (3/11) ? Ganzzahltypen (byte, short, int, long) Typ Wertebereich byte -128 ... 127 (-27 ... 27–1) short -32768 ... 32767 int (-215 ... -2147483648 ... 2147483647 long ? Länge 263 ... 8 Bit 215-1) (-231 ... 16 Bit 231-1) 32 Bit 263-1 64 Bit Operationen: ? ? ? Vergleich: ==, !=, >, <, >=, <= Addition, Subtraktion Division / und Modulo % ISYS (ab) Propädeutikum zur Programmierung – Teil 2 Seite 11 von 36 Datentypen in Java (5/11) ? Gleitpunkttypen (float, double) ? Reelle Zahlen in Gleitkomma-Darstellung: ? ? Zahl = Mantisse * Basis Exponent Auch hier: Größe ist endlich! Typ Wertebereich Länge float 1,4 E-45 ... 3,4 E+38 32 Bit double 4,9 E-324 ... 1,7 E+308 64 Bit ? ISYS (ab) Problem der Genauigkeit der Zahlen. Propädeutikum zur Programmierung – Teil 2 Seite 13 von 36 6 Datentypen in Java (6/11) ? Zeichentyp (char). Typ zum Speichern einzelner Zeichen. ? Zuweisung von Literalen möglich. ? Literale werden durch (´) begrenzt. ? Basis: Unicode-Zeichensatz ? ? ? ? jedes Zeichen hat Nummer von 0 bis 65535. char c = 65; // für den Buchstaben ´A´ Es gibt einige spezielle Zeichen: ? ? ISYS (ab) ´\t´ ´\n´ // Tabulator // Zeilenvorschub Propädeutikum zur Programmierung – Teil 2 Seite 14 von 36 Datentypen in Java (7/11) ? Initialisierung ? Ohne explizite Initialisierung bei der VariablenDeklaration gelten folgende Initialwerte: ? ? ? ? Konvertierungen (Werteumwandlungen) sind möglich (Achtung bei ev. Genauigkeitsverlust!) ? ISYS (ab) byte, short, int, long, float, double sind 0 boolean ist false char = 0 Type Casting: x = (int) a/b; Propädeutikum zur Programmierung – Teil 2 Seite 15 von 36 7 Datentypen in Java (8/11) ? Variablen ? ? Die Definition hat i.A. folgende Form: Typenname VName [= Initialisierung] { , VName [= Initialisierung] } ; Beispiel: int dummy = 16; Konstanten ? Erhält den Wert bei der Initialisierung – Wert kann nicht mehr geändert werden. static final Typenname Konstantenname = Wert; Beispiel: ISYS (ab) static final int N = 100; Propädeutikum zur Programmierung – Teil 2 Seite 16 von 36 Datentypen in Java (9/11) ? Präzedenzregeln. Stärke der Bindung (in abnehmender Folge): 1. 2. 3. 4. ? Zusätzlich gilt: ? ? ? ISYS (ab) Klammerung Unäre Operationen (rechtsassoziativ) +, -, ! (logisches NICHT) Multiplikative Operationen *, /, %, && (logisches UND) Additive Operationen +,-,|| Gleichstarke binäre Operationen binden linksassoziativ Arithmetische Operationen sind stärker als Vergleiche Vergleiche binden stärker als logische Operationen Propädeutikum zur Programmierung – Teil 2 Seite 17 von 36 8 Datentypen in Java (10/11) ? Zusätzlich gilt: ? ? ? ? Gleichstarke binäre Operationen binden linksassoziativ Arithmetische Operationen sind stärker als Vergleiche Vergleiche binden stärker als logische Operationen Beispiele: ? a+b>c+d a || b > c || d ? Lösung: (a+b) > (c + d) ? ISYS (ab) == ? == ? a || (b > c) || d Propädeutikum zur Programmierung – Teil 2 Seite 18 von 36 Datentypen in Java (11/11) ? (Interessante) Beispiele – zum Nachdenken: ? Geg.: ? Ges.: ? ? ISYS (ab) byte b = (byte) 16; long k = 3; float f = 2.0f; b – 17 = ? (Wert + Typ?) 3/2*f=? 8–b*k=? 3 / f * 2.0 = ? Lösung: b – 17 = 1 (int) 3 / 2 * f = 2.0f (float) 8 – b * k = -40 (long) 3 / f * 2.0 = 3.0 (double) Beobachtung: „Größerer“ Typ gewinnt! Für Java ist 2 ein Integer bzw. 2.0 double! Propädeutikum zur Programmierung – Teil 2 Seite 19 von 36 9 Grundanweisungen (1/10) ? Wir haben nun alle Grundlagen für einfache Java- Programme beisammen. Was noch fehlt ist der „Leim“: Grundanweisungen in Java: (Prinzipien der strukturierten Programmierung) ? ? ? ? Zuweisung (=) Verzweigung (if) Wiederholung (while, for) Anweisungsfolge (Sequenz, ; ) ISYS (ab) Propädeutikum zur Programmierung – Teil 2 Seite 20 von 36 Grundanweisungen (2/10) ? Anweisungsfolge ? Anweisungen werden durch (;) abgeschlossen x = 100; y = 200; z = x+y; ? Spezieller Leim: Block ? Anweisungen können durch einen Block ersetzt werden. Allgemeine Form: { Deklarationen Anweisungsfolge } ? ISYS (ab) Blöcke können beliebig geschachtelt werden Propädeutikum zur Programmierung – Teil 2 Seite 21 von 36 10 Grundanweisungen (3/10) ? Zuweisung - Allgemeine Form: ? ? ? ? ? Variable = Ausdruck; Die Adresse der Variablen wird berechnet, Der Ausdruck auf der rechten Seite wird berechnet, Das Ergebnis wird der linken Seite zugewiesen. Typanpassung möglich. Bei mehreren Zuweisungen ohne Klammerung, wird von rechts beginnend gearbeitet: ? ? ? ? ISYS (ab) int a,b,c,d = 100; a = b = c = d; a=b=c+d a = 3*(b=c+d) + 4 // // // // a,b,c noch unbestimmt, d=100 a=(b=(c=d)), alle = 100 a, b = 200, c, d = 100 a = 604, b = 200, c,d, = 100 Propädeutikum zur Programmierung – Teil 2 Seite 22 von 36 Grundanweisungen (4/10) ? Verzweigung – Allgemeine Form: if ( B ) { Anweisung1 } oder if ( B ) { Anweisung1 } else Anweisung2 } ? ? ? ? ISYS (ab) Bedingung B (bool) wird ausgewertet Ist B wahr, wird Anweisung1 ausgeführt Ist B falsch, wird (optionaler) else-Zweig ausgeführt. Beispiel: if (x < y) { min = x; } else { min = y; } Besteht die Anweisung (der Block) nur aus einer Aktion, so kann in Java die Klammer {} weggelassen werden! Propädeutikum zur Programmierung – Teil 2 Seite 23 von 36 11 Grundanweisungen (5/10) ? Wiederholung – while-Schleife ? Allgemeine Form: while (Bedingung) { Schleifenkörper } oder do { Schleifenkörper } while (Bedingung) ? ? ? ? ? ISYS (ab) while: Bedingung wird ausgewertet Ist sie wahr, so wird Schleifenkörper ausgeführt Ist sie falsch: nächste Anweisung do: Schleifenkörper ausgeführt, dann wie while Hier gilt wieder: Besteht der Schleifenkörper nur aus einer Anweisung, kann die Klammer {} weggelassen werden! Propädeutikum zur Programmierung – Teil 2 Seite 24 von 36 Grundanweisungen (6/10) ? Beispiel 2: ? Was macht folgendes Programmfragment? int d; int v; int result = 0; while ( d >= v ) { result = result + 1; d = v – d; } // while ? ISYS (ab) Ist d = 5 und v = 2, so wird Schleife 1x durchlaufen! Propädeutikum zur Programmierung – Teil 2 Seite 25 von 36 12 Grundanweisungen (7/10) ? Wiederholung – for-Schleife for (Vorbereitung; Bedingung; Fortschaltung) { Schleifenkörper } ? Vorbereitung: Deklarationen, Anweisungen ? ? Laufvariablen initialisieren, Deklaration bis Schleifenende gültig Bedingung: ausgewertet, wenn wahr, so wird der Schleifenkörper ausgeführt und danach die Fortschaltung ausgeführt, danach wird wieder die Bedingung geprüft for (int i = 0; i < 10; i = i+1) { j = j+1; k = k + i; } ISYS (ab) Propädeutikum zur Programmierung – Teil 2 Seite 26 von 36 Grundanweisungen (8/10) ? Beispiel 3: ? int Algo (int n) { int s = 0; Was tut folgendes ProgrammFragment? while (n >= 10) { s = s + n % 10; n = n / 10; } ? s = s + n; Lsg.: Quersumme return s; } ISYS (ab) Propädeutikum zur Programmierung – Teil 2 Seite 27 von 36 13 Grundanweisungen (9/10) ? Beispiel 4: Fehlersuche static void Algo (int n) { char s = 65; for (int i; i <= n; i++) { System.out.println (s); s = s + 1; } } ISYS (ab) Propädeutikum zur Programmierung – Teil 2 Seite 28 von 36 Grundanweisungen (10/10) Beispiel 5: Programmanalyse ? class Unbekannt4 { static int Algo (int a, int b){ while (a != b) if (a > b) a = a - b; else b = b - a; return a; } public static void main (String [] args) { System.out.println ("Algo (24,21) liefert:" + Algo(24,21)); } } ISYS (ab) Propädeutikum zur Programmierung – Teil 2 Seite 29 von 36 14 Weitere Informationen (1/2) ? Literatur ? ? ? ? Sprechen Sie Java. Hanspeter Mössenböck. dpunkt.Verlag, 2001. Java in a Nutshell. David Flanagan. O‘Reilly, 1999. Lehrbuch der Programmierung mit Java. Klaus Echtle, Michael Goedicke. dpunkt.Verlag, 2000. Online-Dokumentation - Links ? ? ? ISYS (ab) www.boku.ac.at/javaeinf/jein.html java.sun.com/j2se/1.3/docs.html bscw-itec.uni-klu.ac.at Propädeutikum zur Programmierung – Teil 2 Seite 35 von 36 Weitere Informationen (2/2) ? Weitere interessante Links ? ? ? ? ? ISYS (ab) forum.java.sun.com Entwicklerplatform www.google.de Suchmaschine www.cetus-links.org Objektorientierung, Linkssammlung www.ifi.uni-klu.ac.at/Courses-Exams/courses/005 SW1 Homepage www.ifi.uni-klu.ac.at/Andreas.Bollin/private/lehre.html Weitere interessante Lehrveranstaltungen ? Propädeutikum zur Programmierung – Teil 2 Seite 36 von 36 15