• Keine Ergebnisse gefunden

252-0027 Einführung in die Programmierung 2.2 Typen und Variablen

N/A
N/A
Protected

Academic year: 2022

Aktie "252-0027 Einführung in die Programmierung 2.2 Typen und Variablen"

Copied!
60
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

252-0027

Einführung in die Programmierung 2.2 Typen und Variablen

Thomas R. Gross

Department Informatik ETH Zürich

(2)

Übersicht

§ 2.2 Typen und Variablen

§ Typen: primitive Types und String

§ Deklaration von Variablen

§ 2.3 Schleifen (Loops)

§ 2.3.1 “for” Loops

§ 2.3.2 Verschachtelte Schleifen

§ 2.4 Methoden mit Parametern

§ 2.5 “if”-Anweisungen

§ 2.6 Nochmals Schleifen

§ “while” Loops

(3)

Ausdrücke (“Expressions”)

§ Ausdruck (“expression”) für einen Typ: Ein Wert oder Operanden und Operator(en) die einen Wert berechnen

Beispiele für int: 1 + 4

2 * 4 * 3

7 + ( 2 + 6 )* 5

§ Der einfachste Ausdruck ist ein Literal (“literal value”)

§ Ein Wert der direkt im Programm erscheint (z.B. 42)

§ Komplexe Ausdrücke können Teilausdrücke enthalten (später mehr)

§ (Teil)Ausdruck kann Operand sein

(4)
(5)

Arithmetische Operatoren

§ Operator: Verknüpft Werte oder Ausdrücke.

§ + Addition

§ - Subtraktion (oder Negation)

§ * Multiplikation

§ / Division

§ % Modulus (Rest)

§ Während der Ausführung eines Programms werden seine Ausdrücke ausgewertet (“evaluated”)

§ 1 + 1 ergibt 2

§ System.out.println(3 * 4); ergibt (druckt) 12

§ Wie würden wir den Text 3 * 4 drucken? 145

(6)
(7)

EBNF Beschreibung Ausdruck (Expression)

number integer | digit { digit } . digit { digit } op + | - | * | / | %

atom number | identifier term( expr ) | atom exprterm { op term }

1. Nicht die vollständige Beschreibung für Java Ausdrücke 2. Beschreibt nur die Syntax (die Form)

(8)

Arithmetische Operatoren

§ Operator: Verknüpft Werte oder Ausdrücke.

§ + Addition

§ / Division

….

§ Werte haben einen [festgelegten] Typ

§ Evaluation eines Ausdrucks ergibt Wert eines Typs

§ EBNF beschreibt nur Form (int / int ergibt ? , int + long ergibt ? )

§ Operator : Typ_A Typ_A ergibt TypA

Typ_A Typ_B ergibt ???? (hängt von ⨂, Typ_A, Typ_B ab – später)

(9)
(10)

int Division mit /

§ Wenn wir ganze Zahlen dividieren ist der Quotient auch wieder eine ganze Zahl.

§ 14 / 4 ergibt 3, nicht 3.5

3 4 52

4 ) 14 10 ) 45 27 ) 1425

12 40 135

2 5 75 54 21

(11)

int Division mit /

§ Weitere Beispiele:

§ 32 / 5 ergibt 6

§ 84 / 10 ergibt 8

§ 156 / 100 ergibt 1

§ -4 / 3 ergibt -1

§ -101 / 9 ergibt -11

§ Division durch 0 führt zu einem Fehler während der Ausführung des Programmes

(12)

int Rest mit %

§ Der % Operator liefert den Rest der Division ganzer Zahlen

§ 14 % 4 ergibt 2

§ 218 % 5 ergibt 3

3 43

4 ) 14 5 ) 218

12 20

2 18

15 3

(13)

int Rest mit %

§ Einsatz des % Operators:

§ Finde letzte Ziffer einer ganzen Zahl : 230857 % 10 ist 7

§ Finde letzte 4 Ziffern: 658236489 % 10000 ist 6489

§ Entscheide ob Zahl gerade ist: 7 % 2 ergibt 1, 42 % 2 ergibt 0

(14)

Was ist das Ergebnis von

1. 43 / 3

2. 10 / 4

3. -23 / 11

4. 45 % 6

5. 2 % 2

6. 8 % 20

7. 11 % 0

(15)
(16)

Ausdrücke mit mehreren Operanden

§ Hat ein Ausdruck mehrere Operanden X, Y, Z (mit Operatoren ) so müssen wir festlegen, was

X Y Z

bedeutet.

§ 7 + 5 + 3

§ 64 / 8 / 2

à (7 + 5) + 3

à (64 / 8 ) / 2 und nicht 64 / (8 / 2)

(17)

Ausdrücke mit mehreren Operanden

§ Hat ein Ausdruck mehrere Operanden X, Y, Z (mit Operatoren) so müssen wir festlegen, was

X Y Z

bedeutet.

§ 7 + 5 + 3

§ 64 / 8 / 2

§ Wird durch die Assoziativität der Operatoren bestimmt à (7 + 5) + 3

à (64 / 8 ) / 2 und nicht 64 / (8 / 2)

(18)

Assoziativität ("Associativity") -- Bindung

§ Die Assoziativität eines Operators hält fest wie ein Operand zu verwenden ist:

X Y Z

§ Y ist mit dem linken Operator verknüpft ("left—associative",

"left—to—right associative")

X Y Z = (X Y ) Z

§ Y ist mit dem rechten Operator verknüpft ("right—associative",

"right—to—left associative") X Y Z = X ( Y Z )

(19)
(20)

Assoziativität

§ Y ist mit dem linken Operator verknüpft (links—assoziativ,

"left—associative")

X Y Z = (X Y ) Z

Viele der uns bekannten Operatoren: +, *,

§ Y ist mit dem rechten Operator verknüpft (rechts—assoziativ,

"right—associative")

Später werden wir Beispiele sehen (es gibt einige!)

§ Es gibt Operatoren die sind assoziativ (in der Mathematik)

§ Rechts—assoziativ und links—assoziativ: (X Y ) Z = X ( Y Z)

(21)
(22)

Aber es gibt noch mehr zu bedenken …

§ Was für einen Wert erhalten wir für 2 + 6 * 5

(23)
(24)

Rang Ordnung

§ Hat ein Ausdruck mehrere Operanden X, Y, Z (mit

Operatoren und ) so müssen wir festlegen, was X ⊙ Y ⨂ Z

bedeutet. ( und sind unterschiedliche Operatoren)

Operand Y kann zuerst mit oder verknüpft werden

§ Die Rang Ordung von und entscheidet.

(25)
(26)

Rang Ordnung ("Precedence")

§ Der Operand (Y) in X Y Z wird mit dem Operator verknüpft, der den höheren Rang hat.

1 + 3 * 4

(27)

Rang Ordnung ("Precedence")

§ Der Operand (Y) in X Y Z wird mit dem Operator verknüpft, der den höheren Rang hat.

1 + 3 * 4 1 + 3 * 4 1 + 12

1 + 12 13

(28)

Rang Ordnung

6 + 8 / 2 * 3 6 + 4 * 3 6 + 12

18

(29)

Rang Ordnung

6 + 8 / 2 * 3 links anfangen 6 ist Literal

8 ist Literal

/ hat höheren Rang als + links anfangen: / zuerst 6 + 4 * 3 int Division ergibt 4

* hat höheren Rang als + 6 + 12 nur noch ein Operator

Resultat:

18

(30)

Operanden und Operatoren

§ Operand wird vom Operator mit höherer Rang Ordnung (“precedence”) verwendet

§ Wenn zwei Operatoren die selbe Rang Ordnung haben, dann entscheidet die Assoziativität

§ Wenn zwei Operatoren die selbe Rang Ordnung und

Assoziativität haben, dann werden die (Teil)Ausdrücke von links nach rechts ausgewertet.

§ Wenn etwas anderes gewünscht wird: Klammern verwenden!

(31)

Operanden und Operatoren

§ Klammern bestimmen abweichende die Gruppierung:

(1 + 3) * 4 ergibt 16

§ Leerzeichen (oder Kommentare) haben keinen Einfluss auf die Reihenfolge der Auswertung

1+3 * 4-2 ergibt 11 (trotzdem keine gute Idee!)

(32)

Operanden und Operatoren

§ Gleiche Rang Ordnung und Assoziativität:

Ausdruck1 + (Ausdruck2 + Ausdruck3) * Ausdruck4

(33)
(34)

Operanden und Operatoren

§ Gleiche Rang Ordnung und Assoziativität:

Ausdruck1 + (Ausdruck2 + Ausdruck3) * Ausdruck4

1 2

3

4 5

6 7

(35)

Precedence Beispiele

§ 1 * 2 + 3 * 5 % 4

§ \_/

|2 + 3 * 5 % 4

§ \_/

2 + 15| % 4

§ \___/

2 + 3|

§ \________/

| 5

n 1 + 8 % 3 * 2 - 9

n \_/

1 + 2| * 2 - 9

n \___/

1 + |4 - 9

n \______/

|5 - 9

n \_________/

| -4

(36)

Precedence Beispiele

Welche Werte ergeben die Auswertung dieser Ausdrücke?

§ 9 / 5

§ 695 % 20

§ 7 + 6 * 5

§ 7 * 6 + 5

§ 248 % 100 / 5

§ 6 * 3 - 9 / 4

§ (5 - 7) * 4

§ 6 + (18 % (17 - 12))

(37)

9 / 5 ==> 1

695 % 20 ==> 15 7 + 6 * 5 ==> 37 7 * 6 + 5 ==> 47

248 % 100 / 5 ==> 9 6 * 3 - 9 / 4 ==> 16 (5 - 7) * 4 ==> -8

6 + (18 % (17 - 12)) ==> 9

(38)

Reelle Zahlen (Typ double )

§ Beispiele: 6.022 , -42.0 , 2.143e17

§ Hinzufügen von .0 oder . an eine ganze Zahl macht diese zu double.

§ Die Operatoren + - * / % () sind auch für double definiert.

§ / berechnet ein genaues Resultat: 15.0 / 2.0 ergibt 7.5

§ Rang Ordnung (der Auswertung) ist die selbe: () vor * / % vor + -

(39)

Beispiel mit reellen Zahlen

§ 2.0 * 2.4 + 2.25 * 4.0 / 2.0

§ \___/

4.8| + 2.25 * 4.0 / 2.0

§ \___/

4.8 + 9.0| / 2.0

§ \_____/

4.8 + 4.5|

§ \____________/

9.3|

(40)

Kombinationen von Typen

§ Wenn int oder long und double kombiniert werden dann ist das Ergebnis double.

§ 4.2 * 3 ergibt 12.6

§ Auch dann wenn das Result als int darstellbar wäre

§ 4.5 * 2 ergibt 9.0

§ Umwandlung (“conversion”) von einem Typ in einen anderen

§ Wird für jeden Operator separat gemacht und beeinflusst nur dessen Operanden

§ Automatisch (werden später sehen wie wir Umwandlungen erzwingen

(41)

Ausdrücke mit verschiedenen Typen

§ Umwandlung geschieht für jeden Operator separat …

§ 7 / 3 * 1.2 + 3 / 2

§ \_/

|2 * 1.2 + 3 / 2

§ \___/

2.4| + 3 / 2

§ \_/

2.4 + 1|

§ \________/

3.4|

3 / 2 ergibt 1 nicht 1.5.

2.0 + 10 / 3 * 2.5 - 6 / 4

\___/

2.0 + 3| * 2.5 - 6 / 4

\_____/

2.0 + 7.5| - 6 / 4

\___________/

9.5| - 6 / 4

\_/

9.5 - |1

\__________/

8.5|

(42)

Ausdrücke mit verschiedenen Typen

Bitte evaluieren Sie diese Ausdrücke

§ 4 + 8 / 3.0 * 6 + 5

§ 9.0 / (2.0 / 3) + 7

§ 7 % 3 * 2 + 4.0 * 3 / 2

§ 9 / (2 / 3) + 7

§ 20 % 8 + 15 / 27 / (3 % 6)

(43)
(44)

Typ Umwandlungen

§ Ausser impliziten Umwandlungen gibt es die Möglichkeit, explicit eine Umwandlung vorzunehmen.

§ implizit: 1.0 / 4;

§ explizite Umwandlungen heissen "cast" oder "type cast"

§ type cast: Umwandlung von einem Typ in den anderen.

§ Um int in double umzuwandeln damit / das gewünschte Ergebnis liefert

§ Um einen double Wert in einen int Wert zu verwandeln

(45)

Typ Umwandlungen

§ Syntax:

(type) expression

§ Beispiele:

(double) 19 / 5; // 3.8 (int) ((double) 19 / 5) ; // 3

(46)

Typ Umwandlungen

§ (type) ist ein Operator

§ Der "cast operator"

§ Höherer Rang (Präzedenz) als arithmetische Operatoren

§ Rechts-assoziativ

§ D.h. wandelt nur den Operanden direkt rechts daneben um

§ Für alle Basistypen verfügbar

(47)
(48)

Bemerkungen über explizite Umwandlungen

§ Typ Umwandlungen hat hohe Präzedenz und der Cast Operator bezieht sich nur auf den (Teil)Ausdruck direkt neben sich.

§ (double) 1 + 1 / 2; // 1.0

§ 1 + (double) 1 / 2; // 1.5

§ Mit Klammern kann man die Reihenfolge der Auswertung verändern.

§ (double) (2 + 1 + 1) / 3; // 1.3333333333333333

(49)

Rang Ordnung …

§ Die letzten Slides haben die Java Sicht gezeigt.

§ Andere Programmiersprachen haben (eventuell) andere Regeln

§ Notwendigkeit von Typ Information

§ Rang Ordnung sollte festgelegt sein

§ Nicht immer was man erwartet

§ Beispiel: Microsoft Excel

(50)
(51)
(52)
(53)
(54)
(55)

Typen

§ primitive types: int, long, double (es gibt noch mehr …)

§ Typen aus der Java Bibliothek: String

(56)

String Operationen

§ String Verkettung (“concatenation”): Der Operator + erlaubt es, zwei Strings zu verketten (verknüpfen)

"hello" + ”world" ergibt "helloworld"

"a" + "b" + "c" ergibt "abc"

§ Der Operator + mit einem String und einem anderen Wert als Operanden ergibt einen längeren String.

§ Automatische Konvertierung (siehe 2.1, int und double)

"hello" + 42 ergibt "hello42"

1 + "abc" + 2 ergibt "1abc2"

(57)

Weitere String Operationen

1 + 2 + "abc" ergibt "3abc"

"abc" + 9 * 3

"1" + 1

4 - 1 + "abc"

(58)

Weitere String Operationen

1 + 2 + "abc" ergibt "3abc"

"abc" + 9 * 3 ergibt "abc27"

"1" + 1 ergibt "11"

4 - 1 + "abc" ergibt "3abc"

(59)
(60)

String Operationen

§ Können + verwenden um einen String und den Wert eines Ausdrucks auszugeben.

§ System.out.println("Note: " + (4.8 + 5.4) / 2);

Output: Note: 5.1

Warum brauchen wir ( und )?

Referenzen

ÄHNLICHE DOKUMENTE

Um Eclipse einfacher zu starten, können Sie eine Verknüpfung erstellen.. Gehen Sie mit Ihrem Datei-Explorer in den Ordner, wo Sie Eclipse

§ Programm: Folge von Anweisungen, die von einem Computer ausgeführt werden (können).. § Programm realisiert

Ihr Programm muss diese Bedingung nicht zwingend testen, Sie können aber eine Überprüfung implementieren. Wenn zahl diese Bedingung nicht erfüllt, dann ist das Ergebnis des

§ Schiedsrichter entscheidet ob das Symbol legal ist oder nicht (für diese EBNF Beschreibung)2. § Symbol legal gemäss einer Regel: alle Buchstaben des Symbols stimmen mit den

§ Eine Variable die in einer for Schleife deklariert wurde kann nur im Rumpf der Schleife verwendet werden. § Eine Variable die in einer Methode deklariert wurde existiert nur in

§ Eine Aussage gilt für den Zustand eines Programms wenn die Auswertung der Aussage mit dem Zustand das Ergebnis true ergibt. § Die Auswertung jedes Variable ergibt den Wert

Eclipse hilft Ihnen dabei, indem es anzeigt, wo die Fehler sind (und eine mehr oder weniger hilfreiche Fehlermeldung dazu ausgibt), aber Sie müssen selber herausfinden, was das

Beachten Sie ausserdem, dass Eclipse Ihnen beim Ausführen des Programms möglicherweise eine Fehlermeldung anzeigt, da das Programm “FollerVehler.java” noch Fehler enthält, die