Einführung. Programmieren, Die Mersenne sche Vermutung, Editor, Compiler, Computer, Betriebssystem, Plattform, Das erste C++ Programm

Ähnliche Dokumente
Das erste C++ Programm

3. Wahrheitswerte. Boolesche Funktionen; der Typ bool; logische und relationale Operatoren; Kurzschlussauswertung; Assertions und Konstanten

Kapitel 1: Einführung

Kurze Einführung in die Programmiersprache C++ und in Root

Elementare Datentypen in C++

Die Programmiersprache C

Informatik 1 ( ) D-MAVT F2011. Einführung C++ Yves Brise Übungsstunde 1

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

Einführung in die C++ Programmierung für Ingenieure

Objektorientiertes Programmieren für Ingenieure

Informatik I. Übung 2 : Programmieren in Eclipse. 5. März Daniel Hentzen

Deklarationen in C. Prof. Dr. Margarita Esponda

Informatik 1 ( ) D-MAVT F2010. Logik, Schleifen. Yves Brise Übungsstunde 4

3AA. Prof. Dr. Wolfgang P. Kowalk. Universität Oldenburg WS 2005/2006

C++ Teil 1. Sven Groß. 9. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil 1 9. Apr / 19

2. Computer (Hardware) K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Dr. Monika Meiler. Inhalt

C++ Einführung. und Datenanalyse mit ROOT. Jörg Marks, Physikalisches Institut, INF 226

Ein- und Ausgabe (I/O)

Grundlagen der Programmentwicklung

Kapitel 3. Mein erstes C-Programm

Algorithmus: Kochrezept

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Informatik I. Übung 01. Olga Diamanti

Programmierung mit C Zeiger

Algorithmen & Programmierung. Ausdrücke & Operatoren (1)

Grundlagen. Kapitel 1

C++ Kurs Teil 1. Architektur, Anwendungsspektrum, primitive Datentypen, Funktionsaufrufe, Referenzen, Klassen

Grundlagen der Informatik I (Studiengang Medieninformatik)

Programmier-Befehle - Woche 10

Werkzeuge zur Programmentwicklung

Einleitung Entwicklung in C Hello-World! Konstrukte in C Zusammenfassung Literatur. Grundlagen von C. Jonas Gresens

Programmiersprachen Einführung in C

3. Datentypen, Ausdrücke und Operatoren

Erste Schritte der Programmierung in C

Java - Zahlen, Wahrheitswerte und Zeichen. Leibniz Universität IT Services Anja Aue

Übungen zu C++ Kapitel 1

Einführung in die Programmierung 1

Coma I. Einleitung. Computer und Algorithmen. Programmiersprachen. Algorithmen versus Programmiersprachen. Literaturhinweise

Einführung in die Programmierung mit Java

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Es gibt zwei verschiedene Arten, wie Programme auf dem Rechner ausgeführt werden:

2 Einfache Rechnungen

Einführung in die Informatik I (autip)

Java. CoMa-Übung II TU Berlin. CoMa-Übung II (TU Berlin) Java / 28

Interpreter - Gliederung

Grundelemente der C++ Programmierung Pearson Education, Inc. All rights reserved.

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

magnum C++ WALTER SAUMWEBER kompakt komplett kompetent

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 1

Richtig Rechnen. // Program: fahrenheit.c // Convert temperatures from Celsius to Fahrenheit.

Inhaltsverzeichnis. Grundbegriffe der C-Programmierung Für den HI-TECH C-Compiler

Grundlagen. Die Komponenten eines C Programms. Das erste Programm

0. Einführung & Motivation

Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften

Historien AB"C" Einführung in die Programmierung mit C/C++ Dipl. Ing. (FH) Hans-Peter Kiermaier. Dr. Bjarne Stroustrup Entwickler von C++

3D Programmierpraktikum: Einführung in C++ - Teil 1

2.4 Das erste C++-Programm *

C++ - Operatoren. Eigene Klassen mit neuen Funktionen

Einführung in die C-Programmierung

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Kontrollstrukturen, Pseudocode und Modulo-Rechnung

Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe

Einführung in die Programmiersprache C

Elementare Konzepte von

Programmierkurs C++ Grundlagen. Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck

Klassen in Java. Grundlagen der Programmierung. Stephan Kleuker 68

Die Programmiersprache C Eine Einführung

Organisatorisches. Einführung in die Programmierung in C Hochschule Regensburg Universitätsstraße 31, Regensburg

Kapitel 3: Variablen

Einführung in PROLOG. Christian Stocker

Im Original veränderbare Word-Dateien

Die Programmiersprache C99: Zusammenfassung

68000 Assembler. WAS ist ein Assembler? Ein System, das den Programmierer hilft, eine maschinennahe Programmierung zu realisieren.

5. Programmieren mit Pascal

Java - Zahlen, Wahrheitswerte und Zeichen. Leibniz Universität IT Services Anja Aue

Einführung in die Programmierung mit VBA

Werner Achte rt DATA BECKER

CS1005 Objektorientierte Programmierung Bachelor of Science (Informatik)

Teil IV. Grundlagen der Programmierung

FH München, FB 03 FA WS 06/07. Ingenieurinformatik. Name Vorname Matrikelnummer Sem.Gr.: Hörsaal Platz

1. Der Einstieg in Java

Programmieren in C++ Überladen von Methoden und Operatoren

Javaprogrammierung mit NetBeans. Variablen, Datentypen, Methoden

Programmierkurs II. C und Assembler

2. Programmierung in C

Schleifenanweisungen

Java Einführung Methoden. Kapitel 6

Programmieren was ist das genau?

Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik

Hello World. Javakurs 2014, 1. Vorlesung. Sebastian Schuck. basierend auf der Vorlage von Arne Kappen. wiki.freitagsrunde.org. 3.

Angewandte Mathematik und Programmierung

Annehmende Schleife do while

1. Der Einstieg in Java. Was heißt Programmieren?

Zeiger, Arrays und Strings in C und C++

Einstieg in die Informatik mit Java

Grundlagen C und C++ Einheit 03: Grundlagen in C++ Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme

Programmierkonventionen - 1 -

1. Erläutern Sie die Aufgaben von Datentypen in der imperativen Programmierung.

S. d. I.: Programieren in C Folie 4-1. im Gegensatz zu Pascal gibt es in C kein Schlüsselwort "then"

Transkript:

Einführung Programmieren, Die Mersenne sche Vermutung, Editor, Compiler, Computer, Betriebssystem, Plattform, Das erste C++ Programm 1

Programmieren heisst... n... dem Computer mit Hilfe einer Programmiersprache eine Folge von Befehlen zu erteilen, damit er genau das macht, was wir wollen. 2

Programmieren heisst... n... dem Computer mit Hilfe einer Programmiersprache eine Folge von Befehlen zu erteilen, damit er genau das macht, was wir wollen. n Die Folge von Befehlen ist das Computerprogramm. 3

Programmieren n Welche Programmiersprache? n C++ n Warum überhaupt??? n Da hätte ich ja gleich Informatik studieren können... n Es gibt doch schon für alles Programme... n Programmieren interessiert mich nicht... 4

Die Mersenne sche Vermutung Mersenne (1644): Die Zahlen der Form 2 n -1 sind Primzahlen für n = 2, 3, 5, 7, 13, 17, 19, 31, 67, 127, 257, aber für kein anderes n < 257. 5

Die Mersenne sche Vermutung Mersenne (1644): Die Zahlen der Form 2 n -1 sind Primzahlen für n = 2, 3, 5, 7, 13, 17, 19, 31, 67, 127, 257, aber für kein anderes n < 257. n 2 2-1 = 3 n 2 3-1 = 7 n 2 5-1 = 31 6

Die Mersenne sche Vermutung Mersenne (1644): Die Zahlen der Form 2 n -1 sind Primzahlen für n = 2, 3, 5, 7, 13, 17, 19, 31, 67, 127, 257, aber für kein anderes n < 257. n 2 2-1 = 3 n 2 3-1 = 7 n 2 5-1 = 31 n 2 19-1 (1644) n 2 31-1 (1772, Euler) 7

Die Mersenne sche Vermutung Mersenne (1644): Die Zahlen der Form 2 n -1 sind Primzahlen für n = 2, 3, 5, 7, 13, 17, 19, 31, 67, 127, 257, aber für kein anderes n < 257. n 2 2-1 = 3 n 2 3-1 = 7 n 2 5-1 = 31 n 2 19-1 (1644) n 2 31-1 (1772, Euler) n 2 67-1 (1876, Lucas) 8

Die Mersenne sche Vermutung n Lucas Beweis von 1876 ist nicht konstruktiv, er liefert keine Faktorisierung von 2 67-1 = 147573952589676412927. 9

Die Mersenne sche Vermutung n Lucas Beweis von 1876 ist nicht konstruktiv, er liefert keine Faktorisierung von 2 67-1 = 147573952589676412927. n Faktorisierung blieb offen bis 1903 10

Der Vortrag von Cole n Frank Nelson Cole: On the Factorization of large numbers, Treffen der American Mathematical Society 1903 11

Der Vortrag von Cole n Frank Nelson Cole: On the Factorization of large numbers, Treffen der American Mathematical Society 1903 n Vielleicht der erste und einzige Vortrag, der ohne ein einziges Wort auskam 12

Der Vortrag von Cole 761838257287 x 193707721 ------------------------ 761838257287 6856544315583 2285514771861 5332867801009 5332867801009 5332867801009 1523676514574 761838257287 --------------------- 147573952589676412927 13

Der Vortrag von Cole 761838257287 x 193707721 ------------------------ 761838257287 6856544315583 2285514771861 5332867801009 5332867801009 5332867801009 1523676514574 761838257287 --------------------- 147573952589676412927 2 67-1 14

Der Vortrag von Cole n Frank Nelson Cole: On the Factorization of large numbers, Treffen der American Mathematical Society 1903 n Vielleicht der erste und einzige Vortrag, der ohne ein einziges Wort auskam n Ergebnis: Standing ovations für Cole 15

Der Vortrag von Cole n Frank Nelson Cole: On the Factorization of large numbers, Treffen der American Mathematical Society 1903 n Vielleicht der erste und einzige Vortrag, der ohne ein einziges Wort auskam n Ergebnis: Standing ovations für Cole n und für seine drei Jahre Sonntagsarbeit! 16

Was lernen wir daraus? 17

Was lernen wir daraus? n Wir brauchen Werkzeuge (damals: Papier, Bleistift, Kopfrechnen; heute auch Computer) 18

Was lernen wir daraus? n Wir brauchen Werkzeuge (damals: Papier, Bleistift, Kopfrechnen; heute auch Computer) n Wir brauchen Problemlösungskompetenz (damals wie heute: Theorie hinter dem Problem kennen; wie setzt man die Werkzeuge effektiv ein?) 19

Was lernen wir daraus? n Wir brauchen Programmierfähigkeiten, um das neue Werkzeug Computer (das Cole noch nicht kannte) effektiv einsetzen zu können. n Anwendungsprogramme lösen heute viele Routine-Aufgaben n Für alles, was darüber hinausgeht, muss man den Computer selbst programmieren! 20

Die Mersenne sche Vermutung heute n n =67 und n =257: 2 n -1 keine Primzahl 21

Die Mersenne sche Vermutung heute n n =67 und n =257: 2 n -1 keine Primzahl n Mersenne hat andererseits n = 61, 89, 107 vergessen 22

Die Mersenne sche Vermutung heute n n =67 und n =257: 2 n -1 keine Primzahl n Mersenne hat andererseits n = 61, 89, 107 vergessen n grösste bisher bekannte Primzahl der Form 2 n -1 ist 2 43112609-1, gefunden mit massivem Computereinsatz und Spezialsoftware 23

Programmieren n Welche Programmiersprache? n C++ n Warum überhaupt??? n Um den Computer als Werkzeug effektiv einsetzen zu können n Wie programmiert man eigentlich? 24

Editor Programm zum q Ändern q Erfassen q Speichern von (Programm)-Text 25

Editor Programm zum q Ändern q Erfassen q Speichern Beispiele: Microsoft Word, Emacs von (Programm)-Text 26

Compiler Motivation: q Sprache, die der Computer versteht, ist sehr primitiv (Maschinensprache) q Selbst einfache Operationen müssen in viele Einzelschritte aufgeteilt werden q Verstandene Sprache variiert von Computer zu Computer 27

Compiler Programm zur Übersetzung von q visuell lesbarem q computermodell-unabhängigem Programmtext in Maschinensprache. Idee der höheren Programmiersprache 28

Compiler Programm zur Übersetzung von q visuell lesbarem q computermodell-unabhängigem Programmtext in Maschinensprache. Idee der höheren Programmiersprache Beispiele: Pascal, Modula 2, Oberon, C++, Java 29

Höhere Programmiersprachen n Pionier an der ETH: Niklaus Wirth (Prof. an der ETH von 1986 bis 1999) 30

Höhere Programmiersprachen n Pionier an der ETH: Niklaus Wirth (Prof. an der ETH von 1986 bis 1999) n Entwickler von Pascal, Modula-2, Oberon 31

Höhere Programmiersprachen n Pionier an der ETH: Niklaus Wirth (Prof. an der ETH von 1986 bis 1999) n Entwickler von Pascal, Modula-2, Oberon Angebliches Zitat: C++ is an insult to the human brain. 32

Computer Zutaten der von-neumann-architektur: q Hauptspeicher (RAM) für Programme und Daten q Prozessor (CPU) zur Verarbeitung der Programme und Daten 33

Hauptspeicher q Folge von Bits aus {0,1} q Programmzustand: Werte aller Bits q Zusammenfassung von Bits zu Speicherzellen q Jede Speicherzelle hat eine Adresse q Random Access: Zugriffszeit auf Speicherzelle unabhängig von ihrer Adresse Adresse: 17 Adresse: 18 34

Prozessor q führt Programminstruktionen in Maschinensprache aus q hat eigenen schnellen Speicher (Register), kann vom Hauptspeicher lesen und in ihn schreiben q beherrscht eine Menge einfachster Operationen (z.b. Addieren zweier Registerinhalte) 35

Betriebssystem Programm fuer grundlegende Abläufe: q Editor starten q Programm erfassen und speichern q Compiler aufrufen q Übersetztes Programm starten 36

Betriebssystem Programm fuer grundlegende Abläufe: q Editor starten q Programm erfassen und speichern q Compiler aufrufen q Übersetztes Programm starten Beispiele: Windows, Unix Linux, MacOS 37

Plattform Ideale Welt: q Programm, das in einer höheren Programmiersprache geschrieben wurde, verhält sich überall gleich 38

Plattform Ideale Welt: q Programm, das in einer höheren Programmiersprache geschrieben wurde, verhält sich überall gleich Reale Welt (gerade bei C++): q Verhalten kann von Compiler, Computer, Betriebssystem abhängen 39

Plattform Plattform: q Compiler, Computer, Betriebssystem Ziel für uns: q Plattformunabhängige Programme q Voraussetzung dafür: Verzicht auf maschinennahe Features von C++ 40

Die Virtual Box n In dieser VL erreichen wir Plattformunabhängigkeit durch eine Virtual Box. 41

Die Virtual Box n In dieser VL erreichen wir Plattformunabhängigkeit durch eine Virtual Box. n Virtueller (Linux)-Computer, den man auf jedem beliebigen echten Computer laufen lassen kann (siehe Webseite). n Virtual Box verhält sich überall gleich. n Alle VL-Programme und ein passender Compiler sind bereits vorinstalliert. 42

Das erste C++ Programm // Program: power8.cpp // Raise a number to the eighth power. #include <iostream> int main() { // input std::cout << "Compute a^8 for a =? "; int a; std::cin >> a; // computation int b = a * a; // b = a^2 b = b * b; // b = a^4 } // output b * b, i.e., a^8 std::cout << a << "^8 = " << b * b << ".\n"; return 0; 43

Syntax und Semantik Syntax: q Was ist ein C++ Programm? q Ist es grammatikalisch korrekt? Semantik: q Was bedeutet ein C++ Programm? q Welchen Algorithmus realisiert es? 44

Syntax und Semantik Der ISO/IEC Standard 14822 (1998, 2011) q ist das Gesetz von C++ q legt Grammatik und Bedeutung von C++ Programmen fest q Enthält seit 2011 Neuerungen für fortgeschrittenes Programmieren 45

Beispiel: power8.cpp q Kommentare/Layout q Include-Direktiven q Die main-funktion q Werte, Effekte q Typen, Funktionalität q Literale q Variablen q Konstanten q Bezeichner, Namen q Objekte q Ausdrücke q L- und R-Werte q Operatoren q Anweisungen 46

Kommentare q hat jedes gute Programm q // ab Doppel-Slash bis Zeilenende q dokumentieren, was das Programm wie macht q werden vom Compiler ignoriert 47

Layoutelemente q Kommentare q Leerzeilen, Leerschläge q Einrückungen, die die Programmlogik widerspiegeln q werden vom Compiler ignoriert 48

Kommentare und Layout Dem Compiler ist s egal #include<iostream> int main(){std::cout<<"compute a^8 for a =? "; int a;std::cin>>a;int b=a*a;b=b*b;std::cout<< a<<"^8 = "<<b*b<<".\n";return 0;} 49

Kommentare und Layout Dem Compiler ist s egal #include<iostream> int main(){std::cout<<"compute a^8 for a =? "; int a;std::cin>>a;int b=a*a;b=b*b;std::cout<< a<<"^8 = "<<b*b<<".\n";return 0;} aber uns nicht! 50

Include-Direktiven C++ besteht aus q Kernsprache q Standardbibliothek Ein/Ausgabe (Header iostream) Mathematische Funktionen (cmath) #include <iostream> q macht Ein/Ausgabe verfügbar 51

Die main-funktion q hat jedes C++ Programm q wird vom Betriebssystem aufgerufen q wie mathematische Funktion q Argumente (bei power8.cpp: keine) q Rückgabewert (bei power8.cpp: 0) 52

Die main-funktion q hat jedes C++ Programm q wird vom Betriebssystem aufgerufen q wie mathematische Funktion q Argumente (bei power8.cpp: keine) q Rückgabewert (bei power8.cpp: 0) q aber mit zusätzlichem Effekt! q Lies Zahl ein und gib 8-te Potenz aus 53

Werte und Effekte q bestimmen, was das Programm macht q Sind rein semantische Konzepte: q Zeichen 0 bedeutet Wert 0 є Z q std::cin >> a; bedeutet Effekt Einlesen einer Zahl q hängen vom Programmzustand (Speicherinhalte / Eingaben) ab 54

Typen und Funktionalität int : q C++ Typ für ganze Zahlen q entspricht (Ζ, +, ) in der Mathematik 55

Typen und Funktionalität int : q C++ Typ für ganze Zahlen q entspricht (Ζ, +, ) in der Mathematik In C++ hat jeder Typ einen Namen sowie q Wertebereich (z.b. ganze Zahlen) 56

Typen und Funktionalität int : q C++ Typ für ganze Zahlen q entspricht (Ζ, +, ) in der Mathematik In C++ hat jeder Typ einen Namen sowie q Wertebereich (z.b. ganze Zahlen) q Funktionalität (z.b. Addition/Multiplikation) 57

Typen und Funktionalität C++ enthält fundamentale Typen für q Ganze Zahlen (int) q Natürliche Zahlen (unsigned int) q Reelle Zahlen (float,double) q Wahrheitswerte (bool) q 58

Literale q repräsentieren konstante Werte q haben einen festen Typ q sind syntaktische Werte 59

Literale q repräsentieren konstante Werte q haben einen festen Typ q sind syntaktische Werte Beispiele: q 0 hat Typ int, Wert 0 q 1.2e5 hat Typ double,wert 1.2 10 5 60

Variablen q repräsentieren (wechselnde) Werte q haben q Namen q Typ q Wert q Adresse q sind im Programmtext sichtbar 61

Variablen q repräsentieren (wechselnde) Werte q haben q Namen q Typ q Wert q Adresse int a; definiert Variable mit q Namen: a q Typ: int q Wert: undefiniert q Adresse: durch Compiler bestimmt q sind im Programmtext sichtbar 62

Konstanten q sind Variablen mit unveränderbarem Wert const int speed_of_light = 299792458; 63

Konstanten q sind Variablen mit unveränderbarem Wert const int speed_of_light = 299792458; q Verwendung: const vor der Definition q Compiler kontrolliert Einhaltung des const-versprechens const int speed_of_light = 299792458;... speed_of_light = 300000000; // Rundung 64

Fehlermeldung! Konstanten q sind Variablen mit unveränderbarem Wert const int speed_of_light = 299792458; q Verwendung: const vor der Definition q Compiler kontrolliert Einhaltung des const-versprechens const int speed_of_light = 299792458;... speed_of_light = 300000000; // Rundung 65

Die const-richtlinie Denke bei jeder Variablen darüber nach, ob sie im Verlauf des Programms jemals ihren Wert ändern wird oder nicht! Im letzteren Fall verwende das Schlüsselwort const, um die Variable zu einer Konstanten zu machen! 66

Die const-richtlinie Denke bei jeder Variablen darüber nach, ob sie im Verlauf des Programms jemals ihren Wert ändern wird oder nicht! Im letzteren Fall verwende das Schlüsselwort const, um die Variable zu einer Konstanten zu machen! Ein Programm, das diese Richtlinie befolgt, heisst const-korrekt 67

Bezeichner und Namen (Variablen-)Namen sind Bezeichner: q erlaubt: A,,Z ; a,..,z ; 0,,9 ; _ q erstes Zeichen ist Buchstabe Es gibt noch andere Namen: q std::cin (qualifizierter Name) 68

Objekte q repräsentieren Werte im Hauptspeicher q haben q Typ q Adresse q Wert (Speicherinhalt an der Adresse) 69

Objekte q repräsentieren Werte im Hauptspeicher q haben q Typ q Adresse q Wert (Speicherinhalt an der Adresse) q können benannt werden (Variable)... q...aber auch anonym sein. 70

Objekte q repräsentieren Werte im Hauptspeicher q haben q Typ q Adresse Ein Programm hat eine feste Anzahl von Variablen. Um eine grössere Anzahl von Werten behandeln zu können, braucht es anonyme Adressen, die über temporäre Namen angesprochen werden können. q Wert (Speicherinhalt an der Adresse) q können benannt werden (Variable)... q...aber auch anonym sein. 71

Ausdrücke (Expressions) q repräsentieren Berechnungen q sind primär oder zusammengesetzt (aus anderen Ausdrücken) 72

Ausdrücke (Expressions) q repräsentieren Berechnungen q sind primär oder zusammengesetzt (aus anderen Ausdrücken und Operationen) a * a zusammengesetzter Ausdruck: 73

Ausdrücke (Expressions) q repräsentieren Berechnungen q sind primär oder zusammengesetzt (aus anderen Ausdrücken und Operationen) a * a zusammengesetzter Ausdruck: Variablenname 74

Ausdrücke (Expressions) q repräsentieren Berechnungen q sind primär oder zusammengesetzt (aus anderen Ausdrücken und Operationen) a * a zusammengesetzter Ausdruck: Variablenname, Operatorsymbol 75

Ausdrücke (Expressions) q repräsentieren Berechnungen q sind primär oder zusammengesetzt (aus anderen Ausdrücken und Operationen) a * a zusammengesetzter Ausdruck: Variablenname, Operatorsymbol, Variablenname 76

Ausdrücke (Expressions) q repräsentieren Berechnungen q sind primär oder zusammengesetzt (aus anderen Ausdrücken und Operationen) a * a zusammengesetzter Ausdruck: Primäre Ausdrücke Variablenname, Operatorsymbol, Variablenname 77

Ausdrücke (Expressions) q repräsentieren Berechnungen q sind primär oder zusammengesetzt (aus anderen Ausdrücken und Operationen) Klammern erlaubt: a * a = (a * a) Primäre Ausdrücke zusammengesetzter Ausdruck: Variablenname, Operatorsymbol, Variablenname 78

Ausdrücke (Expressions) q haben q Typ q Wert q Effekt (potentiell) 79

Ausdrücke (Expressions) q haben q Typ q Wert q Effekt (potentiell) a * a q Typ: q Wert: int (Typ der Operanden) Produkt von a und a q Effekt: keiner 80

Ausdrücke (Expressions) q haben q Typ q Wert q Effekt (potentiell) b = b * b q Typ: q Wert: int (Typ der Operanden) Produkt von b und b q Effekt: Weise b diesen Wert zu 81

Ausdrücke (Expressions) q haben q Typ q Wert q Effekt (potentiell) q Typ eines Ausdrucks ist fest, aber Wert und Effekt werden durch Auswertung des Ausdrucks bestimmt 82

L-Werte und R-Werte L-Wert: q Ausdruck mit Adresse q Wert ist der Wert des Objekts an dieser Adresse q gibt Objekt einen (temporären) Namen 83

L-Werte und R-Werte L-Wert: q Ausdruck mit Adresse q Wert ist der Wert des Objekts an dieser Adresse q gibt Objekt einen (temporären) Namen Beispiel: Variablenname 84

L-Werte und R-Werte L-Wert: q Ausdruck mit Adresse q Wert ist der Wert des Objekts an dieser Adresse q gibt Objekt einen (temporären) Namen Beispiel: Variablenname Andere Beispiele: etwas später... 85

L-Werte und R-Werte R-Wert: q Ausdruck, der kein L-Wert ist 86

L-Werte und R-Werte R-Wert: q Ausdruck, der kein L-Wert ist Beispiel: Literal 87

L-Werte und R-Werte R-Wert: q Ausdruck, der kein L-Wert ist Beispiel: Literal q Jeder L-Wert kann als R-Wert benutzt werden, aber nicht umgekehrt! q R-Wert kann seinen Wert nicht ändern 88

Operatoren Operatoren * : Multiplikationsoperator q machen aus Ausdrücken (Operanden) neue zusammengesetzte Ausdrücke q spezifizieren für die Operanden und das Ergebnis die Typen, und ob sie L- oder R-Werte sein müssen q haben eine Stelligkeit (hier immer 2) 89

Multiplikationsoperator * q erwartet zwei R-Werte vom gleichen arithmetischem Typ als Operanden q gibt Produkt als R-Wert des gleichen Typs zurück : q Der zusammengesetzte Ausdruck ist ein R- Wert; sein Wert ist das Produkt der Werte der beiden Operanden 90

Multiplikationsoperator * q erwartet zwei R-Werte vom gleichen arithmetischem Typ als Operanden q gibt Produkt als R-Wert des gleichen Typs zurück : q Der zusammengesetzte Ausdruck ist ein R- Wert; sein Wert ist das Produkt der Werte der beiden Operanden Beispiele: a * a, b * b 91

Zuweisungsoperator = q linker Operand ist L-Wert q rechter Operand ist R-Wert des gleichen Typs q Weist linkem Operanden den Wert des rechten Operanden zu und gibt den linken Operanden als L-Wert zurück 92

Zuweisungsoperator = q linker Operand ist L-Wert q rechter Operand ist R-Wert des gleichen Typs q Weist linkem Operanden den Wert des rechten Operanden zu und gibt den linken Operanden als L-Wert zurück Beispiel: b = b * b 93

Zuweisungsoperator = := in Mathe q linker Operand ist L-Wert q rechter Operand ist R-Wert des gleichen Typs q Weist linkem Operanden den Wert des rechten Operanden zu und gibt den linken Operanden als L-Wert zurück Beispiel: b = b * b 94

Zuweisungsoperator = q linker Operand ist L-Wert q rechter Operand ist R-Wert des gleichen Typs q Weist linkem Operanden den Wert des rechten Operanden zu und gibt den linken Operanden als L-Wert zurück Beispiel: b = b * b 95

Eingabeoperator >> q linker Operand ist L-Wert (Eingabestrom) q rechter Operand ist L-Wert q weist dem rechten Operanden den nächsten Wert aus der Eingabe zu, entfernt ihn aus der Eingabe und gibt den Eingabestrom als L-Wert zurück 96

Eingabeoperator >> q linker Operand ist L-Wert (Eingabestrom) q rechter Operand ist L-Wert q weist dem rechten Operanden den nächsten Wert aus der Eingabe zu, entfernt ihn aus der Eingabe und gibt den Eingabestrom als L-Wert zurück Beispiel: std::cin >> a (meist Tastatureingabe) 97

Eingabeoperator >> q linker Operand ist L-Wert (Eingabestrom) q rechter Operand ist L-Wert q weist dem rechten Operanden den nächsten Wert aus der Eingabe zu, entfernt ihn aus der Eingabe und gibt den Eingabestrom als L-Wert zurück q Eingabestrom muss ein L-Wert sein! 98

Ausgabeoperator << q linker Operand ist L-Wert (Ausgabestrom) q rechter Operand ist R-Wert q gibt den Wert des rechten Operanden aus, fügt ihn dem Ausgabestrom hinzu und gibt den Ausgabestrom als L-Wert zurück 99

Ausgabeoperator << q linker Operand ist L-Wert (Ausgabestrom) q rechter Operand ist R-Wert q gibt den Wert des rechten Operanden aus, fügt ihn dem Ausgabestrom hinzu und gibt den Ausgabestrom als L-Wert zurück Beispiel: std::cout << a (meist Bildschirmausgabe) 100

Ausgabeoperator << q linker Operand ist L-Wert (Ausgabestrom) q rechter Operand ist R-Wert q gibt den Wert des rechten Operanden aus, fügt ihn dem Ausgabestrom hinzu und gibt den Ausgabestrom als L-Wert zurück q Ausgabestrom muss L-Wert sein! 101

Ausgabeoperator << Warum Rückgabe des Ausgabestroms? q erlaubt Bündelung von Ausgaben: std::cout << a << "^8 = " << b * b << ".\n" ist wie folgt logisch geklammert: ((((std::cout << a) << "^8 = ") << b * b) << ".\n") L-Wert (Ausgabestrom) 102

Ausgabeoperator << Warum Rückgabe des Ausgabestroms? q erlaubt Bündelung von Ausgaben: std::cout << a << "^8 = " << b * b << ".\n" ist wie folgt logisch geklammert: ((((std::cout << a) << "^8 = ") << b * b) << ".\n") L-Wert, der kein Variablenname ist! 103

Ausgabeoperator << Warum Rückgabe des Ausgabestroms? q erlaubt Bündelung von Ausgaben: std::cout << a << "^8 = " << b * b << ".\n" ist wie folgt logisch geklammert: ((((std::cout << a) << "^8 = ") << b * b) << ".\n") L-Wert (Ausgabestrom) 104

Ausgabeoperator << Warum Rückgabe des Ausgabestroms? q erlaubt Bündelung von Ausgaben: std::cout << a << "^8 = " << b * b << ".\n" ist wie folgt logisch geklammert: ((((std::cout << a) << "^8 = ") << b * b) << ".\n") L-Wert (Ausgabestrom) 105

Ausgabeoperator << Warum Rückgabe des Ausgabestroms? q erlaubt Bündelung von Ausgaben: std::cout << a << "^8 = " << b * b << ".\n" ist wie folgt logisch geklammert: ((((std::cout << a) << "^8 = ") << b * b) << ".\n") L-Wert (Ausgabestrom) 106

Anweisungen q Bausteine eines C++ Programms q werden (von oben nach unten) ausgeführt und haben Effekte q enden mit einem Semikolon 107

Ausdrucksanweisungen q haben die Form expr ; wobei expr ein Ausdruck ist q Effekt ist der Effekt von expr, der Wert von expr wird ignoriert 108

Ausdrucksanweisungen q haben die Form expr ; wobei expr ein Ausdruck ist q Effekt ist der Effekt von expr, der Wert von expr wird ignoriert Beispiel: b = b * b; 109

Deklarationsanweisungen q führen neue Namen im Programm ein q bestehen aus Deklaration + Semikolon 110

Deklarationsanweisungen q führen neue Namen im Programm ein q bestehen aus Deklaration + Semikolon Beispiel: int a; 111

Deklarationsanweisungen q führen neue Namen im Programm ein q bestehen aus Deklaration + Semikolon Beispiel: int a; q können Variablen auch initialisieren 112

Deklarationsanweisungen q führen neue Namen im Programm ein q bestehen aus Deklaration + Semikolon Beispiel: int a; q können Variablen auch initialisieren Beispiel: int b = a * a; 113

Rückgabeanweisungen q treten nur in Funktionen auf und sind von der Form return expr ; wobei expr ein Ausdruck ist q spezifizieren Rückgabewert der Funktion 114

Rückgabeanweisungen q treten nur in Funktionen auf und sind von der Form return expr ; wobei expr ein Ausdruck ist q spezifizieren Rückgabewert der Funktion Beispiel: return 0; 115

power8_exact.cpp n Problem mit power8.cpp: grosse Eingaben werden nicht korrekt behandelt 116

power8_exact.cpp n Problem mit power8.cpp: grosse Eingaben werden nicht korrekt behandelt n Grund: Wertebereich des Typs int ist beschränkt (siehe nächste VL) 117

power8_exact.cpp n Problem mit power8.cpp: grosse Eingaben werden nicht korrekt behandelt n Grund: Wertebereich des Typs int ist beschränkt (siehe nächste VL) n Lösung: verwende einen anderen Typ, z.b. ifm::integer (siehe Programm power8_exact.cpp) 118