Inhalt der Vorlesung. Systematisches Problemlösen mit dem Computer und der Programmiersprache C++. Also: nicht nur aber auch Programmierkurs.

Ähnliche Dokumente
Die Mersenne sche Vermutung. Einführung. Der Vortrag von Cole. Die Mersenne sche Vermutung

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++

Wertebereich und Genauigkeit der Zahlendarstellung

Die Programmiersprache C

Praktikum zur Vorlesung Einführung in die Programmierung WS 14/15 Blatt 3

Werkzeuge zur Programmentwicklung

Unterlagen. CPP-Uebungen-08/

6. Fliesskommazahlen II. Fliesskommazahlensysteme; IEEE Standard; Grenzen der Fliesskommaarithmetik; Fliesskomma-Richtlinien; Harmonische Zahlen

Objektorientiertes Programmieren für Ingenieure

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

Algorithmen zur Datenanalyse in C++

Grundlagen von C# - 1

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

Ein- und Ausgabe (I/O)

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

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

Einführung in die Informatik I (autip)

Programmierung mit C Zeiger

Grundlagen der Informatik I (Studiengang Medieninformatik)

Deklarationen in C. Prof. Dr. Margarita Esponda

Erste Schritte der Programmierung in C

7. Fliesskommazahlen II. Fliesskommazahlensysteme; IEEE Standard; Grenzen der Fliesskommaarithmetik; Fliesskomma-Richtlinien; Harmonische Zahlen

Was Mathematiker schon vor Jahrhunderten erfunden haben, gibt es jetzt endlich in ihrer Programmiersprache:

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

3. Datentypen, Ausdrücke und Operatoren

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

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Wiederholung Kapitel 4. Birgit Engels, Anna Schulze WS 07/08

Kapitel 05. Datentypen. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Einführung in die Informatik. Processing Numbers. Motivation. Primitive Datentypen. Operatoren versus Methoden

C++ Notnagel. Ziel, Inhalt. Programmieren in C++

Programmierkurs Python I

Übungen zu C++ Kapitel 1

Programmierkurs Python I

Einführung in C ++ und die Objektorientierte Programierung

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

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

Verschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes

2 Einfache Rechnungen

Funktionales C++ zum Ersten

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

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

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe

Dr. Monika Meiler. Inhalt

Grundlagen. Kapitel 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 12/13. Kapitel 3. Grunddatentypen, Ausdrücke und Variable

Motivation und Überblick

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

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

Kapitel 3. Mein erstes C-Programm

Kapitel 3. Grunddatentypen, Ausdrücke und Variable

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Informatik I - Einstiegskurs

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

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

Algorithmus: Kochrezept

1 EINFÜHRUNG PROGRAMMIERSPRACHEN

Elementare Konzepte von

Zeiger, Arrays und Strings in C und C++

Ein erstes Java-Programm

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen. I.2. I.2. Grundlagen von von Programmiersprachen.

Beispiel. Problem: mehrteilige Nachnamen (von Goethe, Mac Donald, Di Caprio)

Grundlagen der Programmentwicklung

Algorithmen und Datenstrukturen 1. EINLEITUNG. Algorithmen und Datenstrukturen - Ma5hias Thimm 1

Vorlesung Programmieren

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

Programmieren in Java

Programmier-Befehle - Woche 10

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

Vorkurs C++ Programmierung

Algorithmen und Datenstrukturen

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

Klausur: Grundlagen der Informatik I, am 05. Februar 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

Selber Programmieren

Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen.

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

Grundlagen. Die Komponenten eines C Programms. Das erste Programm

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

2.5 Primitive Datentypen

Einführung in die Programmierung Wintersemester 2008/09

2. Programmierung in C

Einführung in die Programmierung mit VBA

Grundlagen der Informatik 2. Operatoren

Javaprogrammierung mit NetBeans. Variablen, Datentypen, Methoden

GI Vektoren

Programmierkurs II. C und Assembler

1. Referenzdatentypen: Felder und Strings. Referenz- vs. einfache Datentypen. Rückblick: Einfache Datentypen (1) 4711 r

Schleifenanweisungen

Ausdrücke. Variable, Typ, Kontext, Deklaration, Initialisierung, Ausdruck, Syntax, Semantik, Seiteneffekt

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 16

5 Grundlagen der Java-Syntax

Programmieren für Physiker: C++ SS 2016

2. Datentypen und Deklarationen

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

Grundlagen der Informatik 5. Kontrollstrukturen II

Transkript:

1 1. Einführung Mersenne sche Vermutung, Höhere Programmiersprachen, Editor, Compiler, Computer, Betriebssystem, das erste C++ Programm und seine syntaktischen und semantischen Bestandteile

Inhalt der Vorlesung 2 Systematisches Problemlösen mit dem Computer und der Programmiersprache C++. Also: nicht nur aber auch Programmierkurs.

Die Mersenne sche Vermutung 3 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 weiteres n < 257. 2 2 1 = 3 2 3 1 = 7 2 5 1 = 31

Die Mersenne sche Vermutung 3 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 weiteres n < 257. 2 2 1 = 3 2 19 1 (1644) 2 3 1 = 7 2 31 1 (1772, Euler) 2 5 1 = 31

Die Mersenne sche Vermutung 3 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 weiteres n < 257. 2 2 1 = 3 2 19 1 (1644) 2 3 1 = 7 2 31 1 (1772, Euler) 2 5 1 = 31 2 67 1 (1876, Lucas)

Die Mersenne sche Vermutung 4 Lucas Beweis von 1876 ist nicht konstruktiv: er liefert keine Faktorisierung von 2 67 1 = 147573952589676412927.

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

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

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

Der Vortrag von Cole Frank Nelson Cole: On the Factorization of large numbers, Treffen der American Mathematical Society 1903 Vielleicht761838257287 193707721 der erste und einzige Vortrag, der je ohne ein einziges 761838257287 Wort auskam. 6856544315583 2285514771861 5332867801009 5332867801009 5332867801009 1523676514574 761838257287 147573952589676412927 5

Der Vortrag von Cole Frank Nelson Cole: On the Factorization of large numbers, Treffen der American Mathematical Society 1903 Vielleicht761838257287 193707721 der erste und einzige Vortrag, der je ohne ein einziges 761838257287 Wort auskam. 6856544315583 2285514771861 5332867801009 5332867801009 5332867801009 1523676514574 761838257287 147573952589676412927 = 2 67 1 5

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

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

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

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

Die Mersenne sche Vermutung heute 8 Für n = 67 und n = 257 ist 2 n 1 keine Primzahl.

Die Mersenne sche Vermutung heute 8 Für n = 67 und n = 257 ist 2 n 1 keine Primzahl. Mersenne hat andererseits die Exponenten n = 61, 89, 107 vergessen.

Die Mersenne sche Vermutung heute 8 Für n = 67 und n = 257 ist 2 n 1 keine Primzahl. Mersenne hat andererseits die Exponenten n = 61, 89, 107 vergessen. Die grösste bisher bekannte Primzahl der Form 2 n 1 ist 2 57,885,161 1, gefunden im Januar 2013 mit massivem Computereinsatz und Spezialsoftware

Deklaratives Wissen 9 Wissen über Sachverhalte formulierbar in Aussagesätzen. Es gibt unendlich viele ganze Zahlen. Der Computerspeicher ist endlich. x ist eine Wurzel von y, wenn y = x 2.

Prozedurales Wissen Wissen über Abläufe formulierbar in Form von Verarbeitungsanweisungen (kurz: Befehle). Beispiel: Algorithmus 1 zur Approximation von y: 1 Starte mit einem Schätzwert s von y. 2 Ist s 2 nahe genug bei y, dann ist x := s eine gute Approximation der Wurzel von y. 3 Andernfalls erzeuge eine neue Schätzung durch s neu := s + y/s. 2 4 Ersetze s durch s neu und gehe zurück zu Schritt 2. 1 Newton-Methode 10

Programmieren Mit Hilfe einer Programmiersprache wird dem Computer eine Folge von Befehlen erteilt, damit er genau das macht, was wir wollen. Die Folge von Befehlen ist das (Computer)-Programm. The Harvard Computers, Menschliche Berufsrechner, ca.1890 http://en.wikipedia.org/wiki/harvard_computers 11

Warum Programmieren? 12 Da hätte ich ja gleich Informatik studieren können... Es gibt doch schon für alles Programme... Programmieren interessiert mich nicht... Weil Informatik hier leider ein Pflichtfach ist......

Darum Programmieren! 13 Jedes Verständnis moderner Technologie erfordert Wissen über die grundlegende Funktionsweise eines Computers. Programmieren (mit dem Werkzeug Computer) wird zu einer Kulturtechnik wie Lesen und Schreiben (mit den Werkzeugen Papier und Bleistift) Die meisten qualifizierten Jobs benötigen zumindest elementare Programmierkenntnisse.

Darum Programmieren! 13 Jedes Verständnis moderner Technologie erfordert Wissen über die grundlegende Funktionsweise eines Computers. Programmieren (mit dem Werkzeug Computer) wird zu einer Kulturtechnik wie Lesen und Schreiben (mit den Werkzeugen Papier und Bleistift) Die meisten qualifizierten Jobs benötigen zumindest elementare Programmierkenntnisse. Programmieren macht Spass!

Höhere Programmiersprachen Sprache, die der Computer "versteht", ist sehr primitiv (Maschinensprache). Einfache Operationen müssen in viele Einzelschritte aufgeteilt werden. Sprache variiert von Computer zu Computer. Höhere Programmiersprache: darstellbar als Programmtext, der von Menschen verstanden werden kann vom Computermodell unabhängig ist Abstraktion! 14

Höhere Programmiersprachen Pionier an der ETH: Niklaus Wirth (Prof. an der ETH von 1986 bis 1999) Entwickler von Pascal, Modula-2, Oberon Noch immer sehr aktiv, u.a. im Bereich Processor Design auf FPGAs 2. 2 Field Programmable Gate Arrays Niklaus Wirth 15

Warum C++? 16 Andere populäre höhere Programmiersprachen: Java, C#, Objective-C, Modula, Oberon,...

Warum C++? 16 Andere populäre höhere Programmiersprachen: Java, C#, Objective-C, Modula, Oberon,... C++ ist relevant in der Praxis. Für das wissenschaftliche Rechnen (wie es in der Mathematik und Physik gebraucht wird), bietet C++ viele nützliche Konzepte. C++ ist weit verbreitet und läuft überall C++ ist standardisiert, d.h. es gibt ein offizielles C++.

Warum C++? 16 Andere populäre höhere Programmiersprachen: Java, C#, Objective-C, Modula, Oberon,... C++ ist relevant in der Praxis. Für das wissenschaftliche Rechnen (wie es in der Mathematik und Physik gebraucht wird), bietet C++ viele nützliche Konzepte. C++ ist weit verbreitet und läuft überall C++ ist standardisiert, d.h. es gibt ein offizielles C++. Der Dozent mag C++.

Was braucht es zum Programmieren? 17 Editor: Programm zum ändern, Erfassen und Speichern von C++-Programmtext Compiler: Programm zum Übersetzen des Programmtexts in Maschinensprache Computer: Gerät zum Ausführen von Programmen in Maschinensprache Betriebssystem: Programm zur Organsiation all dieser Abläufe (Dateiverwaltung, Editor-, Compiler- und Programmaufruf)

Computer 18 Zutaten der Von Neumann Architektur: Hauptspeicher (RAM) für Programme und Daten Prozessor (CPU) zur Verarbeitung der Programme und Daten I/O Komponenten zur Kommunikation mit der Aussenwelt

Hauptspeicher 19 Folge von Bits aus {0, 1}. Programmzustand: Werte aller Bits. Zusammenfassung von Bits zu Speicherzellen (oft: 8 Bits = 1 Byte). Jede Speicherzelle hat eine Adresse. Random Access: Zugriffszeit auf Speicherzelle (nahezu) unabhängig von ihrer Adresse.

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

Das erste C++ Programm 21 // 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;

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

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

Syntax und Semantik 23 Der ISO/IEC Standard 14822 (1998, 2011)... ist das Gesetz von C++ legt Grammatik und Bedeutung von C++-Programmen fest enthält seit 2011 Neuerungen für fortgeschrittenes Programmieren...... weshalb wir auf diese Neuerungen hier auch nicht weiter eingehen werden.

Verhalten eines Programmes 24 Zur Compilationszeit: vom Compiler akzeptiertes Programm (syntaktisch korrektes C++) Compiler-Fehler

Verhalten eines Programmes 24 Zur Compilationszeit: vom Compiler akzeptiertes Programm (syntaktisch korrektes C++) Compiler-Fehler Zur Laufzeit: korrektes Resultat inkorrektes Resultat Programmabsturz Programm terminiert nicht (Endlosschleife)

Sprachbestandteile am Beispiel 25 Kommentare/Layout Konstanten Include-Direktiven Bezeichner, Namen Die main-funktion Objekte Werte, Effekte Ausdrücke Typen, Funktionalität L- und R-Werte Literale Operatoren Variablen Anweisungen

Kommentare und Layout 26 Kommentare hat jedes gute Programm, dokumentieren, was das Programm wie macht und wie man es verwendet und werden vom Compiler ignoriert. Syntax: Doppelslash // bis Zeilenende. Ignoriert werden vom Compiler ausserdem Leerzeilen, Leerzeichen, Einrückungen, die die Programmlogik widerspiegeln (sollten)

Kommentare und Layout 27 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;}

Kommentare und Layout 27 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;}... uns aber nicht!

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

Die Hauptfunktion 29 Die main-funtion existiert in jedem C++ Programm wird vom Betriebssystem aufgerufen wie eine mathematische Funktion... Argumente (bei power8.cpp: keine) Rückgabewert (bei power8.cpp: 0)... aber mit zusätzlichem Effekt. Lies eine Zahl ein und gib die 8-te Potenz aus.

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

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

Fundamentaltypen 32 C++ enthält fundamentale Typen für Ganze Zahlen (int) Natürliche Zahlen (unsigned int) Reelle Zahlen (float, double) Wahrheitswerte (bool)...

Literale 33 repräsentieren konstante Werte, haben festen Typ und Wert sind "syntaktische Werte". Beispiele: 0 hat Typ int, Wert 0. 1.2e5 hat Typ double, Wert 1.2 10 5.

Variablen 34 repräsentieren (wechselnde) Werte, haben Name Typ Wert Adresse sind im Programmtext "sichtbar".

Variablen 34 repräsentieren (wechselnde) Werte, haben Name Typ Wert Adresse sind im Programmtext "sichtbar". Beispiel int a; definiert Variable mit Name: a Typ: int Wert: (vorerst) undefiniert Adresse: durch Compiler bestimmt

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

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

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

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

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

Ausdrücke (Expressions) 39 repräsentieren Berechnungen, sind primär oder zusammengesetzt (aus anderen Ausdrücken und Operationen) a * a zusammengesetzt aus Variablenname, Operatorsymbol, Variablenname Variablenname: primärer Ausdruck können geklammert werden a * a = (a * a)

Ausdrücke (Expressions) 40 haben Typ, Wert und Effekt (potenziell). Beispiel a * a Typ: int (Typ der Operanden) Wert: Produkt von a und a Effekt: keiner. Beispiel b = b * b Typ: int (Typ der Operanden) Wert: Produkt von b und b Effekt: Weise b diesen Wert zu. Typ eines Ausdrucks ist fest, aber Wert und Effekt werden erst durch die Auswertung des Ausdrucks bestimmt.

L-Werte und R-Werte 41 L-Wert Ausdruck mit Adresse Wert ist der Wert des Objektes an dieser Adresse gibt Objekt einen (temporären) Namen Beispiel: Variablenname, weitere Beispiele etwas später...

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

L-Werte und R-Werte 42 R-Wert Ausdruck der kein L-Wert ist Beispiel: Literal R-Wert kann seinen Wert nicht ändern. Jeder L-Wert kann als R-Wert benutzt werden, aber nicht umgekehrt. Jedes e-bike kann als normales Fahrrad benutzt werden, aber nicht umgekehrt.

Operatoren 43 Operatoren machen aus Ausdrücken (Operanden) neue zusammengesetzte Ausdrücke spezifizieren für die Operanden und das Ergebnis die Typen, und ob sie L- oder R-Werte sein müssen haben eine Stelligkeit

44 Multiplikationsoperator * erwartet zwei R-Werte vom gleichen Typ als Operanden (Stelligkeit 2) "gibt Produkt als R-Wert des gleichen Typs zurück", das heisst formal: Der zusammengesetzte Ausdruck ist ein R-Wert; sein Wert ist das Produkt der Werte der beiden Operanden Beispiele: a * a und b * b

Zuweisungsoperator = 45 linker Operand ist L-Wert, rechter Operand ist R-Wert des gleichen Typs. Weist linkem Operanden den Wert des rechten Operanden zu und gibt den linken Operanden als L-Wert zurück Beispiele: b = b * b und a = b

Zuweisungsoperator = 45 linker Operand ist L-Wert, rechter Operand ist R-Wert des gleichen Typs. Weist linkem Operanden den Wert des rechten Operanden zu und gibt den linken Operanden als L-Wert zurück Beispiele: b = b * b und a = b Vorsicht, Falle! Der Operator = entspricht dem Zuweisungsoperator in der Mathematik (:=), nicht dem Vergleichsoperator (=).

Eingabeoperator >> 46 linker Operand ist L-Wert (Eingabestrom) rechter Operand ist L-Wert 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)

Eingabeoperator >> 46 linker Operand ist L-Wert (Eingabestrom) rechter Operand ist L-Wert 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) Eingabestrom wird verändert und muss deshalb ein L-Wert sein!

Ausgabeoperator << 47 linker Operand ist L-Wert (Ausgabestrom) rechter Operand ist R-Wert 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)

Ausgabeoperator << 47 linker Operand ist L-Wert (Ausgabestrom) rechter Operand ist R-Wert 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) Ausgabestrom wird verändert und muss deshalb ein L-Wert sein!

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

Ausgabeoperator << 48 Warum Rückgabe des Ausgabestroms? erlaubt Bündelung von Ausgaben std::cout << a << "^8 = " << b * b << ".\n" ist wie folgt logisch geklammert ((((std::cout << a) << "^8 = ") << b * b) << ".\n") std::cout << a dient als linker Operand des nächsten << und ist somit ein L-Wert, der kein Variablenname ist.

Anweisungen (statements) 49 Bausteine eines C++ Programms werden (sequenziell) ausgeführt enden mit einem Semikolon Jede Anweisung hat (potenziell) einen Effekt.

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

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

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

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

power8 exact.cpp 54 // Program: power8_exact.cpp // Raise a number to the eighth power, // using integers of arbitrary size #include <iostream> #include <IFM/integer.h> int main() { // input std::cout << "Compute a^8 for a =? "; ifm::integer a; std::cin >> a; } // computation ifm::integer 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;