Die Addition in C++ (Die Addition in C++, Plus, Summe, Summen, Additionsoperator), Lektion, Seite 722467
https://www.purl.org/stefan_ram/pub/addition_c++_de (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
C++-Kurs

Die Addition »…+…« in C++ 

Einführendes Beispiel

Eine Summe kann in einem Programm mit der aus der Schule gewohnten Schreibweise als Ausdruck verwendet werden. Die Addition wird mit dem Pluszeichen »+« geschrieben.

main.cpp

#include <iostream>
#include <ostream>
#include <string>

using namespace ::std::literals;

int main() { ::std::cout << 1 + 1 << "\n"s; }

Protokoll
2
C++ 
1 + 1
auf deutsch:
● „1 und 1“
● „1 plus 1“
● „die Summe von 1 und 1“

Syntax

Die Addition ist linksassoziativ. Ihre Priorität  ist niedriger als die der Division.

Wir erweitern das Syntaxdiagramm für Ausdrücke um den Additionsoperator »+«.

Neue, erweiterte Syntax

Primaerausdruck

.----------.
---.------------>| Literal |------------.--->
| '----------' |
| .-. .----------. .-. |
'--->( ( )--->| Ausdruck |--->( ) )---'
'-' '----------' '-'

unaerer Ausdruck

.-----------------.
---.------------>| Primaerausdruck |------------.--->
| '-----------------' |
| .------------. .-----------------. |
'--->| Vorzeichen |--->| Primaerausdruck |---'
'------------' '-----------------'

Vorzeichen

.-.
---.--->( + )---.--->
| '-' |
| .-. |
'--->( - )---'
'-'

multiplikativer Ausdruck

.------------------.
---.--------------------------------------------->| unaerer Ausdruck |---.--->
| '------------------' |
| .---------------------------. .-. .------------------. |
'--->| multiplikativer Ausdruck |--->( * )--->| unaerer Ausdruck |---'
| '---------------------------' '-' '------------------' |
| .---------------------------. .-. .------------------. |
'--->| multiplikativer Ausdruck |--->( / )--->| unaerer Ausdruck |---'
'---------------------------' '-' '------------------'

additiver Ausdruck

.--------------------------.
---.-------------------------------------->| multiplikativer Ausdruck |---.--->
| '--------------------------' |
| .--------------------. .-. .--------------------------. |
'--->| additiver Ausdruck |--->( + )--->| multiplikativer Ausdruck |---'
'--------------------' '-' '--------------------------'

Ausdruck

.--------------------.
--->| additiver Ausdruck |--->
'--------------------'

Typanforderungen Der Augend (erste Operand) und der Addend (zweite Operand) kann jeden der bisher vorgestellten numerischen Typen (»int« oder »double«) haben.

Typergebnis Ist der Typ des einen Operanden »double«, so wird der Wert des anderen Operand in diesen Typ gewandelt und das Ergebnis der Addition hat den Typ »double«. Sonst hat der gesamte Ausdruck den Typ »int«. (Diese Erklärung berücksichtigt zur Vereinfachung zunächst nur die Typen »int« und »double«.)

Typregeln

double  + … → double 
+ double double 
int  + int int 

Semantik Der Wert eines Additionsausdrucks mit numerischen Operanden ist die Summe dieser Operanden.

Wir betrachten zunächst numerische Operandenausdrücke.

Bei diesen erfolgt die Typangleichung so wie bei der Division, nur daß es hier weniger Probleme mit Nachkommastellen gibt, weil die Addition zweier ganzzahliger Werte auch in der Mathematik keine Nachkommastellen ergibt.

main.cpp

#include <iostream>
#include <ostream>
#include <string>

using namespace ::std::literals;

int main() { ::std::cout << 1. + 1 << "\n"s; }

::std::cout
2
main.cpp

#include <iostream>
#include <ostream>
#include <string>

using namespace ::std::literals;

int main() { ::std::cout << 1 + 1. << "\n"s; }

::std::cout
2
main.cpp

#include <iostream>
#include <ostream>
#include <string>

using namespace ::std::literals;

int main() { ::std::cout << 1. + 1. << "\n"s; }

::std::cout
2

Priorität

Die Priorität  der Addition ist kleiner als die der Division. Das heißt, daß ein Operandenausdruck, der direkt zwischen einem »+« und einem »/« steht, zu dem »/« gezählt wird.

Auswertung mit Priorität
2  + 4./2
2 + 2.
4.
main.cpp

#include <iostream>
#include <ostream>
#include <string>

using namespace ::std::literals;

int main() { ::std::cout << 2 + 4./2 << "\n"s; }

::std::cout
4

Um eine spezielle gewünschte Zusammenfassung  zu erreichen, können Ausdruckklammern verwendet werden.

Auswertung mit Ausdruckklammern
( 2 + 4. )/2  →
6./2 →
3.
main.cpp

#include <iostream>
#include <ostream>
#include <string>

using namespace ::std::literals;

int main() { ::std::cout << ( 2 + 4. )/2 << "\n"s; }

::std::cout
3

Vorzeichen  haben eine höhere Priorität als die Addition:

main.cpp

#include <iostream>
#include <ostream>
#include <string>

using namespace ::std::literals;

int main() { ::std::cout << -3 + 9 << "\n"s; }

::std::cout
6
main.cpp

#include <iostream>
#include <ostream>
#include <string>

using namespace ::std::literals;

int main() { ::std::cout << -( 3 + 9 ) << "\n"s; }

::std::cout
-12

Die Abstraktion des unsichtbaren Implementation (black box ) *

Der Operator »+« wird in der Regel nur dadurch beschrieben, welches Ergebnis  er liefert. Die Technik, wie  der Operator »+« es erreicht, das richtige Ergebnis zu „finden“ wird verborgen. Dadurch wird der Verwender dieses Operators davon entlastet, sich über die Details der Umsetzung Gedanken machen zu müssen.

Man kann dies mit einer Maschine wie beispielsweise einem Fahrstuhl vergleichen: Der Bediener muß nur wissen, welche Wirkung die einzelnen Knöpfe haben (er muß also nur die Oberfläche zur Bedienung kennen), aber nicht, wie die Technik das im einzelnen realisiert. Das Innere der Maschine ist für den Benutzer nicht sichtbar (abstrahiert).

Die Umsetzung von Funktionen wird Implementation  (hier wäre dies also die „Implementation der Addition“) genannt. Die Implementation wird in der Programmierung oft verborgen.

Diese Abstraktion der „unsichtbaren Implementation“ (black box ) ist eine der wichtigsten Techniken, die in der Programmierung zur Beherrschung der Komplexität großer Programm eingesetzt wird.

Übungsfragen

?   Ausdrücke

Ist »1*2+3« ein multiplikativer Ausdruck?

Welcher Operator in »1*2+3« kommt in einem Operanden vor?

Welchen Wert hat demzufolge »1*2+3«?

Neue, erweiterte Syntax

Primaerausdruck

.----------.
---.------------>| Literal |------------.--->
| '----------' |
| .-. .----------. .-. |
'--->( ( )--->| Ausdruck |--->( ) )---'
'-' '----------' '-'

unaerer Ausdruck

.-----------------.
---.------------>| Primaerausdruck |------------.--->
| '-----------------' |
| .------------. .-----------------. |
'--->| Vorzeichen |--->| Primaerausdruck |---'
'------------' '-----------------'

Vorzeichen

.-.
---.--->( + )---.--->
| '-' |
| .-. |
'--->( - )---'
'-'

multiplikativer Ausdruck

.------------------.
---.--------------------------------------------->| unaerer Ausdruck |---.--->
| '------------------' |
| .---------------------------. .-. .------------------. |
'--->| multiplikativer Ausdruck |--->( * )--->| unaerer Ausdruck |---'
| '---------------------------' '-' '------------------' |
| .---------------------------. .-. .------------------. |
'--->| multiplikativer Ausdruck |--->( / )--->| unaerer Ausdruck |---'
'---------------------------' '-' '------------------'

additiver Ausdruck

.--------------------------.
---.-------------------------------------->| multiplikativer Ausdruck |---.--->
| '--------------------------' |
| .--------------------. .-. .--------------------------. |
'--->| additiver Ausdruck |--->( + )--->| multiplikativer Ausdruck |---'
'--------------------' '-' '--------------------------'

Ausdruck

.--------------------.
--->| additiver Ausdruck |--->
'--------------------'

?   Ausdrücke

Welcher der folgenden Ausdrücke hat denselben Wert wie »1 / 2+3«?

»1/( 2+3 )«   Anton
»( 1/2 )+ 3«  Berta

?   Ausgabe eines Programms *

Welche Ausgabe erzeugt das folgende Programm?

main.cpp

#include <iostream>
#include <ostream>
#include <string>

using namespace ::std::literals;

int main() { ::std::cout << 1///
+1
<< "\n"s; }

?   Ausgabe eines Programms *

Welche Ausgabe erzeugt das folgende Programm?

main.cpp

#include <iostream>
#include <ostream>
#include <string>

using namespace ::std::literals;

int main() { ::std::cout << 1/ //
+1
<< "\n"s; }

Übungsaufgaben

/   Terme

Die in der Mathematik vorkommenden Schreibweisen für Werte werden Terme genannt. In C++  verwendet man keine Terme. Die Ausdrücke von C++  haben aber Ähnlichkeit mit Termen. Viele Terme lassen sich auch als Ausdruck schreiben und umgekehrt.

Schreiben Sie möglichst kurze Ausdrücke für die folgenden Terme, ohne vorher irgendwelche Teile der Terme im Kopf auszurechnen. Die Werte der Ausdrücke sollten den mathematischen Werten der vorgegebenen Terme möglichst nahe kommen, also den Werten, die man in der Grundschule als Werte der Terme ansehen würde.

Term (Ein Halb plus drei Viertel, erwartete Ausgabe: ungefähr »1.25«)
 1       3
--- + ---
2 4
Term (Drei plus Vier im Zähler und Fünf plus Sechs im Nenner, erwartete Ausgabe: ungefähr »0.636364«)
  3 + 4
---------
5 + 6

Falls beim Lösen der zweiten Übungsaufgabe die Lösung der ersten Übungsaufgabe noch aufbewahrt werden soll, so ist es am besten, die Lösung der ersten Übungsaufgabe in eine extra Textdatei zu kopieren, damit die Lösung der zweiten Übungsaufgabe übersichtlich bleibt. Es spricht aber auch nichts dagegen, wenn beim Lösen der zweiten Übungsaufgabe die Lösung der ersten Übungsaufgabe wieder verloren geht.

/   Beschriftung einer Ausgabe

Berechnen Sie mit C++  die Summe 2+3 (diese soll nicht  im Kopf ausgerechnet werden) und geben Sie das Ergebnis dann mit dem Text »2 + 3 = « (acht Zeichen) davor und dem Text ».« (ein Zeichen) dahinter aus.

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram722467 stefan_ram:722467 Die Addition in C++, Plus, Summe, Summen, Additionsoperator Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd722467, slrprddef722467, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/addition_c++_de