Hello World! Eine Einführung in das Programmieren Variablen · Slide 27 Brückenkurs Hello World!...

31
Hello World! Eine Einführung in das Programmieren Variablen Görschwin Fey Institute of Embedded Systems Hamburg University of Technology

Transcript of Hello World! Eine Einführung in das Programmieren Variablen · Slide 27 Brückenkurs Hello World!...

Page 1: Hello World! Eine Einführung in das Programmieren Variablen · Slide 27 Brückenkurs Hello World! int a = 3 Scopes Jede Sequenz von Anweisungen hat einen eigenen Geltungsbereich

Hello World!

Eine Einführung in das Programmieren

Variablen

Görschwin Fey

Institute of Embedded Systems

Hamburg University of Technology

Page 2: Hello World! Eine Einführung in das Programmieren Variablen · Slide 27 Brückenkurs Hello World! int a = 3 Scopes Jede Sequenz von Anweisungen hat einen eigenen Geltungsbereich

Brückenkurs Hello World!Slide 2

Wie werden Daten in Programmen gespeichert und manipuliert?

10.10.2019 Variablen 2

Page 3: Hello World! Eine Einführung in das Programmieren Variablen · Slide 27 Brückenkurs Hello World! int a = 3 Scopes Jede Sequenz von Anweisungen hat einen eigenen Geltungsbereich

Brückenkurs Hello World!Slide 3

Darstellung von Werten

Variablen

0 0 0 0 1 0 11

8 Register bzw. 8 Bit

= 1 Byte

=„8 mal 2 Möglichkeiten“

zur Darstellung von

Werten

28 = 2 ∙ 2 ∙ 2 ∙ 2 ∙ 2 ∙ 2 ∙ 2 ∙ 2 = 256

Erst durch einen Datentyp wird der Binärdarstellung ein Wert

zugeordnet!

10.10.2019 3

Page 4: Hello World! Eine Einführung in das Programmieren Variablen · Slide 27 Brückenkurs Hello World! int a = 3 Scopes Jede Sequenz von Anweisungen hat einen eigenen Geltungsbereich

Brückenkurs Hello World!Slide 4

Natürliche Zahlen

Variablen

0 0

0 1

1 0

1 1

„4 Mögliche“

Belegungen

bei 2 Bits

Jedem Bit wird als Wertigkeit die Anzahl der vorherigen möglichen

Belegungen zugeordnet.

27 26 25 24 23 21 2022

128 64 32 16 8 2 14

Das 3. Bit hat

Wertigkeit 4

10.10.2019 4

Page 5: Hello World! Eine Einführung in das Programmieren Variablen · Slide 27 Brückenkurs Hello World! int a = 3 Scopes Jede Sequenz von Anweisungen hat einen eigenen Geltungsbereich

Brückenkurs Hello World!Slide 5

Natürliche Zahlen

Variablen

0 0

0 1

1 0

1 1

„4 Mögliche“

Belegungen

bei 2 Bits

Jedem Bit wird als Wertigkeit die Anzahl der vorherigen möglichen

Belegungen zugeordnet.

27 26 25 24 23 21 2022

128 64 32 16 8 2 14

255

+

28 = 2 ∙ 2 ∙ 2 ∙ 2 ∙ 2 ∙ 2 ∙ 2 ∙ 2 = 256

Auch die „0“ ist ein Wert: 0 0 0 0 0 0 00

10.10.2019 5

Page 6: Hello World! Eine Einführung in das Programmieren Variablen · Slide 27 Brückenkurs Hello World! int a = 3 Scopes Jede Sequenz von Anweisungen hat einen eigenen Geltungsbereich

Brückenkurs Hello World!Slide 6

Natürliche Zahlen

Variablen

Zur Umrechnung der Binärdarstellung in das Dezimalzahlsystem werden…

1. die Bits mit ihrer Wertigkeit multipliziert

2. die Ergebnisse miteinander addiert

Mit 8 Bit lassen sich positive Werte nur im Bereich 0 bis 255 darstellen.

1 1 1 0 1 0 11Binär

128 64 32 16 8 2 14Wertigkeit

128 64 32 0 8 0 14Ergebnis

Multiplikation

237

+

Dezimal

10.10.2019 6

Page 7: Hello World! Eine Einführung in das Programmieren Variablen · Slide 27 Brückenkurs Hello World! int a = 3 Scopes Jede Sequenz von Anweisungen hat einen eigenen Geltungsbereich

Brückenkurs Hello World!Slide 7

Ganze Zahlen

Variablen

1 1 1 0 1 0 11

-128 64 32 16 8 2 14

-128 64 32 0 8 0 14

1 1 1 0 1 0 11

128 64 32 16 8 2 14

128 64 32 0 8 0 14

237 109-128 +

-19

+ +

unsigned char signed char

Erinnerung: 2er-Komplement 𝑣2 𝑧𝐵 = (−2)𝑛∗ 𝑧𝑛 + σ𝑗=0𝑛−1 𝑧𝑗𝐵

𝑗

Tatsächliche Darstellung ist vom Rechner abhängig

10.10.2019 7

Page 8: Hello World! Eine Einführung in das Programmieren Variablen · Slide 27 Brückenkurs Hello World! int a = 3 Scopes Jede Sequenz von Anweisungen hat einen eigenen Geltungsbereich

Brückenkurs Hello World!Slide 8

Datengröße

Variablen

1 1 1 0 1 0 11

0 0 1 0 1 1 11

1 1 0 1 0 1 00

8 Bits

1 Byte

16 Bits

2 Byte

32 Bits

4 Byte

Der Arbeitsspeicher ist in Bytes organisiert.

Wenn ein Byte nicht reicht, dann nimmt man einfach mehr!

256 Werte

65536 Werte

4294967296 Werte

10.10.2019 8

Page 9: Hello World! Eine Einführung in das Programmieren Variablen · Slide 27 Brückenkurs Hello World! int a = 3 Scopes Jede Sequenz von Anweisungen hat einen eigenen Geltungsbereich

Brückenkurs Hello World!Slide 9

Primitive Datentypen in C++

Datentyp Bit Wertebereich Anfang Wertebereich Ende

char 8 -128 127

unsigned char 8 0 255

short 16 -32 768 32 767

unsigned short 16 0 65 532

int 32 -2 147 483 648 2 147 483 647

unsigned int 32 0 4 294 967 295

long 64 -9 233 372 036 854 755 808 9 233 372 036 854 755 807

unsigned long 64 0 18 466 744 073 701 511 613

float 32 1.2 ∙ 10-38 3.4 ∙ 1038

double 64 2.2 ∙ 10-308 1.8 ∙ 10308

Variablen10.10.2019 9

sizeof(Typ) liefert Größe von Typ in Byte

Page 10: Hello World! Eine Einführung in das Programmieren Variablen · Slide 27 Brückenkurs Hello World! int a = 3 Scopes Jede Sequenz von Anweisungen hat einen eigenen Geltungsbereich

Brückenkurs Hello World!Slide 10

ASCII-Standard

Um Schriftzeichen bzw. Symbole abzuspeichern wird eine Zuordnung bzw.

festgelegte Codierung benötigt.

Weit verbreitet ist der ASCII-Standard → Ein Wert wird eindeutig einem

Zeichen zugeordnet.

Beispiel: entspricht „z“

entspricht „€“

Auch Sonderzeichen wie z.B. „Zeilenumbruch“ haben einen Code

Im Internet lassen sich diverse ASCII-Tabelle finden, in denen die

Zuordnung beschrieben wird.

Variablen

7A

80

10.10.2019 10

Page 11: Hello World! Eine Einführung in das Programmieren Variablen · Slide 27 Brückenkurs Hello World! int a = 3 Scopes Jede Sequenz von Anweisungen hat einen eigenen Geltungsbereich

Brückenkurs Hello World!Slide 11

Variablen

Das Anlegen der Variable erfolgt in zwei Schritten:

1. Deklaration – Speicherplatz für die Variable reservieren

• Datentyp legt fest, wieviel Speicher reserviert werden muss

• Die Variable braucht einen Namen bzw. einen Bezeichner

2. Initialisieren – Der Variablen den ersten Wert zuweisen

• Vor der Initialisierung hat die Variable keinen wohldefinierten Wert

• Der Inhalt des reservierten Speichers wird nach der Vorschrift des

Datentyps interpretiert

Variablen

Datentyp Bezeichner;

Bezeichner = Wert;

10.10.2019 11

Page 12: Hello World! Eine Einführung in das Programmieren Variablen · Slide 27 Brückenkurs Hello World! int a = 3 Scopes Jede Sequenz von Anweisungen hat einen eigenen Geltungsbereich

Brückenkurs Hello World!Slide 12

Variablen

Die Variable kann auch in einem Schritt deklariert und initialisiert werden.

Variablen

Datentyp Bezeichner = Wert;

int a;

a = 3;

Beispiel: getrennte Deklaration und Initialisierung

Beispiel: gemeinsame Deklaration und Initialisierung

int a = 3;

Beide Varianten funktionieren auch mit mehreren Variablen gleichzeitig:

int a,b;

a = 3;

b = 3;

int a = 3, b = 3;

10.10.2019 12

Page 13: Hello World! Eine Einführung in das Programmieren Variablen · Slide 27 Brückenkurs Hello World! int a = 3 Scopes Jede Sequenz von Anweisungen hat einen eigenen Geltungsbereich

Brückenkurs Hello World!Slide 13

Bezeichner

1. Der Bezeichner kann aus den folgenden Zeichen gebildet werden.

2. Der Bezeichner KANN Ziffern enthalten, darf aber NICHT mit einer

Ziffer beginnen.

3. Schlüsselwörter von C++ sind KEINE zulässigen Bezeichner.

Variablen

$ a b c d e f g h i j k l m n o p q r s t u v w x y z

_ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

1 2 3 4 5 6 7 8 9 0

10.10.2019 13

Page 14: Hello World! Eine Einführung in das Programmieren Variablen · Slide 27 Brückenkurs Hello World! int a = 3 Scopes Jede Sequenz von Anweisungen hat einen eigenen Geltungsbereich

Brückenkurs Hello World!Slide 14

Beispiel: Bezeichner

Die Umlaute ä, ö, ü und ß sind in Bezeichnern nicht erlaubt.

Variablen

sonderMüll

kunde_straße

Ölstand

3Rad

while

Nichtzulässige Bezeichner

_unterstrich

__2Unterstriche

whileTrue

X

kuehlung_an

Zulässige Bezeichner

Tipp: Programme sind besser lesbar und verständlicher durch

• aussagekräftige Bezeichner wie z.B. reifenDruck oder

speed_kmh

• englischsprachige Bezeichner bevorzugen; so werden Umlaute

vermieden

10.10.2019 14

Page 15: Hello World! Eine Einführung in das Programmieren Variablen · Slide 27 Brückenkurs Hello World! int a = 3 Scopes Jede Sequenz von Anweisungen hat einen eigenen Geltungsbereich

Brückenkurs Hello World!Slide 15

Was ist ein Operator?

Variable Operator Variable

10.10.2019 Variablen

Ergebnis der Operation

• Dient der Manipulation von Variablenwerten und liefert ein Ergebnis• Funktion, die von einem Operator implementiert wird, ist abhängig von

Typen der Variablen, auf die er angewendet wird

• Beispiel:Binärer Operator wird auf zwei Variablen angewendet:

15

Page 16: Hello World! Eine Einführung in das Programmieren Variablen · Slide 27 Brückenkurs Hello World! int a = 3 Scopes Jede Sequenz von Anweisungen hat einen eigenen Geltungsbereich

Brückenkurs Hello World!Slide 16

z = x % y; 3Modulo-Operation

Rest der ganzzahligen Division

Rudimentäre Operationen

10.10.2019 Variablen

int x = 7;

int y = 4;

int z;

z = x / y;

z = x + y; 11

z = x - y; 3

z = x * y; 28

1

7 / 4 = 1 Rest 3

Ganzzahlige Divisonbei Anwendung auf int

übliche Division bei float

16

Page 17: Hello World! Eine Einführung in das Programmieren Variablen · Slide 27 Brückenkurs Hello World! int a = 3 Scopes Jede Sequenz von Anweisungen hat einen eigenen Geltungsbereich

Brückenkurs Hello World!Slide 17

Increment und Decrement

Addiert 1 zu einer Variablen

10.10.2019 Variablen

++

Inkrement

--

Dekrement

Subtrahiert 1 von einer Variablen

int a = 5;

a++; // a ist 6

a--; // a ist 5

Beispiel:Das Addieren / Subtrahieren erfolgt

nach der Anweisung.

int a = 5, b = 5, c;

c = 3 + --a; // c ist 7; a ist 4

c = 3 + b--; // c ist 8; b ist 4

17

Subtraktion vor der Anweisung!

Page 18: Hello World! Eine Einführung in das Programmieren Variablen · Slide 27 Brückenkurs Hello World! int a = 3 Scopes Jede Sequenz von Anweisungen hat einen eigenen Geltungsbereich

Brückenkurs Hello World!Slide 18

Vergleiche und Relationen

10.10.2019 Variablen

==

Gleichheit

!=

Ungleichheit

>=

größer gleich

<=

kleiner gleich

<

echt kleiner

>

echt größer

int x = 7;

int y = 4;

x == y;

x != y;

Inhalt von x

und y

vergleichen.

3 > 3; //False

3 >= 3; //True

Reihenfolge der Zeichen wie gesprochen

z. B. kleiner (<) gleich (=)

Was ist das Ergebnis einer Vergleichsoperation?

18

Page 19: Hello World! Eine Einführung in das Programmieren Variablen · Slide 27 Brückenkurs Hello World! int a = 3 Scopes Jede Sequenz von Anweisungen hat einen eigenen Geltungsbereich

Brückenkurs Hello World!Slide 19

Logisch Vergleichen

Ein Datentyp fehlt noch…

Wahrheitswerte werden in Variablen vom Typ bool (kurz für boolean)

abgespeichert

10.10.2019 Variablen

bool

true false

Variablen vom Typ bool können logisch miteinander verglichen werden

&&

Logisches AND

||

Logisches OR

!

Logisches NOT

19

Page 20: Hello World! Eine Einführung in das Programmieren Variablen · Slide 27 Brückenkurs Hello World! int a = 3 Scopes Jede Sequenz von Anweisungen hat einen eigenen Geltungsbereich

Brückenkurs Hello World!Slide 20

Vieles geht! Aber was kommt heraus?

float a= 2.5;

float b= 3.5;

float c= b/a;

int d= b/a;

cout <<"c " <<c <<endl;

cout <<"d " <<d <<endl;

int e= c;

cout <<"e " <<e <<endl;

Ausgabe:c 1.4

d 1

e 1

10.10.2019 Variablen 20

Page 21: Hello World! Eine Einführung in das Programmieren Variablen · Slide 27 Brückenkurs Hello World! int a = 3 Scopes Jede Sequenz von Anweisungen hat einen eigenen Geltungsbereich

Brückenkurs Hello World!Slide 21

Vorsicht bei Typkonvertierungen

unsigned char o= 255;

signed char p= (signed char)o;

int q= o;

cout <<"q " <<q <<endl;

q= p;

cout <<"q " <<q <<endl;

Ausgabe:

q 255

q -1

10.10.2019 Variablen 21

„Cast“ – explizite

Typkonvertierung

Page 22: Hello World! Eine Einführung in das Programmieren Variablen · Slide 27 Brückenkurs Hello World! int a = 3 Scopes Jede Sequenz von Anweisungen hat einen eigenen Geltungsbereich

Brückenkurs Hello World!Slide 22

Welcher Operator hat Vorrang?

Die Operatoren haben eine Priorität mit der sie ausgeführt werden. Hier mit

absteigender Priorität:

Durch das Setzen von Klammern (…), kann die Interpretation eines

Ausdrucks beeinflusst werden. Klammern haben immer die höchste

Priorität.

Wenn eine Unsicherheit bleibt, wie ein Ausdruck interpretiert wird, sollten

immer Klammern gesetzt werden!

10.10.2019 Variablen

(…) ++ -- (Vorzeichen +/-) ! ~ * / % + - << >> < <= >

>= == != & ^ | && || = += -= *= /= %= >>= <<= &= |= ^=

22

Page 23: Hello World! Eine Einführung in das Programmieren Variablen · Slide 27 Brückenkurs Hello World! int a = 3 Scopes Jede Sequenz von Anweisungen hat einen eigenen Geltungsbereich

Brückenkurs Hello World!Slide 23

Zusammenfassung Operationen und Operatoren

• Seien

int a, b=1, c=2;

bool r= false, l;

• Arithmetisch +, -, *, /

a= 5; // Zuweisung

a= b+c; // Addition

a+= b; // entspricht a= a+b;

• Vergleiche ==, <=, >=

r= a >= b; // -> r= true

• Logisch &&, ||, !

l= !r; // r==true -> l= false

10.10.2019 Variablen 23

Page 24: Hello World! Eine Einführung in das Programmieren Variablen · Slide 27 Brückenkurs Hello World! int a = 3 Scopes Jede Sequenz von Anweisungen hat einen eigenen Geltungsbereich

Brückenkurs Hello World!Slide 24

Kommentare

Mit zwei Schrägstrichen (//) wird ein einzeiliger Kommentar eingeleitet.

Variablen

// Kommentar

/*

Kommentare

*/

Mit (/*) beginnt ein mehrzeiliger Kommentar, der mit (*/) wieder beendet

wird.

10.10.2019 24

Page 25: Hello World! Eine Einführung in das Programmieren Variablen · Slide 27 Brückenkurs Hello World! int a = 3 Scopes Jede Sequenz von Anweisungen hat einen eigenen Geltungsbereich

Brückenkurs Hello World!Slide 25

{

Anweisung 1;

Anweisung 2;

Anweisung n;

}

Sequenzen

Mehrere Anweisungen werden mit geschweiften Klammern zu einem Block

resp. zu einer Sequenz von Anweisungen zusammengefasst.

Variablen

{

Anweisung 1;

Anweisung 2;

Anweisung n;

}

Zur besseren Lesbarkeit eines Programms, werden alle Anweisungen

innerhalb des Blocks mit einem „Tab“ eingerückt.

10.10.2019 25

Page 26: Hello World! Eine Einführung in das Programmieren Variablen · Slide 27 Brückenkurs Hello World! int a = 3 Scopes Jede Sequenz von Anweisungen hat einen eigenen Geltungsbereich

Brückenkurs Hello World!Slide 26

Scopes

Jede Sequenz von Anweisungen hat einen eigenen Geltungsbereich für

Variablen

Variablen

int a = 3;

{

int b = 2;

{

int c = 1;

}

}

{

int a = 1;

}

int a = 3

int b = 2

int c = 1

int a = 1

10.10.2019 26

Page 27: Hello World! Eine Einführung in das Programmieren Variablen · Slide 27 Brückenkurs Hello World! int a = 3 Scopes Jede Sequenz von Anweisungen hat einen eigenen Geltungsbereich

Brückenkurs Hello World!Slide 27

int a = 3

Scopes

Jede Sequenz von Anweisungen hat einen eigenen Geltungsbereich für

Variablen

Variablen

int b = 2

int a = 3

int c = 1

int b = 2

int a = 3

int a = 1

Die Variable ist in dem Scope der

Sequenz, in der sie definiert

wurde, und in den eingebetteten

Sequenzen sichtbar.

Erneute Definition einer Variable

überschreibt die Sichtbarkeit der

äußeren Variable.

Erneute Definition innerhalb

eines Scopes ist nicht erlaubt.

10.10.2019 27

Page 28: Hello World! Eine Einführung in das Programmieren Variablen · Slide 27 Brückenkurs Hello World! int a = 3 Scopes Jede Sequenz von Anweisungen hat einen eigenen Geltungsbereich

Brückenkurs Hello World!Slide 28

Beispiel: Scopes

Variablen

{

int b = 2;

}

int a = b; ➔ Fehler: Variable b ist nicht definiert!

int a = 4;

{

a = 3;

}

cout << a;

int a = 4;

{

int a = 3;

}

cout << a;

Es wird 3 ausgegeben! Es wird 4 ausgegeben!

Schlecht lesbar -> vermeiden10.10.2019 28

Page 29: Hello World! Eine Einführung in das Programmieren Variablen · Slide 27 Brückenkurs Hello World! int a = 3 Scopes Jede Sequenz von Anweisungen hat einen eigenen Geltungsbereich

Brückenkurs Hello World!Slide 29

Fortsetzung: Scopes

Noch einmal dasselbe Beispiel:

• Nach Verlassen der Sequenz kann auf die

Variable a mit dem Wert 3 nicht mehr

zugegriffen werden.

• Die Variable a mit dem Wert 3 wird nach

der Sequenz aus dem Speicher gelöscht.

Variablen

int a = 4;

{

int a = 3;

}

cout << a;

10.10.2019 29

Page 30: Hello World! Eine Einführung in das Programmieren Variablen · Slide 27 Brückenkurs Hello World! int a = 3 Scopes Jede Sequenz von Anweisungen hat einen eigenen Geltungsbereich

Brückenkurs Hello World!Slide 30

Zusammenfassung

• Vorsicht bei Typkonvertierungen

• Hardware-nahe und speichereffiziente Programmierung durch Pointer

möglich

• Vorsicht bei direkten Speicherzugriffen

10.10.2019 Variablen 30

Page 31: Hello World! Eine Einführung in das Programmieren Variablen · Slide 27 Brückenkurs Hello World! int a = 3 Scopes Jede Sequenz von Anweisungen hat einen eigenen Geltungsbereich

Brückenkurs Hello World!Slide 31

Übung

1. Füge eine Variablen-Deklaration, Wertezuweisung und Ausgabe im

HelloWorld-Programm ein.2. Definiere ein Rechteck mit Breite breite und Länge laenge, berechne

den Flächeninhalt und Umfang, gebe beides aus. Nutze einmal Variablen vom Typ int und einmal vom Typ float.

3. Und nochmal für einen Kreis!

4. Was passiert bei unzulässigen Variablen-Namen?

5. Was passiert bei der Zuweisungen zwischen unterschiedlichen

Datentypen?int → float; float → int;

char → float, int → bool

6. Was passiert bei arithmetischen Operationen, an denen

unterschiedliche Datentypen beteiligt sind?

10.10.2019 Variablen 31