Datentypen - Grundanweisungen

Werbung
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
Herunterladen